处理 sklearn.tree.DecisionTreeClassifier 中的连续变量

fox*_*lee 2 python machine-learning decision-tree python-3.x scikit-learn

我很好奇如何sklearn处理连续变量sklearn.tree.DecisionTreeClassifier?我尝试使用一些连续变量而不使用 进行预处理DecisionTreeClassifier,但它获得了可接受的精度。

下面是一种将连续变量转换为分类变量的方法,但它不能获得相同的精度。

def preprocess(data, min_d, max_d, bin_size=3):

    norm_data = np.clip((data - min_d) / (max_d - min_d), 0, 1)
    categorical_data = np.floor(bin_size*norm_data).astype(int)
    return categorical_data


X = preprocess(X, X.min(), X.max(), 3)
Run Code Online (Sandbox Code Playgroud)

Nic*_*ais 5

决策树在最能区分两个类的地方分割连续值。例如,决策树会将男性和女性的身高划分为 165 厘米,因为大多数人都会按照此边界正确分类。算法会发现大多数女性身高在165厘米以下,而大多数男性身高在165厘米以上。

决策树将为所有属性找到最佳分裂点,通常会多次重用属性。请参阅此处,决策树根据列中的连续值对 Iris 数据集进行分类。

例如,您可以看到X[3] < 0.8,其中某些列中低于 0.8 的连续值被分类为类 0。您可以看到此分割适用于每个类中的多少个实例:[50, 0, 0]

在此输入图像描述 您的任意分割点的准确性可能较低,因为这样做会丢失信息。关于身高示例,想象一下,如果您的身高数据不连续,但有人身高高于或低于 150 厘米。你正在丢失很多信息。决策树也会像这样分割连续数据,但至少它会 1)找到最佳分割点,2)它将能够多次分割相同的属性。所以它会比你任意的分割表现得更好。

  • 就在这里。这就是优化算法发挥作用的时候,例如 [CART 算法](https://machinelearningmastery.com/classification-and-regression-trees-for-machine-learning/)。 (3认同)