Использование r и weka. Как я могу использовать мета-алгоритмы вместе с методом оценки nfold?

Вот пример моей проблемы

library(RWeka)
iris <- read.arff("iris.arff")

Выполните nfolds, чтобы получить надлежащую точность классификатора.

m<-J48(class~., data=iris)
e<-evaluate_Weka_classifier(m,numFolds = 5)
summary(e)

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

Теперь я выполняю AdaBoost для оптимизации параметров классификатора

m2 <- AdaBoostM1(class ~. , data = temp ,control = Weka_control(W = list(J48, M = 30)))
summary(m2)

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

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


person mariana soffer    schedule 06.10.2010    source источник
comment
Я отформатировал ваш вопрос. Вы можете попробовать stats.stackexchange.com для вашего вопроса.   -  person Joris Meys    schedule 06.10.2010
comment
по какой причине e2 ‹- Assessment_Weka_classifier (m2, numFolds = 5) не делает то, что вы хотите?   -  person Joris Meys    schedule 06.10.2010
comment
Большое спасибо Йорис за форматирование вопроса.   -  person mariana soffer    schedule 06.10.2010
comment
Проблема с e2 ‹- Assessment_Weka_classifier(m2,numFolds = 5) заключается в том, что он не выполняет оптимизацию для построения лучшей модели алгоритма. Я хочу иметь возможность делать это помимо Nfold. (надеюсь, вы понимаете, что я имею в виду)   -  person mariana soffer    schedule 06.10.2010


Ответы (1)


Я предполагаю, что вы неправильно интерпретируете функцию Assessment_Weka_classifier. В обоих случаях Assessment_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.

редактировать: исправлен код для истинной перекрестной проверки. Использование аргумента subset влияет и на evaluate_Weka_classifier().

person Joris Meys    schedule 06.10.2010
comment
Большое спасибо за всю вашу информацию, ваш ответ превосходен, я действительно ценю это. - person mariana soffer; 25.10.2010