我使用插入符号包来训练nnet分类模型。默认的sigmoid(逻辑)传递函数运行良好。我试图使用线性传递函数进行一些比较。但是我收到了一个错误。
我发现有趣的事情是:如果目标变量有两个以上的类,线性传递函数就可以了;但如果目标变量有2个类,则失败。
以下是一些示例代码:
library(caret)
data(iris)
#This modeling works well. Species has 3 classes
model <- train(Species~., data=iris, method='nnet', linout=T, trControl=trainControl(method='cv'))
#Subset the dataset s.t. only two levels left for Species.
iris1 <- iris[1:100,]
iris1 <- droplevels(iris1)
model1 <- train(Species~., data=iris1, method='nnet', linout=T, trControl=trainControl(method='cv'))
以下是错误消息:
Something is wrong; all the Accuracy metric values are missing:
Accuracy Kappa
Min. : NA Min. : NA
1st Qu.: NA 1st Qu.: NA
Median : NA Median : NA
Mean :NaN Mean :NaN
3rd Qu.: NA 3rd Qu.: NA
Max. : NA Max. : NA
NA's :9 NA's :9
Error in train.default(x, y, weights = w, ...) : Stopping
我不知道问题是什么。有什么建议?谢谢!
答案 0 :(得分:1)
您还有50个警告:仅适用于物流单位的熵适用
如果将linout设置为False,则代码可以正常工作。 Linout设置为True 用于线性输出单元的开关,这不是您的数据集的内容。即使是使用此设置的nnet也会在iris1时出错。
让我们使用一个简单的nnet语句
nnet(Species~., data=iris1, size = 1, linout = T)
会返回错误
nnet.default中的错误(x,y,w,entropy = TRUE,...):熵适合 仅适用于物流单位
这大致是来自插入符号的警告。