2014-07-12 102 views
32

說我有一個明確的功能,顏色,其採用的值可以sklearn隨機森林直接處理分類特徵?

[「紅」,「藍」,「綠」,「橙」],

,我想用它來預測某事在隨機森林裏。如果我對它進行一次熱編碼(即將其更改爲四個虛擬變量),我如何告訴sklearn這四個虛擬變量實際上是一個變量?具體來說,當sklearn隨機選擇要在不同節點上使用的功能時,它應該包括紅色,藍色,綠色和橙色虛擬的一起,或者它不應該包含任何一個。

我聽說沒有辦法做到這一點,但我會想象必須有一種方法來處理分類變量,而不必將其編碼爲數字或類似的東西。

+0

自2014年起,這對於sklearn來說是一個有用的和非常長期的增強請求。一個考慮是他們是否應該優先實施新的[pandas Categorical](http://pandas.pydata.org/pandas-docs/stable /categorical.html)或通用numpy。 – smci

回答

23

不,沒有。有人的working on this和修補程序可能會合併到主線有一天,但現在不支持scikit學習中的分類變量,除了虛擬(單熱)編碼。

+0

如果這最終得到實施,十個大拇指。就我個人而言,我會優先考慮大熊貓的分類,而核心維護者則需要其他方法。 – smci

6

您必須將分類變量變爲一系列虛擬變量。是的,我知道它很煩人,似乎沒有必要,但這就是sklearn的作品。如果您正在使用熊貓,請使用 。使用pd.get_dummies,它工作得很好。

+3

如果在訓練和推理中存在相同的唯一值,它的工作非常好,因此它不可靠。 – marbel

5

接受分類輸入的隨機森林(以及許多其他機器學習算法)的大多數實現不是自動爲您編碼分類特徵,就是使用變爲computationally intractable for large numbers of categories的方法。

A notable exception is H2O。 H2O具有非常直接處理分類數據的efficient method,這通常使其在基於樹的方法上具有優勢,該方法需要單熱編碼。

This article by Will McGinnis has a very good discussion of one-hot-encoding and alternatives

This article by Nick Dingwall and Chris Potts has a very good discussion about categorical variables and tree based learners