В чем разница между функцией предиката () и прогнозируемой моделью $ в случае модели случайного леса в R? - PullRequest
0 голосов
/ 12 февраля 2019

Использование пакета случайного леса: -

#install.packages("randomForest")
library(randomForest)

Я использовал сетевой код для запуска случайного леса в моей системе.Я получил модель с матрицей путаницы, точностью и т. Д. Теперь мои данные представлены в виде наборов для обучения и проверки.Я получил данные отсюда: - https://archive.ics.uci.edu/ml/machine-learning-databases/car/ Я разделил их в соотношении 70% -30% (обучение - проверка, соответственно).Затем я запустил модель на нем.Результаты модели дали мне ответ, что около 30 наблюдений были ошибочно классифицированы для одного конкретного значения переменной, по которой запускался случайный лес.Ниже приведены примеры данных: -

     BuyingPrice Maintenance NumDoors NumPersons Bootspace Safety Condition
        vhigh         low        4          4       med    low     unacc
        vhigh         med        2          4       med   high       acc
        vhigh         med        2       more     small   high     unacc
        vhigh        high        3          4       big   high     unacc
        vhigh         med        4       more     small    med     unacc
         low         low        2       more       med    med       acc 

RandomForest был запущен при прогнозировании последней переменной «Condition».Ниже приведена сводка модели

Call:
 randomForest(formula = Condition ~ ., data = TrainSet, ntree = 500,      
mtry = 6, importance = TRUE) 
               Type of random forest: classification
                     Number of trees: 500
No. of variables tried at each split: 6

        OOB estimate of  error rate: 2.48%
Confusion matrix:
      acc good unacc vgood class.error
acc   244    4     6     2  0.04687500
good    3   44     1     0  0.08333333
unacc  11    1   843     0  0.01403509
vgood   2    0     0    47  0.04081633

Если мы возьмем первый ряд таблицы (тот, что чуть выше нас), мы увидим, что значение «acc» имело 244 правильных прогноза (95%) и 12неправильные прогнозы.Аналогично, у «хорошего» было 44 правильных прогноза (91%) и 4 неправильных прогноза.И так далее для двух других.Общее количество ошибочных прогнозов равно 30 (12 + 4 + 12 + 2). Технически прогнозируемые значения этой модели должны отличаться от фактических на 30 неправильно классифицированных значений.Теперь я попытался получить прогнозируемые значения двумя методами: -

    1. First method :- model2$predicted.
    2. Second method :- predTrain <- predict(model2, TrainSet, type = "class")

Первый метод дает мне набор прогнозируемых значений, который отличается от фактического в 30 местах, тогда как второй метод дает мне набор данных, который точно равенк фактическим значениям.Я думаю, что первый метод правильный, но парень по ссылке использовал второй.

 https://www.r-bloggers.com/how-to-implement-random-forests-in-r/

Не уверен, где мои концепции ошибочны Пожалуйста, помогите.PS: - Я знаю, что был задан похожий вопрос, но я чувствую, что и вопрос, и ответы ниже не были достаточно сложными или легко объяснимыми для меня.Вот почему я задал новый вопрос.

ОБРАЗЕЦ КОДА

set.seed(100)
train <- sample(nrow(data1),0.7*nrow(data1),replace=FALSE)
TrainSet <- data1[train,]
ValidSet <- data1[-train,]
model2 <- randomForest(Condition ~ ., data = TrainSet, ntree = 500, mtry=6, 
importance = TRUE)
predTrain <- predict(model2, TrainSet, type = "class")
new1 <- data.frame(actual = TrainSet$Condition, predicted = predTrain)
new2 <- data.frame(actual = TrainSet$Condition, predicted = 
model2$predicted)
new1$third <- 0
for(i in 1:nrow(new1))
{
if(new1[i,1] == new1[i,2])
{
new1[i,3] = 1
}else{
new1[i,3] = 0
}
}
new2$third <- 0
for(i in 1:nrow(new2))
{
  if(new2[i,1] == new2[i,2])
  {
    new2[i,3] = 1
  }else{
    new2[i,3] = 0
  }
}

Спасибо, Абхай

1 Ответ

0 голосов
/ 12 февраля 2019

В соответствии с документацией функции randomForest: прогнозируемые: прогнозируемые значения входных данных на основе выборок выборок.

Таким образом, получается прогнозируемое значение наблюденияс моделью, которая не использует это наблюдение.

Функция прогнозирования применяет изученную модель к новым данным и не знает, что они использовались для обучения.Поэтому любое наблюдение используется как для обучения, так и для прогнозирования.

Вы должны использовать прогнозируемый результат, так как каждое прогнозируемое значение вычисляется без соответствующего наблюдения, используемого для обучения.

...