randomForest使用R进行回归,有意义吗?

时间:2014-11-10 06:22:02

标签: r regression prediction

我想检查哪个变量对结果影响最大,在我的数据中,即股票收益率。我的数据如下。

enter image description here

我的代码也附上了。

library(randomForest)
require(data.table)
data = fread("C:/stockcrazy.csv")
PEratio <- data$offeringPE/data$industryPE
data_update <- data.frame(data,PEratio)

train <- data_update[1:47,]
test <- data_update[48:57,]

对于上面的子集数据集训练和测试,我不确定是否需要对此数据进行交叉验证。我不知道该怎么做。

data.model <- randomForest(yield ~ offerings + offerprice + PEratio + count + bingo 
                           + purchase , data=train, importance=TRUE)

par(mfrow = c(1, 1))
varImpPlot(data.model, n.var = 6, main = "Random Forests: Top 6 Important Variables")
importance(data.model)
plot(data.model)


model.pred <- predict(data.model, newdata=test)
model.pred

d <- data.frame(test,model.pred)

我确定不确定IncMSE的结果是好还是坏。有人可以解释这个吗?enter image description here

此外,我发现测试数据的预测值不是真实数据的良好预测。那么我该如何改进呢?

enter image description here

1 个答案:

答案 0 :(得分:1)

我们来看看。让我们从%IncMSE开始:

我发现this关于%IncMSE的交叉验证非常好的答案我引用:

  

如果预测变量在当前模型中很重要,则分配   该预测变量的其他值随机但“逼真”(即:   将这个预测变量的值置于数据集之上,应该有一个   对预测的负面影响,即:使用相同的模型   根据除一个变量之外的相同数据进行预测   给出更糟糕的预测。

     

因此,您使用原始数据集和预测度量(MSE)   然后使用'置换'数据集,并以某种方式比较它们。一   方式,特别是因为我们期望原始的MSE始终如此   更小,可以采取差异。最后,为了制作价值观   与变量相当,这些是按比例缩放的。

这意味着在您的情况下,最重要的变量是购买,即当变量购买被置换时(即随机变化的值的顺序),得到的模型比按原始顺序变量的变量差12%。计算均方误差。使用置换购买变量,MSE高出12%,这意味着此变量是最重要的。变量重要性只是衡量预测变量在您使用的模型中的重要程度。在您的情况下,购买是最重要的,而P / E比率是最小的(对于这6个变量)。这不是你可以解释为好或坏的东西,因为它没有告诉你模型如何适应看不见的数据。我希望现在很清楚。

对于交叉验证:

您无需在培训阶段进行交叉验证,因为它会自动发生。大约有2/3的记录用于创建树,而剩下的1/3(袋外数据)用于评估树后(树的R平方使用oob数据)

至于模型的改进:

通过仅显示预测的10个第一行和产量的实际值,您无法对模型的好坏做出安全的决定。你需要的是对健康的测试。最常见的是R平方。这很简单,但是为了比较模型并获得关于模型的第一意见,它可以完成它的工作。这是由您创建的每个树的模型计算的,并且可以通过data.model $ rsq访问。其范围从0到1,其中1表示完美模型,0表示非常差的拟合(有时甚至可以采用负值表示不合适)。如果您的rsq不好,那么您可以尝试以下方法来改进您的模型,尽管您不确定是否会得到您想要的结果:

  1. 以不同的方式校准树木。通过指定大的节点数来更改生长的树的数量并修剪树。 (这里你使用默认的500棵树和5个可能过度模拟你的模型的节点大小。)
  2. 尽可能增加变量数量。
  3. 选择其他型号。有些案例是随机森林不能很好地运作