2016-12-07 97 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]) 

總之,數據集(「數據」中的代碼)包含數值和離散特徵,以及我想要做的離散化(基於熵),然後特徵選擇內(頂部3基於該信息增益特性)交叉驗證過程。

但是,錯誤表示在計算數字特徵的信息增益時發生錯誤。我認爲特徵選擇是在離散化之前處理的。 我認爲一些小的修改是必要的,但在網絡上沒有很多關於Orange的例子...並且我對修改沒有明顯的想法。

你能給我點修改嗎? 謝謝。

回答

0

恐怕您不能使用orngFSS.FilterBestN(n=3, measure=Orange.feature.scoring.InfoGain()),因爲某些功能是連續的。方法「feature.scoring.InfoGain」將檢查這些特徵是否具有獨立性,參考here

我有兩個建議:

  1. 利用分類樹的學習方法,並選擇在樹的頂部三個特點。如果特徵是連續的,那麼經典樹將使用諸如「A> 0.1」的判別式使特徵離散化。
  2. 手動使功能離散。例如,如果年齡是特徵,則將其標記爲'D',並且橙色將認爲該特徵是離散的。我認爲它會工作