【问题标题】:randomForest using R for regression, make sense?randomForest 使用 R 进行回归,有意义吗?
【发布时间】:2015-01-06 09:49:09
【问题描述】:

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

我的代码也附上了。

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 的结果是好是坏。有人能解释一下吗?

另外,我发现测试数据的预测值并不能很好地预测真实数据。那么我该如何改进呢?

【问题讨论】:

    标签: r regression prediction


    【解决方案1】:

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

    我发现this 对我引用的 %IncMSE 进行了交叉验证,这是一个非常好的答案:

    如果预测变量在您当前的模型中很重要,那么分配 该预测器的其他值随机但“现实地”(即: 在您的数据集上排列此预测变量的值),应该有一个 对预测的负面影响,即:使用相同的模型 从除了一个变量之外的相同数据中预测,应该 给出更糟糕的预测。

    因此,您对原始数据集进行预测测量 (MSE),然后 然后使用“置换”数据集,然后以某种方式比较它们。一 方式,特别是因为我们希望原始 MSE 始终是 更小,可以取差值。最后,为了使值 可比变量,这些都是按比例缩放的。

    这意味着在您的情况下,最重要的变量是购买,即当变量购买被置换(即值的顺序随机更改)时,生成的模型比原始顺序中的变量差 12%计算均方误差。使用置换的购买变量,MSE 高出 12%,这意味着这个变量是最重要的。变量重要性只是衡量您的预测变量在您使用的模型中的重要性的指标。在您的情况下,购买是最重要的,市盈率最低(对于这 6 个变量)。这不是您可以解释为好或坏的东西,因为它没有向您展示模型与看不见的数据的拟合程度。我希望这现在很清楚了。

    对于交叉验证:

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

    关于模型的改进:

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

    1. 以不同的方式校准您的树木。通过指定一个大的节点大小来更改生长的树的数量并修剪树。 (这里您使用默认的 500 棵树和 5 的节点大小,这可能会使您的模型过拟合。)
    2. 尽可能增加变量的数量。
    3. 选择不同的型号。在某些情况下,随机森林无法正常工作

    【讨论】:

    • 感谢您的 cmets 和帮助。但我仍然对整个过程感到困惑。可以给我发一封电子邮件到我的邮箱,以便我们更详细地讨论这个问题吗?
    • ,您在帖子中提到了 rsq,我在网上看到了很多使用 NMSE 进行训练和测试数据的教程。这两者有什么区别?我没有使用 500 ntree,回归的节点大小是 5 而不是 1。我正在做回归而不是分类。
    • NMSE 和 MSE 完全一样。唯一的区别是 NMSE 是标准化的。通过除以平均观察值和平均预测值的乘积来进行标准化。另一种方法是仅通过平均观测值 (ybar) 进行归一化。我知道您正在运行回归 rf,这就是我建议使用 R 平方的原因。在上面,您使用的是 ntrees = 500,因为这是默认值,并且您正确的节点大小是 5。我在上面进行了更改。
    • 如果您不熟悉上述内容,我建议您使用 this 这本书,它可以很好地介绍机器学习和 R。
    • 我还会添加一个关于交叉验证的答案。我错过了那部分
    猜你喜欢
    • 2012-03-04
    • 2013-10-18
    • 2013-04-10
    • 2012-05-09
    • 2017-01-11
    • 2016-04-14
    • 2012-05-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多