首页 文章

无法使用linout = T训练nnet分类模型?

提问于
浏览
2

我使用包 caret 来训练一个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

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

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,...):仅适用于逻辑单位的熵拟合

    这大致是来自插入符号的警告 .

相关问题