Caret神经网络错误:"在重采样性能度量中缺少值"

6

我之前看到其他人遇到了这个错误,但是我没有找到令人满意的答案。我想知道是否有人能够为我的问题提供一些见解?

我有一些汽车拍卖数据,我正在尝试对其进行建模以预测 Hammer.Price

> str(myTrain)
'data.frame':   34375 obs. of  9 variables:
 $ Grade          : int  4 4 4 4 2 3 4 3 3 4 ...
 $ Mileage        : num  150850 113961 71834 57770 43161 ...
 $ Hammer.Price   : num  750 450 1600 4650 4800 ...
 $ New.Price      : num  15051 13795 15051 14475 14475 ...
 $ Year.Introduced: int  1996 1996 1996 1996 1996 1996 1996 1996 1996 1996 ...
 $ Engine.Size    : num  1.6 1.6 1.6 1.6 1.6 1.6 1.6 1.6 1.6 1.6 ...
 $ Doors          : int  3 3 3 3 3 3 3 3 3 3 ...
 $ Age            : int  3771 4775 3802 2402 2463 3528 3315 3193 4075 4988 ...
 $ Days.from.Sale : int  1778 1890 2183 1939 1876 1477 1526 1812 1813 1472 ...

myTrain 包含 70% 的随机数据,myTest 包含另外的 30%,我训练了模型。

myModel <- train(Hammer.Price ~ ., data = myTrain, method = "nnet")

这会导致以下警告信息:

警告信息: 在nominalTrainWorkflow(x = x, y = y, wts = weights, info = trainInfo, : 在重采样的性能度量中存在缺失值。

当我尝试预测时,所有结果都等于1。
myTestPred <- predict(myModel, myTest)

我之前使用这些数据来训练一个多层感知器神经网络,使用SPSS Modeller,但是在R中似乎无法重现结果。我尝试了caret中的其他神经网络包,但总是得到相同的结果。

有人比我更理解这个问题吗?

2个回答

3

如果在调用train之前缩放数据,是否可以解决这个问题?我在使用glmnet和nnet时遇到过这个问题,如果你在运行模型之前没有缩放所有变量,就会出现这个问题。如果将所有变量都设置为数字,也会有所帮助(仅限于个人经验)。

您还可以尝试使重采样显式化,例如使用:

myControl <- trainControl(method = "repeatedcv", repeats=5, number = 10)

然后将这个传递给train

myModel <- train(Hammer.Price ~ .,
    data = myTrain,
    method = "nnet",
    trControl = mycontrol)

没有数据时,有时很难发现错误,抱歉。


1
谢谢回复。不幸的是,这两个方法都没有起到作用。我发现brnn包对数据集有效,但我不太确定原因。 - Matthew Jackson

1
您的目标变量Hammer.Price是一个数值变量。从nnet函数的帮助页面上您可以看到,默认情况下nnet使用的是逻辑目标变量。因此,在建模数值目标变量时,您需要告诉nnet。您需要使用的参数是linout。通过设置linout = TRUE,您将不会再收到警告消息。请注意,保留html标签。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接