2

我正在使用包caret来训练一个 nnet 分类模型。默认的 sigmoid(logistic) 传递函数运行良好。我试图使用线性传递函数进行一些比较。但我得到了一个错误。

我发现有趣的是:如果目标变量有2个以上的类,线性传递函数是可以的;但如果目标变量有 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

我不知道是什么问题。有什么建议么?谢谢!

4

1 回答 1

1

您还有 50 条警告:熵仅适用于逻辑单元

如果您将 linout 设置为 False,您的代码就可以工作。线性输出单元的 Linout 设置为 True 开关,这不是您的数据集的内容。即使使用此设置的 nnet 也会给您一个 iris1 错误。

让我们使用一个简单的 nnet 语句 nnet(Species~., data=iris1, size = 1, linout = T)返回一个错误

nnet.default(x, y, w, entropy = TRUE, ...) 中的错误:熵仅适用于逻辑单元

这大致是插入符号的警告。

于 2015-12-17T18:20:54.717 回答