在R中使用randomForest键入Mismatch Error

时间:2013-04-23 15:13:24

标签: r error-handling random-forest kaggle

我正在尝试使用R中的随机林来分类一些kaggle数据,但每当我尝试使用我创建的模型时,我都会收到以下错误。

Error in predict.randomForest(fit, newdata = test, type = "class") : 
  Type of predictors in new data do not match that of the training data

我完全迷失了这个错误的原因,谷歌没有太多帮助。任何帮助或见解将不胜感激。下面给出了简单的代码片段,它是为了解决其中一个讨人喜欢的问题。

fit = randomForest(as.factor(IsBadBuy) ~ VehicleAge + WheelTypeID + Transmission + WarrantyCost + VehOdo + Auction, 
                   data=training, importance=TRUE, do.trace=100, keep.forest=TRUE)

prediction = predict(fit, newdata=test, type='class')

t = table(observed=test[, 'IsBadBuy'], predict=prediction)

3 个答案:

答案 0 :(得分:1)

对于像我这样的R新手...... 当他们说'#34时,它们是正确的;错误信息的含义正是它所说的:训练数据中至少有一个变量,其类型与测试数据中的等效变量不匹配。"

执行以下操作以确认没有明显不同:
str(training)str(NewData)

这将列出培训和新数据的功能和类型。您可能仍然感到困惑的原因是,数据类型可能看起来匹配但错误。这可能是因为两组中的特征/列都被列为一个因素,但这些级别并不相同。我的新数据要小得多,没有培训数据的所有级别。这会让你不知所措。修复方法是:当您处理新数据并考虑它时,请传入所有可能的级别。这将使你匹配,事情会有效。

dataframe$ColToFactor <- factor(dataframe$ColToFactor, levels=c("PossibleLvl1", "PossibleLvl2", "PossibleLvl3", account for all possible))

这就是我的交易。

答案 1 :(得分:0)

看看这个页面,可能会有所帮助:

http://gettinggeneticsdone.blogspot.be/2011/02/split-data-frame-into-testing-and.html

它解释了如何使用优雅的功能将数据框拆分为R中的测试和训练集,以及如何在随机森林的情况下使用它。

答案 2 :(得分:0)

此错误主要是由于分类预测因素,假设在训练模型时训练集中出现了特定类别的分类预测变量,但在预测出现此错误时未在测试集中出现

(例如)考虑一个名为“工资水平”的分类预测因子,其中三个级别为低,中,高三个级别,所有这些类别在训练集中至少发生一次,但在测试集中,其中一个类别说“中等”不会发生在所有 那么变量“salary_level”被认为是一个新的或不同的变量,在预测函数的测试测试中有两个类。因此错误数据不匹配。

你可以通过使用函数表(data_name $ variable_name)或table(data_name [,columnposition])分析分类变量的类来克服这个问题