首页 > 解决方案 > sklearn,DecisionTreeRegressor:我可以优先考虑一列数据而不是其他列吗?

问题描述

图像树

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

例子:

ID  Area  Year

1     50   1950

2      150   1981

3      210   1987

4      205   1973

5      176   1992

……

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

此外,我还希望“年份”列与“区域”列相比具有优先级。所以数据的总数首先按照年份拆分,然后按照“年份”拆分。(现在决策树决定先制作“区域”(X 1),甚至不使用“年份”……参见附图:图像树

我怎样才能做到这一点?

我试图将第一列转换为字符串,但树仍在使用列“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")

标签: pythonscikit-learndecision-tree

解决方案


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

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

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


推荐阅读