Как настроить случайный код леса для прогнозирования качества - PullRequest
1 голос
/ 10 мая 2019

Я новичок в машинном обучении. У меня есть этот набор данных - 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 $ вкус)

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 = ntreeTry
: длина ответа должна совпадать с предикторами

1 Ответ

0 голосов
/ 27 мая 2019

Вам нужно передать 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'), чтобы найти свой «новый» ответ (taste), основанный на столбце quality.Обратите внимание, что это прекрасно, но перед тренировкой вам нужно удалить столбец quality.

Если вы этого не сделаете, ваша модель будет чрезмерно оптимистичной, так как, например, она подберет ее:

quality < 6 всегда будет означать taste=="bad"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...