2016-12-07 5 views
1

私はpythonパッケージ "Orange"でクロスバリデーションを試みます。 このライブラリはとても見栄えますが、私はそれにいくつか問題があります。オレンジ色の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]) 

、データセット(コード内の「データ」)は、数値と離散の機能が含まれている、と私は(エントロピーに基づいて)離散化を行いたい、その後、選択(トップ情報ゲインに基づいて3機能)を備えています内クロスバリデーションプロセス

しかし、エラーは、数値機能の情報ゲインを計算するときにエラーが発生したことを示しています。私は、特徴選択が離散化の前に処理されると考える。 私はいくつかのマイナーな変更が必要だと思っていますが、ウェブ上のオレンジにはたくさんの例はありません...そして、私はその変更について明白な考えを持っていません。

変更点を教えていただけますか? ありがとうございます。

答えて

0

一部の機能が連続しているため、orngFSS.FilterBestN(n=3, measure=Orange.feature.scoring.InfoGain())を使用することはできません。メソッド "feature.scoring.InfoGain"は、フィーチャが離散しているかどうかをチェックし、hereを参照します。

私は2つの提案を持っている:学習方法として

  1. 用途種類の木を、ツリーのトップ3つの機能を選択します。特徴が連続的である場合、クラシフィファライゼーションツリーは、特徴を離散化するために「A> 0.1」のような判別式を使用する。
  2. 機能を個別に手動で作成します。たとえば、年齢がフィーチャであれば、それを「D」とラベル付けし、オレンジはそのフィーチャを離散的と見なします。私はそれが動作すると思います
関連する問題