Путаница матрицы для обучения и проверки наборов - PullRequest
0 голосов
/ 15 ноября 2018

Какова цель аргумента "newdata" ? Почему нам не нужно указывать newdata = tlFLAG.t в первом случае?

pred <- predict(tree1, type = "class")
confusionMatrix(pred, factor(tlFLAG.t$TERM_FLAG)) 

pred.v <- predict(tree1, type = "class", newdata = tlFLAG.v)
confusionMatrix(pred.v, factor(tlFLAG.v$TERM_FLAG)) 

1 Ответ

0 голосов
/ 15 ноября 2018

В каждом процессе машинного обучения (в данном случае проблема classification) вы должны разделить свои данные на наборы train и test.

Это полезно, потому что вы можете обучаем ваш алгоритм в первом наборе и проверяем его во втором.

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

У вас получится даже идеальная модель для ваших данных, но это будет предсказывать очень плохо на новых данных, которые они еще не видели.

Благодаря этой функции predict вы можете выбрать новые данные, чтобы "проверить" качество вашей модели по невидимым данным с помощью аргумента newdata=.

В первом случаеТаким образом, вы «тестируете» свою производительность на уже обученных данных, не указав newdata= arg, поэтому confusionMatrix может быть чрезмерно оптимистичным .

Во втором случае выследует указать newdata=test_set, и при этом ваш прогноз будет основан на тестовых данных, поэтому производительность будет более точной и даже более интересной во втором случае.

Я приведу здесь пример для васчтобы увидеть классический подход:

data <- iris # iris dataset

# first split the data
set.seed(123) # for reproducibility
pos <- sample(100)

train <- data[pos, ] # random pick of 100 obs
test <- data[-pos, ] # remaining 50

# now you can start with your model - please not that this is a dummy example
library(rpart)

tree <- rpart(Species ~ ., data=train) # fit tree on train data

# make prediction on train data (no need to specify newclass= ) # NOT very useful
pred <- predict(tree, type = "class")
caret::confusionMatrix(pred, train$Species)

# make prediction on test data (remove the response)
pred <- predict(tree, type = "class", newdata = test[, -5]) # I removed Species (5th column in test)
# build confusion from predictions against the truth (ie the test$Species)
caret::confusionMatrix(pred, test$Species) 

Обратите внимание, что производительность на данных test ужасна, в то время как на данных train она была почти идеальной.

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