相关文章推荐
玩手机的吐司  ·  unzip tar.gz colab-掘金·  1 年前    · 
爱旅游的感冒药  ·  【python ...·  1 年前    · 
冷静的米饭  ·  svg text align center-掘金·  1 年前    · 

通过安装graphviz和相应的插件,便能实现决策树的可视化输出,具体安装过程不细说。

# 设置graphviz路径

os.environ["PATH"] += os.pathsep + 'C:/Program Files (x86)/Graphviz2.38/bin/'

# 决策树的可视化

dot_data = tree.export_graphviz(clf, out_file=None, feature_names=data.columns, class_names=['0', '1'], filled=True)

graph = pydotplus.graph_from_dot_data(dot_data)

Image(graph.create_png())

# 将决策树模型输出为图片

graph.write_png(r'pang.png')

# 将决策树模型输出为PDF

graph.write_pdf('tree.pdf')

可视化结果如下。

可以看见决策树根节点以fico_score <= 683.5为分割标准。

全体样本的基尼系数为0.483,在3284个样本中,被预测变量为0的有2671个,为1的有1839个。

使用scikit-learn提供的参数搜索进行调优(GridSearchCV)。

# 设置树的最大深度

max_depth = [None, ]

# 设置树的最大叶节点数

max_leaf_nodes = np.arange(5, 10, 1)

# 设置树的类标签权重

class_weight = [{0: 1, 1: 2}, {0: 1, 1: 3}]

# 设置参数网格param_grid = {'max_depth': max_depth,

'max_leaf_nodes': max_leaf_nodes,

'class_weight': class_weight}

# 对参数组合进行建模和效果验证

clf_cv = GridSearchCV(estimator=clf,
param_grid=param_grid,
cv=5,
scoring='roc_auc')

# 输出网格搜索的决策树模型信息

print(clf_cv.fit(train_data, train_target))

输出网格搜索的决策树模型信息。

使用得到的“最优”模型对测试集进行评估。

# 输出优化后的决策树模型的决策类评估指标

print(metrics.classification_report(test_target, clf_cv.predict(test_data)))

# 输出优化后的决策树模型的参数组合

print(clf_cv.best_params_)

输出结果。

计算模型在不同阈值下的灵敏度和特异度指标,绘制ROC曲线。

# 使用模型进行预测

train_est = clf_cv.predict(train_data)

train_est_p = clf_cv.predict_proba(train_data)[:, 1]

test_est = clf_cv.predict(test_data)

test_est_p = clf_cv.predict_proba(test_data)[:, 1]

# 绘制ROC曲线

fpr_test, tpr_test, th_test = metrics.roc_curve(test_target, test_est_p)

fpr_train, tpr_train, th_train = metrics.roc_curve(train_target, train_est_p)

plt.figure(figsize=[3, 3])

plt.plot(fpr_test, tpr_test, 'b--')

plt.plot(fpr_train, tpr_train, 'r-')

plt.title('ROC curve')

plt.show()

# 计算AUC值

print(metrics.roc_auc_score(test_target, test_est_p))

ROC曲线图如下,其中训练集的ROC曲线(实线)与测试集的ROC曲线(虚线)很接近,说明模型没有过拟合。

模型的ROC曲线下面积为0.7358,模型效果一般。