神经网络预测为所有预测返回相同的值

问题描述 投票:9回答:2

我正在尝试使用Neuronet软件包构建神经网络,但遇到了一些麻烦。我已经成功使用nnet程序包,但是使用neuralnet则没有运气。我已经阅读了整个文档包,找不到解决方案,或者也许我找不到它。

我正在使用的训练命令是

nn<-neuralnet(V15 ~ V1 + V2 + V3 + V4 + V5 + V6 + V7 + V8 + V9 + V10 + V11 + V12 + V13 + V14,data=test.matrix,lifesign="full",lifesign.step=100,hidden=8) 

并且用于预测

result<- compute(nn,data.matrix)$net.result

该培训比nnet培训花费了很多时间。我尝试使用与nnet相同的算法(使用反向传播而不是弹性反向传播),什么也没做,也更改了激活函数(和linear.output=F)以及几乎所有其他内容,结果没有得到改善。预测值都相同。我不明白为什么nnet对我有用,而neuralnet却不起作用。

我真的可以使用一些帮助,我对(神经网络和R)这两种东西的(缺乏)理解可能是原因,但找不到原因。

我的数据集来自UCI。我想将神经网络用于二进制分类。数据样本为:

25,Private,226802,11th,7,Never-married,Machine-op-inspct,Own-child,Black,Male,0,0,40,United-States,<=50K.
38,Private,89814,HS-grad,9,Married-civ-spouse,Farming-fishing,Husband,White,Male,0,0,50,United-States,<=50K.
28,Local-gov,336951,Assoc-acdm,12,Married-civ-spouse,Protective-serv,Husband,White,Male,0,0,40,United-States,>50K.
44,Private,160323,Some-college,10,Married-civ-spouse,Machine-op-inspct,Husband,Black,Male,7688,0,40,United-States,>50K.
18,?,103497,Some-college,10,Never-married,NA,Own-child,White,Female,0,0,30,United-States,<=50K.
34,Private,198693,10th,6,Never-married,Other-service,Not-in-family,White,Male,0,0,30,United-States,<=50K.
29,?,227026,HS-grad,9,Never-married,?,Unmarried,Black,Male,0,0,40,United-States,<=50K.
63,Self-emp-not-inc,104626,Prof-school,15,Married-civ-spouse,Prof-specialty,Husband,White,Male,3103,0,32,United-States,>50K.
24,Private,369667,Some-college,10,Never-married,Other-service,Unmarried,White,Female,0,0,40,United-States,<=50K.
55,Private,104996,7th-8th,4,Married-civ-spouse,Craft-repair,Husband,White,Male,0,0,10,United-States,<=50K.
65,Private,184454,HS-grad,9,Married-civ-spouse,Machine-op-inspct,Husband,White,Male,6418,0,40,United-States,>50K.
36,Federal-gov,212465,Bachelors,13,Married-civ-spouse,Adm-clerical,Husband,White,Male,0,0,40,United-States,<=50K.
26,Private,82091,HS-grad,9,Never-married,Adm-clerical,Not-in-family,White,Female,0,0,39,United-States,<=50K.

转换为矩阵,因子为数值:

V1  V2  V3  V4  V5  V6  V7  V8  V9  V10 V11 V12 V13 V14 V15
39  7   77516   10  13  5   1   2   5   2   2174    0   40  39  0
50  6   83311   10  13  3   4   1   5   2   0   0   13  39  0
38  4   215646  12  9   1   6   2   5   2   0   0   40  39  0
53  4   234721  2   7   3   6   1   3   2   0   0   40  39  0
28  4   338409  10  13  3   10  6   3   1   0   0   40  5   0
37  4   284582  13  14  3   4   6   5   1   0   0   40  39  0
49  4   160187  7   5   4   8   2   3   1   0   0   16  23  0
52  6   209642  12  9   3   4   1   5   2   0   0   45  39  1
31  4   45781   13  14  5   10  2   5   1   14084   0   50  39  1
42  4   159449  10  13  3   4   1   5   2   5178    0   40  39  1
37  4   280464  16  10  3   4   1   3   2   0   0   80  39  1
30  7   141297  10  13  3   10  1   2   2   0   0   40  19  1
23  4   122272  10  13  5   1   4   5   1   0   0   30  39  0

预测值汇总:

      V1           
 Min.   :0.2446871  
 1st Qu.:0.2446871  
 Median :0.2446871  
 Mean   :0.2451587  
 3rd Qu.:0.2446871  
 Max.   :1.0000000  

Wilcoxon-Mann-Whitney检验的值(曲线下的区域表明,预测性能实际上与随机变量相同。

performance(predneural,"auc")@y.values
[1] 0.5013319126
r machine-learning artificial-intelligence neural-network survival-analysis
2个回答
17
投票

使用神经网络获得怪异结果时要考虑的第一个原因是归一化。您的数据必须规范化,否则,是的,训练将导致偏斜的NN始终产生相同的结果,这是常见症状。

看您的数据集,有值>> 1,这意味着它们都被NN基本上相同地对待。其原因是,传统上使用的响应函数在(大约)0附近的某个范围内(几乎)是常数。

在将数据输入神经网络之前,总是对其进行标准化。


2
投票

类似于@sashkello的回答,当我的数据未正确归一化时,我之前也遇到了类似的问题。一旦我对数据进行了标准化,一切就可以正常运行。

最近,我再次遇到此问题,在调试后,我发现神经网络提供相同输出可能还有另一个原因。如果您的神经网络具有权重衰减项,例如RSNNS包中的衰减项,请确保您的衰减项不会太大,以至于所有权重基本上都为0。

我在R中使用caret

包。最初,我使用了衰减超参数= 0.01。当我查看诊断信息时,我看到正在为每次折叠(交叉验证)计算RMSE,但Rsquared始终为NA。在这种情况下,所有预测都得出相同的值。

一旦我将衰减减小到非常低的值(1E-5和更低),我就得到了预期的结果。

我希望这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.