sklearn,DecisionTreeRegressor:我可以优先考虑一列数据而不是其他列吗?

Posted

技术标签:

【中文标题】sklearn,DecisionTreeRegressor:我可以优先考虑一列数据而不是其他列吗?【英文标题】:sklearn, DecisionTreeRegressor: Can I give priority to one column of the data over the other columns? 【发布时间】:2019-12-14 03:16:16 【问题描述】:

Image tree

我正在根据具有 3 列的数据集制作决策树:

示例:

ID  Area  Year

1     50   1950

2      150   1981

3      210   1987

4      205   1973

5      176   1992

....

当我使用DecisionTreeRegressor制作决策树时,这棵树基于所有3列,我想要的是ID不包含在树本身但仍然可以追溯(所以我不想删除此列)

此外,我还希望“年份”列与“区域”列相比具有优先级。因此,数据总数首先根据年份拆分,然后按“年份”拆分。 (现在决策树决定在之前制作“区域”(X1),甚至不使用“年份”...参见附图:Image tree)

我该怎么做?

我尝试将第一列转换为字符串,但树仍在使用列“ID”。


到目前为止我的代码:

clf = tree.DecisionTreeRegressor(min_samples_split=20,max_leaf_nodes=20).fit(X_train, y_train)
tree.plot_tree(clf)

import os

os.environ["PATH"] += os.pathsep + r'C:\anaconda3\Library\bin\graphviz'

dot_data = tree.export_graphviz(clf, out_file=None) 

graph = graphviz.Source(dot_data) 

from graphviz import render

graph.render('png', "test")

【问题讨论】:

你能展示一些你迄今为止尝试过的代码吗? 向我们展示您的尝试。 SO 不是免费的代码服务网站。 predictpredict_proba 等分类器上的方法保持行的顺序 - 即,即使您从 X_train 数据集中删除 ID 列(同时在某些基础数据集中维护它) -您可以稍后简单地连接预测值 决策树的全部意义在于让它们根据自己的标准决定最优分割;手动给他们“优先级”是没有意义的。 谢谢@Mortz! 【参考方案1】:

predictpredict_proba 等分类器上的方法保持行的顺序 - 即即使您从 X_train 数据集中删除 ID 列(同时在某些基础数据集中维护它) - 您可以简单地稍后连接预测值。

W.r.t 你的问题是关于如何首先按Year 分割 - 我不认为sklearn 或任何其他 python ML 库可以做到这一点。您可能想看看 SAS Enterprise MinerAngoss Knowledge Studio 之类的替代方案 - 但它们都不是 FOSS。

一个肮脏的黑客可能是用Year 列构建一棵树 - 请注意拆分,然后根据获得的拆分将您的数据分成 2 个(或更多)部分。

【讨论】:

以上是关于sklearn,DecisionTreeRegressor:我可以优先考虑一列数据而不是其他列吗?的主要内容,如果未能解决你的问题,请参考以下文章

无法从 sklearn.externals.joblib 导入 Sklearn

sklearn的PCA

sklearn数据库-老鱼学sklearn

使用sklearn画二分类模型ROC曲线,PR曲线

Keras Sklearn Tuner 模块“sklearn”没有属性“管道”

导入sklearn时出现conda sklearn错误