我是神经网络的新手,我对使用nnet包进行分类有疑问.
我有数据,它是数字和分类变量的混合.我想通过使用nnet和函数调用来赢得预测
nnet(WL~., data=training, size=10)
Run Code Online (Sandbox Code Playgroud)
但是这给出的结果与我使用仅包含变量的数字版本的数据帧(即将所有因子转换为数字(除了我的预测WL))不同.
有人可以向我解释这里发生了什么吗?我想nnet正在解释不同的变量,但我想了解发生了什么.我很欣赏它的困难,没有任何数据来重现问题,但我只是在看一个关于神经网络如何使用nnet进行拟合的高级解释.我无法在任何地方找到它.非常感谢.
str(training)
'data.frame': 1346 obs. of 9 variables:
$ WL : Factor w/ 2 levels "win","lose": 2 2 1 1 NA 1 1 2 2 2 ...
$ team.rank : int 17 19 19 18 17 16 15 14 14 16 ...
$ opponent.rank : int 14 12 36 16 12 30 11 38 27 31 ...
$ HA : Factor w/ 2 levels "A","H": 1 1 2 2 2 2 2 1 1 2 ...
$ comp.stage : Factor w/ 3 levels "final","KO","league": 3 3 3 3 3 3 3 3 3 3 ...
$ days.since.last.match: num 132 9 5 7 14 7 7 7 14 7 ...
$ days.to.next.match : num 9 5 7 14 7 9 7 9 7 8 ...
$ comp.last.match : Factor w/ 5 levels "Anglo-Welsh Cup",..: 5 5 5 5 5 5 3 5 3 5 ...
$ comp.next.match : Factor w/ 4 levels "Anglo-Welsh Cup",..: 4 4 4 4 4 3 4 3 4 3 ...
Run Code Online (Sandbox Code Playgroud)
VS
str(training.nnet)
'data.frame': 1346 obs. of 9 variables:
$ WL : Factor w/ 2 levels "win","lose": 2 2 1 1 NA 1 1 2 2 2 ...
$ team.rank : int 17 19 19 18 17 16 15 14 14 16 ...
$ opponent.rank : int 14 12 36 16 12 30 11 38 27 31 ...
$ HA : num 1 1 2 2 2 2 2 1 1 2 ...
$ comp.stage : num 3 3 3 3 3 3 3 3 3 3 ...
$ days.since.last.match: num 132 9 5 7 14 7 7 7 14 7 ...
$ days.to.next.match : num 9 5 7 14 7 9 7 9 7 8 ...
$ comp.last.match : num 5 5 5 5 5 5 3 5 3 5 ...
$ comp.next.match : num 4 4 4 4 4 3 4 3 4 3 ...
Run Code Online (Sandbox Code Playgroud)
mus*_*_ut 13
您正在寻找的差异可以用一个非常小的例子来解释:
fit.factors <- nnet(y ~ x, data.frame(y=c('W', 'L', 'W'), x=c('1', '2' , '3')), size=1)
fit.factors
# a 2-1-1 network with 5 weights
# inputs: x2 x3
# output(s): y
# options were - entropy fitting
fit.numeric <- nnet(y ~ x, data.frame(y=c('W', 'L', 'W'), x=c(1, 2, 3)), size=1)
fit.numeric
# a 1-1-1 network with 4 weights
# inputs: x
# output(s): y
# options were - entropy fitting
Run Code Online (Sandbox Code Playgroud)
在R中拟合模型时,因子变量实际上被分成几个指标/虚拟变量.
因此,因子变量x = c('1', '2', '3')实际上被分成三个变量:x1,x2,x3,其中一个存放值1,而其他持有的价值0.此外,由于因素{1, 2, 3}是穷举的,一个(并且只有一个)的x1,x2,x3必须是一个.因此,变量x1,x2,x3是不是因为独立x1 + x2 + x3 = 1.因此,我们可以删除第一个变量x1,并保持的唯一值x2和x3模型,并得出结论水平1,如果都x2 == 0和x2 == 0.
这就是你在输出中看到的nnet; 当x一个因素,实际上有神经网络的length(levels(x)) - 1 输入,如果x是一个数字,那么神经网络只有一个输入x.
至多r回归函数(nnet,randomForest,glm,gbm,等)做这个映射从因子水平在内部虚拟变量和一个不需要知道它的用户.
现在应该清楚使用数据集factors和数据集与numbers替换数据集之间的区别factors.如果你进行转换numbers,那么你是:
这确实导致了一个稍微简单的模型(变量较少,因为我们不需要dummy每个级别的变量),但通常不是正确的事情.