【问题标题】:sklearn, DecisionTreeRegressor: Can I give priority to one column of the data over the other columns?sklearn,DecisionTreeRegressor:我可以优先考虑一列数据而不是其他列吗?
【发布时间】: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!

标签: python scikit-learn decision-tree


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-08
    • 2023-03-03
    • 1970-01-01
    • 2017-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多