R-如何调整随机森林代码以进行质量预测



我是机器学习的新手。我必须预测葡萄酒的质量,这是数据集上的最后一列。我考虑使用神经网络或随机森林,因为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 $味道(

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)

rancomforest.default中的错误(x,y,mtry = mtrystart,ntree = ntreetry,
: 响应时间必须与预测变量

相同

您需要传递到 tuneRF作为 x的特征变量,而响应变量为 y

因此,首先找到响应变量的列位置(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 <- ifelse(wineq$quality < 6, 'bad', 'good')根据quality列找到"新"响应(taste(。请注意,这很好,但是您需要在训练之前删除quality列。

如果您不这样做,那么您的模型将过于乐观,因为它会以下内容:

quality < 6始终表示taste=="bad"

最新更新