2013-10-04 52 views
1

我正在查看木槌源代碼,並且似乎大多數分類器實現(例如樸素貝葉斯)並沒有真正考慮到特徵選擇,即使InstanceList類有一個setFeatureSelection方法。木槌特徵選擇類似於將特徵值設置爲0

現在我想用我的數據集進行一些快速實驗,包括特徵選擇。我想,從技術捷徑的角度來看,我可能會得到最低排名的功能,並將這些值設置爲0。機器學習中的特徵選擇是否相當於分類器訓練中的特徵選擇,從而根本不考慮它們(如果不涉及平滑,例如拉普拉斯估計)?

謝謝

+0

你有沒有使用信息增益功能選擇? 我需要一些幫助等待您的回覆.... – Ashish

回答

1

是,特徵值設置爲零,將有同樣的效果,從特徵向量中移除,因爲MALLET沒有的「缺少的功能,」只有零和非零特徵值的概念。不過,使用FeatureSelection類並不算太痛苦。 MALLET帶有幾個內置類,它們根據RankedFeatureVector sublcasses在罩下應用「面罩」。例如,使用信息增益特徵選擇,你就應該能夠做到這一點:

FeatureSelection fs = FeatureSelection(new InfoGain(ilist), numFeatures); 
ilist.setFeatureSelection(fs); 

您還可以實現更多的東西定製你自己的RankedFeatureVector子類(the API is here)。要手動選擇功能的其他方式,你仍然可以通過創建要素掩膜作爲包含所有功能ID的BitSet(從字母),這樣做是要使用,如:

java.util.BitSet featureMask = /* some code to pick your features */; 
FeatureSelection fs = FeatureSelection(ilist.getAlphabet(), featureMask); 
ilist.setFeatureSelection(fs); 

一般情況下,我建議使用FeatureSelection對象而不是破壞性地更改實例數據。

+0

我很想使用featureSelection。事情是,我已經查看了大多數分類器實現代碼,並且它們似乎大部分都沒有考慮到特徵選擇。例如,運行具有特徵選擇集的NaiveBayes分類器將產生與沒有特徵選擇相同的結果。那麼,感謝您的幫助,但無論如何,我最終擴展了與FeatureSelection一起工作的NaiveBayesTrainer類。 – goh