有没有办法手动修改从给定数据集中学习的决策树中设置的阈值?

Posted

技术标签:

【中文标题】有没有办法手动修改从给定数据集中学习的决策树中设置的阈值?【英文标题】:Is there any way to manually modify the thresholds set in the decision tree learnt from a given dataset? 【发布时间】:2020-04-13 05:34:57 【问题描述】:

我试图使用 scikit-learn 的模块创建决策树模型:tree。生成模型后,我将树和决策标准可视化。但是,我希望手动修改某些标准中的阈值,以查看相同的输出如何变化。有什么方法可以做到吗?或者任何库一旦从数据集中学习了所需的阈值,就会将决策树转换为一堆 if-else 语句,反之亦然?

我知道模块选择的阈值是基于一些杂质指标,例如基尼杂质、信息增益等。但是,我仍然想尝试这些阈值。

谢谢!

【问题讨论】:

我不知道这是否可能,但是由于您拥有树,您可以手动实现它(如果它不是巨大的)并在那里修改值。但是,随着树最大化指标(gini 或 infg),您不会使用这些指标找到任何“更好”的结果。如果您想检查另一个指标,您可以在创建树本身时使用该指标来获得最大值 您可以尝试使用 GridSearchCV 并提供您想要试验的任何参数。看看这个链接:ritchieng.com/machine-learning-decision-trees 【参考方案1】:

是的,您可以轻松做到这一点。

sklearn 决策树通过 tree_ 属性公开其底层树。这个tree_ 有一个属性threshold,它是一个包含所有节点阈值的numpy 数组。您可以修改此数组,从而更改阈值。

例如:

X,y = load_breast_cancer(return_X_y=True)
dt = DecisionTreeClassifier(max_depth=3).fit(X,y)
print(dt.tree_.threshold)     #All the thresholds, size equals "dt.tree_.node_count"
dt.tree_.threshold[3] = 10.0  #Manually modifying a threshold    

为了验证,如果您在此修改之前和之后比较单独测试集的准确性(假设您修改了一个非叶节点),您应该会注意到一个变化(这可能会更糟)。

【讨论】:

以上是关于有没有办法手动修改从给定数据集中学习的决策树中设置的阈值?的主要内容,如果未能解决你的问题,请参考以下文章

机器学习实战-决策树

决策树如何识别给定文本数据集中的特征?

机器学习笔记五 决策树

决策树的部分理解

机器学习决策树

Matlab:递归获取决策树