有没有办法手动修改从给定数据集学习的决策树中设置的阈值?
Is there any way to manually modify the thresholds set in the decision tree learnt from a given dataset?
我正在尝试使用 scikit-learn 的模块创建决策树模型:tree
。生成模型后,我将树和决策所依据的标准可视化。但是,我希望手动修改某些条件中的阈值,以查看输出如何变化。有什么方法可以这样做吗?或者任何库一旦从数据集中学习了所需的阈值,就会将决策树转换为一堆 if-else 语句,反之亦然?
我知道模块选择的阈值是基于一些不纯度指标,如基尼不纯度、信息增益等。但是,我仍然想试验这些阈值。
谢谢!
是的,您可以轻松做到这一点。
A 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
为了验证,如果您比较此修改前后的单独测试集的准确性(假设您修改了非叶节点),您应该注意到一个变化(可能更糟)。
我正在尝试使用 scikit-learn 的模块创建决策树模型:tree
。生成模型后,我将树和决策所依据的标准可视化。但是,我希望手动修改某些条件中的阈值,以查看输出如何变化。有什么方法可以这样做吗?或者任何库一旦从数据集中学习了所需的阈值,就会将决策树转换为一堆 if-else 语句,反之亦然?
我知道模块选择的阈值是基于一些不纯度指标,如基尼不纯度、信息增益等。但是,我仍然想试验这些阈值。
谢谢!
是的,您可以轻松做到这一点。
A 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
为了验证,如果您比较此修改前后的单独测试集的准确性(假设您修改了非叶节点),您应该注意到一个变化(可能更糟)。