2015-12-17 44 views
2

我正在使用包插入符号来训练一个nnet分类模型。默认的sigmoid(逻辑)传递函数运作良好。我试图用线性传递函数做一些比较。但是我得到了一个错误。无法训练linout = T的nnet分类模型?

我发现的有趣的事情是:如果目标变量有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 

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

回答

1

也有50个警告:只有后勤单位,如果你的linout设置为False

你的代码工作熵契合。 Linout设置为True 用于线性输出单位的开关,这不是您的数据集所关心的。即使使用此设置的nnet也会给iris1一个错误。

让我们用一个简单的NNET声明 nnet(Species~., data=iris1, size = 1, linout = T)返回一个错误在nnet.default

错误(X,Y,W,熵= TRUE,...):只有后勤单位

熵适合

这大致是脱字符的警告。

+0

对不起,我很困惑。你说“把Linout设置为True切换到物流单位”。但从包装文件: linout的默认值是FALSE,这意味着物流单位。 – Leon