在 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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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