【问题标题】:Failed to train a nnet classification model with linout=T?使用 linout=T 训练 nnet 分类模型失败?
【发布时间】:2016-04-16 02:07:04
【问题描述】:

我正在使用包 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

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

【问题讨论】:

    标签: r r-caret nnet


    【解决方案1】:

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

    如果您将 linout 设置为 False,您的代码将有效。 Linout 设置为 True 切换线性输出单元,这不是您的数据集的内容。即使使用此设置的 nnet 也会给您一个 iris1 错误。

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

    nnet.default(x, y, w, entropy = TRUE, ...) 中的错误:熵拟合 仅适用于物流单位

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

    【讨论】:

    • 对不起,我很困惑。你说“Linout 设置为 True 切换到后勤单位”。但是从包文档看:linout的默认值是FALSE,意思是逻辑单位。
    猜你喜欢
    • 2018-12-15
    • 1970-01-01
    • 2018-06-13
    • 2019-05-22
    • 2018-02-13
    • 2017-08-19
    • 2020-01-09
    • 1970-01-01
    • 2020-10-05
    相关资源
    最近更新 更多