来自多种数据类型的特征的决策树

时间:2016-01-09 00:11:19

标签: python scikit-learn decision-tree

我正在尝试用scikit-learn的DecisionTreeClassifier构建一个决策树。我的数据具有由整数和浮点值组成的数字特征。

构造决策树时,将转换整数要素 漂浮。

例如:如果A是只能具有1-12的整数值的特征,则在树中出现诸如“A <5.5”或“A <3.1”的分裂标准。我不想要A的浮点值拆分标准。

如果整数特征转换为float,则树的深度会增加。如何限制转换为float的整数特征?

此外,scikit-learn的DecisionTreeClassifier不允许分类功能。是否有任何替代包/库用于构建允许分类特征的决策树?

1 个答案:

答案 0 :(得分:4)

关于决策树的整数与浮点,构建树无关紧要。两个连续整数之间的任何分割都是等效的。它永远不会在同一对连续整数之间进行两次分割,因为这样做,其中一个叶子将没有样本。无论是否使用整数或浮点数,它都会生成等效模型。

使用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)