决策树#
API 参考链接:ClassificationTree, RegressionTree
请参阅决策树的后端仓库 这里。
概述
监督决策树。这是一种递归划分方法,根据划分标准将特征空间不断地进一步划分。在学习到的树的“叶节点”中为每个划分学习一个预测值。这是对 scikit-learn
中暴露的决策树的轻量级封装。单棵决策树通常模型性能较弱,但训练速度快,且非常适合识别关联。低深度决策树易于解释,但随着树深度的增加,它们会迅速变得复杂且难以理解。
工作原理
Christoph Molnar 的电子书“可解释机器学习”[1] 对决策树进行了精彩的概述,可在此处找到。
有关实现细节,scikit-learn 关于决策树的用户指南 [2] 内容扎实,可在此处找到。
代码示例
以下代码将使用乳腺癌数据集训练一个决策树分类器。提供的可视化将包括全局解释和局部解释。
from interpret import set_visualize_provider
from interpret.provider import InlineProvider
set_visualize_provider(InlineProvider())
import numpy as np
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_auc_score
from interpret.glassbox import ClassificationTree
from interpret import show
seed = 42
np.random.seed(seed)
X, y = load_breast_cancer(return_X_y=True, as_frame=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20, random_state=seed)
dt = ClassificationTree(random_state=seed)
dt.fit(X_train, y_train)
auc = roc_auc_score(y_test, dt.predict_proba(X_test)[:, 1])
print("AUC: {:.3f}".format(auc))
AUC: 0.957
show(dt.explain_global())
show(dt.explain_local(X_test[:5], y_test[:5]), 0)
更多资源
参考文献
[1] Christoph Molnar. 可解释机器学习. Lulu. com, 2020.
[2] Fabian Pedregosa, Gaël Varoquaux, Alexandre Gramfort, Vincent Michel, Bertrand Thirion, Olivier Grisel, Mathieu Blondel, Peter Prettenhofer, Ron Weiss, Vincent Dubourg 等. Scikit-learn: Python 中的机器学习. machine Learning research 期刊, 12:2825–2830, 2011.