2016-01-09 64 views
1

我試圖用scikit-learn的DecisionTreeClassifier構建決策樹。我的數據具有由整數和浮點值組成的數字特徵。來自多個數據類型的特徵的決策樹

構建決策樹時,整數特徵轉換爲 以浮動。

例如:如果A是隻能有1-12的整數值的特徵,則在樹中出現分割標準,例如「A < 5.5」或「A < 3.1」。我不想要A的浮點值拆分條件。

如果整數要素轉換爲浮點,樹的深度會增加。如何限制轉換爲浮點的整數要素?

此外,scikit-learn的DecisionTreeClassifier不允許分類特徵。是否有任何其他軟件包/庫用於構建允許分類特徵的決策樹?

+0

典型地,在構建決策樹之前,在分類特徵上使用一個熱編碼。你在用熊貓嗎?你想要一個例子嗎? –

+0

不,我不使用熊貓。我想要一個例子。謝謝 –

回答

3

關於決策樹的整數與浮點數,構建樹無關緊要。兩個連續整數之間的任何分隔都是等價的。它不會在同一對連續整數之間進行兩次分割,因爲通過這樣做,其中一個葉子將不會有樣本。無論使用整數還是浮點數,它都會生成等效模型。

使用scikit-learn,您可以使用LabelBinarizer使用分類功能。這將爲這些類別創建一個虛擬值矩陣(一個熱點編碼)。

下面是一個例子:

from sklearn.preprocessing import LabelBinarizer 
from sklearn.tree import DecisionTreeClassifier 
import numpy as np 

定義功能

month = ['Jan', 'Feb', 'Jan', 'Mar'] 
day = [1, 15, 30, 5] 

定義類別中的

y = [0, 1, 1, 1] 

構建假人:

lb = LabelBinarizer() 
X_month_dummies = lb.fit_transform(month) 

X_month_dummies則是:

array([[0, 1, 0], 
     [1, 0, 0], 
     [0, 1, 0], 
     [0, 0, 1]]) 

結合假人與數字功能(天)

X = np.hstack([np.column_stack([day]), X_month_dummies]) 

構建分類。

clf = DecisionTreeClassifier() 
clf.fit(X, y)