我想检查哪个变量对结果影响最大,在我的数据中,即股票收益率。我的数据如下。
我的代码也附上了。
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的结果是好还是坏。有人可以解释这个吗?
此外,我发现测试数据的预测值不是真实数据的良好预测。那么我该如何改进呢?
答案 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不好,那么您可以尝试以下方法来改进您的模型,尽管您不确定是否会得到您想要的结果: