首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解nnet函数的输出

理解nnet函数的输出
EN

Stack Overflow用户
提问于 2017-12-18 18:06:55
回答 1查看 543关注 0票数 0

我是神经网络的新手,所以,对于我天真的问题,很抱歉。我想了解一下nnet函数的输出。我正在使用这个函数来执行多类分类。

特别是,我有一个包含216个主题、6个变量和一个表示类的列的数据集(类是三个)。

代码语言:javascript
复制
   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函数对数据帧进行了修改,以面对多类分类问题,如二进制组合:

代码语言:javascript
复制
nnet_trainData_SRT2$Y = class.ind(nnet_trainData_SRT2$Classe)

nnet_trainData_SRT2$Classe=NULL

所以现在,我的数据帧是这样的:

代码语言:javascript
复制
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分别表示subjcet是否在这三个类之一中。

然后,我使用nnet函数:

代码语言:javascript
复制
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时,我不理解这个函数的输出

代码语言:javascript
复制
                 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

代码语言:javascript
复制
                      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的输出?这个函数是如何计算残差的?

EN

回答 1

Stack Overflow用户

发布于 2017-12-18 20:31:54

我实际上总体上没有使用R的经验,但从神经网络的角度来看,输出似乎相当合理。

神经网络中的类实际上是一个神经元,它根据其激活函数提供概率。在您的例子中,有三个(0-2)。因此,看起来你的网络输出的是每个神经元(或类)的某种概率。您可以通过汇总输出来看到这一点。它们等于每个样本一个。这显示了网络在特定样本上的性能有多好。例如,如果您的样本属于特定的类,则相关神经元的输出应尽可能接近于1,而其他神经元的输出应尽可能接近于0。

残差就是预测值和目标值之间的差。您可以通过检查这些值来验证这一点。这意味着,残差必须尽可能的小。从你的data...the残差中可以看出,未分类样本的残差非常高。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47866057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档