python - 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")
解决方案
分类器上的方法喜欢predict
并predict_proba
保持行的顺序 - 即即使您ID
从数据集中删除列X_train
(同时将其保留在某些基础数据集中) - 您可以稍后简单地连接预测值。
写下关于如何首先拆分的问题Year
- 我认为sklearn
或任何其他 python ML 库都不能做到这一点。您可能想查看SAS Enterprise Miner或Angoss Knowledge Studio之类的替代方案- 但它们都不是 FOSS。
一个肮脏的黑客可能是只用Year
列构建一棵树 - 注意拆分,然后根据获得的拆分将数据分成 2 个(或更多)部分。
推荐阅读
- hyperledger-fabric - Hyperledger Fabric gRPC 交互
- typescript - 如何在 TypeScript 中编写通用函数编写器并应用通用元组提取函数(第一、第二)
- python - lxml import etree throws can't find reference etree in __init__.py
- javascript - Yarn Packager 包括文件夹和文件
- azure-application-insights - 使用 Microsoft.Diagnostics.EventFlow 区分向 AI 发出事件的应用程序
- javascript - 如何修复 IE 和 Edge 的本地存储翻译工具
- css - 填充没有被平等地应用
- python - 更改数据框数据类型以明确使用该数据进行数据可视化
- tensorflow - 找到位移张量的减法
- javascript - 为什么此代码引用不同的结果