В каждом процессе машинного обучения (в данном случае проблема 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
она была почти идеальной.