python - 如何在 Scikit-Learn 中修改决策树算法中的分裂标准(基尼/熵)?
问题描述
我在二元分类问题上使用决策树算法,目标是最大限度地减少分类的误报(最大化positive predicted value
)(诊断工具的成本非常高)。
有没有办法引weight
入基尼系数/熵分裂标准来惩罚误报错误分类?
例如,修改后的基尼指数为:
因此我想知道是否有任何方法可以在 Scikit-learn 中实现它?
编辑
玩弄class_weight
产生了以下结果:
from sklearn import datasets as dts
iris_data = dts.load_iris()
X, y = iris_data.features, iris_data.targets
# take only classes 1 and 2 due to less separability
X = X[y>0]
y = y[y>0]
y = y - 1 # make binary labels
# define the decision tree classifier with only two levels at most and no class balance
dt = tree.DecisionTreeClassifier(max_depth=2, class_weight=None)
# fit the model, no train/test for simplicity
dt.fit(X[:55,:2], y[:55])
绘制决策边界和树蓝色为正(1):
在超过少数阶级(或更珍贵)的同时:
dt_100 = tree.DecisionTreeClassifier(max_depth=2, class_weight={1:100})
解决方案
决策树分类器支持该class_weight
论点。
在两类问题中,这可以完全解决您的问题。通常这用于不平衡的问题。对于两个以上的课程,不可能提供单独的标签(据我所知)
推荐阅读
- web - 如何从一台机器创建多连接来测试我的 Web 服务器?
- dart - 如何通过 HttpClientResponse 获取 List 对象?
- c++ - C++ 多项分布
- javascript - 分组选项 javascript
- asp.net-core - 如何在 Dockerfile 中正确使用 dotnet restore
- sql - Group By - 按每月满足的条件进行选择
- python - 无法使用因命名空间而损坏的 xpath 提取某些文本
- c# - 我可以将 MediaPlaybackItem 存储在 SQLite 中吗?
- javascript - 让 flexbox 容器覆盖内容高度?
- r - Shiny app radioButtons invisible in RStudio viewer pane