Полагаю, вы неверно истолковали функцию valu_Weka_classifier. В обоих случаяхvalu_Weka_classifier выполняет только перекрестную проверку на основе данных обучения. Это не меняет саму модель. Сравните матрицы путаницы следующего кода:
m<-J48(Species~., data=iris)
e<-evaluate_Weka_classifier(m,numFolds = 5)
summary(m)
e
m2 <- AdaBoostM1(Species ~. , data = iris ,
control = Weka_control(W = list(J48, M = 30)))
e2 <- evaluate_Weka_classifier(m2,numFolds = 5)
summary(m2)
e2
В обоих случаях сводка дает вам оценку, основанную на данных тренировки, а функция evaluate_Weka_classifier()
дает вам правильное перекрестное подтверждение. Ни для J48, ни для AdaBoostM1 сама модель не обновляется на основе перекрестной проверки.
Теперь, что касается самого алгоритма AdaBoost: на самом деле он использует своего рода «взвешенную перекрестную проверку», чтобы прийти к окончательному классификатору. Неправильно классифицированные элементы получают больший вес на следующем этапе строительства, но оценка выполняется с использованием равного веса для всех наблюдений. Поэтому использование перекрестной проверки для оптимизации результата не совсем вписывается в общую идею алгоритма адаптивного повышения.
Если вы хотите провести настоящую перекрестную проверку с использованием обучающего набора и оценочного набора, вы можете сделать следующее:
id <- sample(1:length(iris$Species),length(iris$Species)*0.5)
m3 <- AdaBoostM1(Species ~. , data = iris[id,] ,
control = Weka_control(W = list(J48, M=5)))
e3 <- evaluate_Weka_classifier(m3,numFolds = 5)
# true crossvalidation
e4 <- evaluate_Weka_classifier(m3,newdata=iris[-id,])
summary(m3)
e3
e4
Если вам нужна модель, которая обновляется на основе перекрестной проверки, вам придется перейти на другой алгоритм, например, randomForest()
из пакета randomForest. Это собирает набор оптимальных деревьев на основе перекрестной проверки. Может также использоваться в сочетании с пакетом RWeka.
edit: исправлен код для истинного перекрестного подтверждения. Использование аргумента subset
влияет и на evaluate_Weka_classifier()
.