【问题标题】:How to tune random forest code for quality prediction如何调整随机森林代码以进行质量预测
【发布时间】:2019-09-27 23:17:28
【问题描述】:

我是机器学习的新手。我有这个数据集 - http://archive.ics.uci.edu/ml/datasets/Wine+Quality。我必须预测葡萄酒的质量,这是数据集的最后一列。我考虑过为此应用神经网络或随机森林,因为 NN 给出了大约 55% 的准确率,而随机森林到目前为止我设法达到了 73%。我想进一步提高准确性。以下是我编写的代码。

wineq <- read.csv("wine-quality.csv",header = TRUE)
str(wineq)

wineq$taste <- ifelse(wineq$quality < 6, 'bad', 'good')
wineq$taste[wineq$quality == 6] <- 'normal'
wineq$taste <- as.factor(wineq$taste)
set.seed(54321)
train <- sample(1:nrow(wineq), .75 * nrow(wineq))
wineq_train <- wineq[train, ]
wineq_test  <- wineq[-train, ]

library(randomForest)

rf=randomForest(taste~.- 
quality,data=wineq_train,importance=TRUE,ntree=100)

rf_preds = predict(rf,wineq_test)
rf_preds
table(rf_preds, wineq_test$taste)

输出:

表(rf_preds,wineq_test$taste)

rf_preds bad good normal
bad    302   11     81
good     7  163     36
normal  93  101    431

如果我想使用tuneRF,它会给我以下错误:

   fgl.res <- tuneRF(x = wineq[train, ], y= wineq[-train, ], 
   stepFactor=1.5)

randomForest.default(x, y, mtry = mtryStart, ntree = ntree尝试,
: 响应的长度必须与预测变量相同

【问题讨论】:

    标签: r machine-learning statistics random-forest


    【解决方案1】:

    您需要将特征变量x 和响应变量y 传递给tuneRF

    所以,首先找到你的响应变量的列位置(taste):

    resp_pos <- which(colnames(wineq) == "taste")
    

    然后:

    fgl.res <- tuneRF(x = wineq[train, -resp_pos ], y= wineq[-train, resp_pos], 
       stepFactor=1.5)
    

    我还注意到,您使用 wineq$taste &lt;- ifelse(wineq$quality &lt; 6, 'bad', 'good') 来查找您的“新”响应 (taste),基于 quality 列。请注意,这完全可以,但您需要在训练之前删除列 quality

    如果你不这样做,你的模型会过于乐观,因为它会接受例如:

    quality &lt; 6 总是意味着taste=="bad"

    【讨论】:

      猜你喜欢
      • 2014-08-07
      • 2021-03-21
      • 2019-05-04
      • 2019-07-10
      • 2021-06-23
      • 2019-02-19
      • 2021-10-10
      • 2016-04-09
      相关资源
      最近更新 更多