0

我是神經網絡的新手,所以對於我的天真問題感到抱歉。我想了解nnet函數的輸出。我正在使用此功能執行多類別分類。理解nnet函數的輸出

特別是,我有一個數據集,包含216個主題,6個變量和一個表示類的類(類是三個)。

SRT_LTS_1 SRT_LTS_2 SRT_LTS_3 SRT_LTS_4 SRT_LTS_5 SRT_LTS_6 SRT_Recall_D_tot Classe 
DATSANI01 1.386294 1.609438 2.079442 2.302585 2.397895 2.397895   2.564949  2 
DATSANI02 1.945910 2.079442 2.079442 2.197225 2.302585 2.302585   2.079442  2 
DATSANI03 2.079442 2.302585 2.302585 2.397895 2.397895 2.397895   2.397895  2 
DATSANI04 1.609438 2.079442 2.397895 2.397895 2.397895 2.397895   2.397895  2 
DATSANI05 2.197225 2.484907 2.484907 2.564949 2.564949 2.564949   2.484907  2 
DATSANI06 2.079442 2.397895 2.484907 2.564949 2.564949 2.564949   2.564949  2 

在訓練集和測試測試數據集的分開後,我已經修改了使用class.ind功能,面對多類分類問題的數據框,就像一個二元組合:

nnet_trainData_SRT2$Y = class.ind(nnet_trainData_SRT2$Classe) 

nnet_trainData_SRT2$Classe=NULL 

所以,現在,我的數據幀是這樣的:

SRT_LTS_1 SRT_LTS_2 SRT_LTS_3 SRT_LTS_4 SRT_LTS_5 SRT_LTS_6 SRT_Recall_D_tot Y.0 Y.1 Y.2 
DATNPS_209 1.791759 2.079442 2.397895 2.564949 2.564949 2.564949   2.564949 0 1 0 
DATNPS_108 2.197225 2.564949 2.564949 2.564949 2.564949 2.564949   2.564949 0 1 0 
DATNPS_234 2.197225 2.397895 2.484907 2.564949 2.564949 2.564949   2.564949 0 1 0 
DATNPS_191 1.609438 1.791759 2.079442 2.197225 2.302585 2.302585   1.945910 0 1 0 
DATNPS_126 2.397895 2.484907 2.484907 2.564949 2.564949 2.564949   2.564949 0 1 0 
DATSANI22 1.386294 1.945910 2.302585 2.484907 2.564949 2.564949   2.564949 0 0 1 

其中1和0分別表示該子項是否在三個類之一中。

然後,我用NNET功能:

model_nnSRT2<-nnet(Y~ SRT_LTS_1 +SRT_LTS_2+ SRT_LTS_3 +SRT_LTS_4+ SRT_LTS_5 +SRT_LTS_6, nnet_trainData_SRT2, size=2, decay=0.1,softmax=TRUE,entropy=TRUE). 

但是,當我得到 model_nnSRT2$fitted.values我不明白這個函數的輸出:

    0   1   2 
    DATNPS_209 0.01699072 0.827037151 0.1559721302 
    DATNPS_108 0.01789546 0.771608777 0.2104957604 
    DATNPS_234 0.01645185 0.794800012 0.1887481349 
    DATNPS_191 0.05037927 0.839477193 0.1101435346 
    DATNPS_126 0.01603337 0.788266382 0.1957002460 
    DATSANI22 0.01740139 0.836014235 0.1465843749 
    DATNPS_34 0.02802254 0.791518861 0.1804586001 
    DATNPS_117 0.05310552 0.835370232 0.1115242473 
    DATNPS_22 0.01726448 0.799919291 0.1828162304 
    DATNPS_189 0.01861498 0.775974194 0.2054108222 
    DATNPS_228 0.98459076 0.014816869 0.0005923730 
    DATNPS_255 0.01770538 0.788957760 0.1933368566 

model_nnSRT2$residuals

     0   1    2 
DATNPS_209 -0.016990718 0.172962849 -0.1559721302 
DATNPS_108 -0.017895462 0.228391223 -0.2104957604 
DATNPS_234 -0.016451854 0.205199988 -0.1887481349 
DATNPS_191 -0.050379272 0.160522807 -0.1101435346 
DATNPS_126 -0.016033372 0.211733618 -0.1957002460 
DATSANI22 -0.017401390 -0.836014235 0.8534156251 
DATNPS_34 -0.028022539 0.208481139 -0.1804586001 
DATNPS_117 -0.053105521 0.164629768 -0.1115242473 
DATNPS_22 -0.017264479 0.200080709 -0.1828162304 
DATNPS_189 -0.018614984 0.224025806 -0.2054108222 
DATNPS_228 0.015409242 -0.014816869 -0.0005923730 
DATNPS_255 -0.017705384 0.211042240 -0.1933368566 

這個連續數字是什麼意思?爲什麼我在model_nnSRT2$fitted.values中沒有0或1的輸出?這個函數如何計算殘差?

+1

不確定殘差,但是您的第一個輸出表明您的每個樣本屬於每個類的概率(注意它們總計爲每行1)。 – desertnaut

回答

0

我其實一般沒有R的經驗,但從神經網絡的角度來看,輸出似乎很合理。

神經網絡中的一個類實際上是一個神經元,它根據它的激活函數提供概率。在你的情況下,有三個(0-2)。因此,看起來你的網絡爲每個神經元(或類)輸出某種概率。您可以通過總結輸出來看到這一點。它們相當於每個樣本一個。這顯示了網絡在特定樣本上的表現如何。例如,如果你的樣本屬於一個特定的類,那麼相關的神經元應該有一個儘可能靠近一個的輸出,其他的輸出爲零。

殘差只是預測值和目標值之間的差異。您可以通過檢查這些值來驗證這一點。所以這意味着殘差必須儘可能小。從您的數據中可以看出,遺漏樣本的殘差非常高。