理解nnet函数的输出

我是神经网络的新手,所以对于我的天真问题感到抱歉。我想了解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的输出?这个函数如何计算残差?

回答:

我其实一般没有R的经验,但从神经网络的角度来看,输出似乎很合理。

神经网络中的一个类实际上是一个神经元,它根据它的激活函数提供概率。在你的情况下,有三个(0-2)。因此,看起来你的网络为每个神经元(或类)输出某种概率。您可以通过总结输出来看到这一点。它们相当于每个样本一个。这显示了网络在特定样本上的表现如何。例如,如果你的样本属于一个特定的类,那么相关的神经元应该有一个尽可能靠近一个的输出,其他的输出为零。

残差只是预测值和目标值之间的差异。您可以通过检查这些值来验证这一点。所以这意味着残差必须尽可能小。从您的数据中可以看出,遗漏样本的残差非常高。

以上是 理解nnet函数的输出 的全部内容, 来源链接: utcz.com/qa/262342.html

回到顶部