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

我很好奇 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_dataX = preprocess(X, X.min(), X.max(), 3)

回答:

决策树会在最能区分两个类别的位置分割连续值。例如,决策树可能会在165厘米处分割男性和女性的身高,因为大多数人在这个界限内会被正确分类。算法会发现大多数女性身高低于165厘米,大多数男性身高高于165厘米。

决策树会为所有属性找到最佳分割点,并且通常会多次重复使用属性。请看这里,一个决策树根据Iris数据集的列中的连续值对其进行分类。

例如,你可以看到 X[3] < 0.8,其中某列中低于0.8的连续值被分类为类0。你可以看到这个分割点在每个类别中应用到的实例数量:[50, 0, 0]

enter image description here你之所以在使用任意分割点时准确率较低,可能是因为这样做会丢失信息。关于身高的例子,想象一下,如果你的身高数据不是连续的,而是你有高于和低于150厘米的人。你会丢失很多信息。决策树也会像这样分割连续数据,但至少它会1)找到最佳分割点,2)能够对同一个属性进行多次分割。因此,它的表现会比你的任意分割更好。

Related Posts

如何对SVC进行超参数调优?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

如何在初始训练后向模型添加训练数据?

我想在我的scikit-learn模型已经训练完成后再…

使用Google Cloud Function并行运行带有不同用户参数的相同训练作业

我正在寻找一种方法来并行运行带有不同用户参数的相同训练…

加载Keras模型,TypeError: ‘module’ object is not callable

我已经在StackOverflow上搜索并阅读了文档,…

在计算KNN填补方法中特定列中NaN值的”距离平均值”时

当我从头开始实现KNN填补方法来处理缺失数据时,我遇到…

使用巨大的S3 CSV文件或直接从预处理的关系型或NoSQL数据库获取数据的机器学习训练/测试工作

已关闭。此问题需要更多细节或更清晰的说明。目前不接受回…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注