python分类时特征选择_关于python:是否有可用于分类数据输入的特征选择算法?...
我正在訓練一個具有10個左右分類輸入的神經網絡。 在對這些分類輸入進行一次熱編碼之后,我最終將大約500個輸入饋入網絡。
我希望能夠確定我每個分類輸入的重要性。 Scikit-learn具有許多功能重要性算法,但是這些算法中的任何一種都可以應用于分類數據輸入嗎? 所有示例均使用數字輸入。
我可以將這些方法應用于"一鍵編碼"輸入,但是在應用于二進制輸入后如何提取含義? 如何判斷分類輸入中的特征重要性?
Ive已成功使用支持discrete_features=True的mutual_info_score。
看看scikit-learn.org/stable/modules/
謹慎使用單點編碼,因為您將特征空間的維數增加了50倍。您還可以考慮使用隨機森林而不是神經網絡,因為隨機森林方法具有內置的特征重要性表征。
感謝您的意見。 @IgorRaush,我可以像這樣使用common_info_classif函數:l_importance = mutual_info_classif(X, y, discrete_features=True)但是可以確認我在X數組中編碼離散特征的方式。顯然,它必須是一個numpy數組,因此大多數輸入都必須進行編碼。我可以使用離散索引嗎?如果我對輸入進行了二值化,那么將很難從功能輸出中提取含義,因為功能是如此分離。如果這些是我的輸入:X = [[A, X, alpha], [B, X, beta], [B, Y, gamma]]我將如何編碼?謝謝 -
@VivekKumar感謝您的回復。我知道如何編碼分類輸入。您是否暗示最佳實踐是在單熱編碼輸入上運行標準特征選擇算法?如果是這種情況,您將如何包裝輸出以確定每個功能的重要性,而不是確定每個熱編碼列的重要性?謝謝
@ A555h5似乎實際上并不需要是一個Numpy數組,您提供的列表也可以作為輸入正常工作(盡管您可以將Numpy數組與dtype=np.str一起使用,該數組包含字符串并且也可以使用)。
通常,對于這種情況,您將使用索引編碼,其中分類功能的每個級別都映射到整數0、1等。請查看Scikit-learn中的LabelEncoder或Pandas中的分類系列。
在回答您對Vivek的問題時,這取決于您要完成的工作。您可以使用重要性度量來修剪整個功能("功能選擇"),也可以一鍵編碼它們并僅修剪某些級別("值選擇")。我見過兩種使用方法。
感謝您的回答@IgorRaush-一個快速的問題。如果我在同一數據集中混合了分類特征和數字特征,那么該如何編碼?我想一起考慮它們,因為我需要了解它們之間的相互影響。我應該將數字視為分類數字(因為失去幅度,這似乎是錯誤的),還是對分類數字使用索引編碼方法并與數字結合?再次感謝
在某些情況下,在進入scikit-learn之前可能值得探索您的數據集。我通常使用Wekas GUI玩一些。在Weka中,您可以使用多種算法來可視化和評估特征。如果數據集太大,則將其稍微修剪一下。在此處獲取Weka:cs.waikato.ac.nz/ml/weka有關此處的屬性選擇的更多信息:wiki.pentaho.com/display/DATAMINING/Attribute+Selection
由于編碼特征之間的關系,在一種熱編碼上使用特征選擇算法可能會導致錯過。例如,如果您將n個值的特征編碼為n個特征,并且已選擇m個中的n-1個,則不需要最后一個特征。
由于您的功能數量很少(?10),因此功能選擇對您的幫助不大,因為您可能只能減少其中的幾個而不會丟失太多信息。
您寫道,一種熱編碼將10個要素轉換為500個,這意味著每個要素都有大約50個值。在這種情況下,您可能會對離散化算法更感興趣,可以對值本身進行操作。如果值隱含順序,則可以對連續特征使用算法。另一種選擇是簡單地忽略稀有值或與概念沒有強相關性的值。
如果您使用特征選擇,則大多數算法將對分類數據起作用,但您應提防極端情況。例如,@ Igor Raush建議的相互信息是一種很好的措施。但是,具有許多值的特征往往比具有較少值的特征具有更高的熵。反過來,這可能會導致更高的相互信息,并會偏向許多價值特征。一種解決此問題的方法是通過將互信息除以特征熵來進行歸一化。
可能會幫助您的另一套功能選擇算法是包裝器。他們實際上將學習委托給分類算法,因此,只要分類算法可以應對,它們就不會影響表示。
總結
以上是生活随笔為你收集整理的python分类时特征选择_关于python:是否有可用于分类数据输入的特征选择算法?...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dvt高危患者的护理措施_dvt的预防及
- 下一篇: csv python 只写一次_在Pyt