2016-12-07 7 views
1

Я пытаюсь выполнить перекрестное подтверждение с пакетом python «Оранжевый». Эта библиотека выглядит очень красиво, но у меня есть некоторые проблемы с ней.Перекрестная проверка с оранжевой библиотекой python

Для получения информации о версии, я использую Python 2.7 и Orange 2.7.8. Моя задача проста. Я хочу проверить модель с перекрестной проверкой с (1) дискретизацией для числовых атрибутов и (2) выбор функции.

Здесь важно обрабатывать дискретизацию и выбор функций в цикле взаимной проверки, как вы знаете. Другими словами, для каждого цикла перекрестной проверки (1) дискретизируйте только данные обучения и используйте один и тот же битнинг для тестовых данных и (2) получите важные функции из данных обучения и используйте функции для тестовых данных.

Изучив оранжевый, я закодировал следующий сценарий.

import Orange, orange, orngDisc, orngTest, orngStat, orngFSS 

data = Orange.data.Table("test.tab") # has numeric, discrete features 

nb = Orange.classification.bayes.NaiveLearner() 
dBayes = orngDisc.DiscretizedLearner(nb, method=Orange.feature.discretization.Entropy(), name="disc nb") 

# feature selection (three important features based on information gain) 
fss = orngFSS.FilterBestN(n=3, measure=Orange.feature.scoring.InfoGain()) 
fBayes = orngFSS.FilteredLearner(dBayes, filter=fss, name="nb & fss") 

learners = [nb, dBayes, fBayes] 
results = orngTest.crossValidation(learners, data, folds=10, storeClassifiers=1, storeExamples=1) 

# print accuracy for the three models (no errors in this block!) 
print "\nLearner   Accuracy #Atts" 
for i in range(len(learners)): 
    print "%-15s %5.3f  %5.2f" % (learners[i].name, orngStat.CA(results)[i], natt[i]) 

Короче говоря, Dataset («данные» в коде) содержит числовые и дискретные функции, и я хочу сделать дискретизацию (на основе энтропии), а затем функцию выбора (верхние 3 функции на основании коэффициента усиления информации) в пределах процесс перекрестной проверки.

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

Можете ли вы дать мне несколько моментов для модификации? Спасибо.

ответ

0

Я боюсь, что вы не можете использовать orngFSS.FilterBestN(n=3, measure=Orange.feature.scoring.InfoGain()), потому что некоторые из функций непрерывны. Метод «feature.scoring.InfoGain» будет проверять, распознаются ли функции, ссылаясь на here.

У меня есть два предложения:

  1. Использование дерева классификации как метод обучения и выбрать лучшие три функции в дереве. Если функция непрерывна, дерево классификации будет использовать дискриминант типа «A> 0,1», чтобы сделать эту функцию дискретной.
  2. Вручную сделать функции дискретными. Например, если возраст является особенностью, тогда обозначьте его «D», и Orange будет рассматривать эту функцию как дискретную. Я думаю, что это сработает