我想检查在我的数据中哪个变量对结果的影响最大,即股票收益率。我的数据如下。
而且我的代码也已附加。
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的结果是好是坏。有人可以解释吗?
另外,我发现测试数据的预测值不是真实数据的良好预测。那么我该如何改善呢?
让我们来看看。让我们从%IncMSE开始:
我在交叉引用关于%IncMSE的交叉验证中发现了这个非常好的答案,我引用:
如果预测变量在当前模型中很重要,则为该预测变量随机但实际地分配其他值(即:在您的数据集上置换该预测变量的值),会对预测产生负面影响,即:使用同一模型进行预测从除一个变量之外相同的数据得出的结果应该更糟。
因此,您先对原始数据集然后对“置换”数据集进行预测性度量(MSE),然后以某种方式进行比较。一种方法,特别是由于我们期望原始MSE总是较小,因此可以采取不同的方法。最后,为了使这些值与变量可比,对它们进行缩放。
这意味着,在您的情况下,最重要的变量是购买,即,当购买变量被置换(即,值的顺序随机更改)时,在计算均值方面,所得模型比具有其原始顺序的变量差12%平方误差。使用排列的购买变量,MSE高出12%,这意味着该变量是最重要的。变量重要性只是衡量预测变量在所使用模型中的重要性的一种度量。在您的情况下,购买是最重要的,而市盈率则是最小的(对于这6个变量)。您不能将其解释为好是坏,因为它没有显示出模型如何适合看不见的数据。我希望现在已经清楚了。
对于交叉验证:
在培训阶段,您不需要进行交叉验证,因为它会自动发生。大约有2/3的记录用于创建树,剩下的1/3(袋外数据)用于随后评估树(使用以下方法计算树的R平方) oob数据)
至于模型的改进:
仅显示预测的收益率和实际收益率的前10行,就不能对模型的好坏做出安全的决定。您需要的是对身体的测试。最常见的是R平方。它很简单,但是用于比较模型并获得有关模型的第一意见时,它确实起作用。这是由模型为您制作的每棵树计算的,可以由data.model $ rsq访问。范围从0到1,其中1是理想模型,0表示拟合度很差(有时甚至取负值表示拟合度很差)。如果您的rsq不好,则可以尝试以下方法来改进模型,尽管不能确定您会获得想要的结果:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句