这是我的data.frame
的一个小样本 naiveBayesPrediction knnPred5 knnPred10 dectreePrediction logressionPrediction correctClass
1 non-bob 2 2 non-bob 0.687969711847463 1
2 non-bob 2 2 non-bob 0.85851872253358 1
3 non-bob 1 1 non-bob 0.500470892627383 1
4 non-bob 1 1 non-bob 0.77762739066215 1
5 non-bob 1 2 non-bob 0.556431439357365 1
6 non-bob 1 2 non-bob 0.604868385598237 1
7 non-bob 2 2 non-bob 0.554624186182919 1
我已经考虑了一切
'data.frame': 505 obs. of 6 variables:
$ naiveBayesPrediction: Factor w/ 2 levels "bob","non-bob": 2 2 2 2 2 2 2 2 2 2 ...
$ knnPred5 : Factor w/ 2 levels "1","2": 2 2 1 1 1 1 2 1 2 1 ...
$ knnPred10 : Factor w/ 2 levels "1","2": 2 2 1 1 2 2 2 1 2 2 ...
$ dectreePrediction : Factor w/ 1 level "non-bob": 1 1 1 1 1 1 1 1 1 1 ...
$ logressionPrediction: Factor w/ 505 levels "0.205412826873861",..: 251 415 48 354 92 145 90 123 28 491 ...
$ correctClass : Factor w/ 2 levels "1","2": 1 1 1 1 1 1 1 1 1 1 ...
然后我尝试使用neuralnet
进行整合ensembleModel <- neuralnet(correctClass ~ naiveBayesPrediction + knnPred5 + knnPred10 + dectreePrediction + logressionPrediction, data=allClassifiers[ensembleTrainSample,])
然后我试着加入矩阵神经元[[i]]%*%权重[[i]]出错:需要数字/复数 矩阵/矢量参数
m <- model.matrix( correctClass ~ naiveBayesPrediction + knnPred5 + knnPred10 + dectreePrediction + logressionPrediction, data = allClassifiers )
contrasts<-
中的错误(*tmp*
,值= contr.funs [1 + isOF [nn]]):
对比只能适用于具有2级或更多级别的因素
我认为这必须与一个功能有关&#34; decistreePrediction&#34;只有1级,但它只找到2个可能结果中的一个级别(bob或非bob),所以我不知道从那里去哪里。
答案 0 :(得分:3)
neuralnet
功能需要&#39;变量&#39;为numeric
或complex
值,因为它正在进行矩阵乘法,需要numeric
或complex
个参数。这在返回的错误中非常清楚:
Error in neurons[[i]] %*% weights[[i]] :
requires numeric/complex matrix/vector arguments
这也反映在以下简单的例子中。
mat <- matrix(sample(c(1,0), 9, replace=TRUE), 3)
fmat <- mat
mode(fmat) <- "character"
# no error
mat %*% mat
# error
fmat %*% fmat
Error in fmat %*% fmat : requires numeric/complex matrix/vector arguments
作为实际功能的快速演示,我将使用infert
数据集,该数据集在包中用作演示。
library(neuralnet)
data(infert)
# error
net.infert <- neuralnet(case~as.factor(parity)+induced+spontaneous, infert)
Error in neurons[[i]] %*% weights[[i]] :
requires numeric/complex matrix/vector arguments
# no error
net.infert <- neuralnet(case~parity+induced+spontaneous, infert)
您可以将correctClass
保留为factor
,因为无论如何它都会转换为虚拟数字变量,但最好也将其转换为相应的二进制表示。
我给你的建议是:
logressionPrediction
保留为数字