我正在查看木槌源代碼,並且似乎大多數分類器實現(例如樸素貝葉斯)並沒有真正考慮到特徵選擇,即使InstanceList
類有一個setFeatureSelection
方法。木槌特徵選擇類似於將特徵值設置爲0
現在我想用我的數據集進行一些快速實驗,包括特徵選擇。我想,從技術捷徑的角度來看,我可能會得到最低排名的功能,並將這些值設置爲0。機器學習中的特徵選擇是否相當於分類器訓練中的特徵選擇,從而根本不考慮它們(如果不涉及平滑,例如拉普拉斯估計)?
謝謝
我正在查看木槌源代碼,並且似乎大多數分類器實現(例如樸素貝葉斯)並沒有真正考慮到特徵選擇,即使InstanceList
類有一個setFeatureSelection
方法。木槌特徵選擇類似於將特徵值設置爲0
現在我想用我的數據集進行一些快速實驗,包括特徵選擇。我想,從技術捷徑的角度來看,我可能會得到最低排名的功能,並將這些值設置爲0。機器學習中的特徵選擇是否相當於分類器訓練中的特徵選擇,從而根本不考慮它們(如果不涉及平滑,例如拉普拉斯估計)?
謝謝
是,特徵值設置爲零,將有同樣的效果,從特徵向量中移除,因爲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
對象而不是破壞性地更改實例數據。
我很想使用featureSelection。事情是,我已經查看了大多數分類器實現代碼,並且它們似乎大部分都沒有考慮到特徵選擇。例如,運行具有特徵選擇集的NaiveBayes分類器將產生與沒有特徵選擇相同的結果。那麼,感謝您的幫助,但無論如何,我最終擴展了與FeatureSelection一起工作的NaiveBayesTrainer類。 – goh
你有沒有使用信息增益功能選擇? 我需要一些幫助等待您的回覆.... – Ashish