訂閱
糾錯(cuò)
加入自媒體

Python數(shù)據(jù)科學(xué):決策樹

通過(guò)安裝graphviz和相應(yīng)的插件,便能實(shí)現(xiàn)決策樹的可視化輸出,具體安裝過(guò)程不細(xì)說(shuō)。

# 設(shè)置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')

可視化結(jié)果如下。

可以看見決策樹根節(jié)點(diǎn)以fico_score <= 683.5為分割標(biāo)準(zhǔn)。

全體樣本的基尼系數(shù)為0.483,在3284個(gè)樣本中,被預(yù)測(cè)變量為0的有2671個(gè),為1的有1839個(gè)。

使用scikit-learn提供的參數(shù)搜索進(jìn)行調(diào)優(yōu)(GridSearchCV)。

# 設(shè)置樹的最大深度

max_depth = [None, ]

# 設(shè)置樹的最大葉節(jié)點(diǎn)數(shù)

max_leaf_nodes = np.a(chǎn)range(5, 10, 1)

# 設(shè)置樹的類標(biāo)簽權(quán)重

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

# 設(shè)置參數(shù)網(wǎng)格param_grid = {'max_depth': max_depth,

 'max_leaf_nodes': max_leaf_nodes,

'class_weight': class_weight}

# 對(duì)參數(shù)組合進(jìn)行建模和效果驗(yàn)證

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

# 輸出網(wǎng)格搜索的決策樹模型信息

print(clf_cv.fit(train_data, train_target))

輸出網(wǎng)格搜索的決策樹模型信息。

使用得到的“最優(yōu)”模型對(duì)測(cè)試集進(jìn)行評(píng)估。

# 輸出優(yōu)化后的決策樹模型的決策類評(píng)估指標(biāo)

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

# 輸出優(yōu)化后的決策樹模型的參數(shù)組合

print(clf_cv.best_params_)

輸出結(jié)果。

計(jì)算模型在不同閾值下的靈敏度和特異度指標(biāo),繪制ROC曲線。

# 使用模型進(jìn)行預(yù)測(cè)

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()

# 計(jì)算AUC值

print(metrics.roc_auc_score(test_target, test_est_p))

ROC曲線圖如下,其中訓(xùn)練集的ROC曲線(實(shí)線)與測(cè)試集的ROC曲線(虛線)很接近,說(shuō)明模型沒(méi)有過(guò)擬合。

模型的ROC曲線下面積為0.7358,模型效果一般。

<上一頁(yè)  1  2  
聲明: 本文由入駐維科號(hào)的作者撰寫,觀點(diǎn)僅代表作者本人,不代表OFweek立場(chǎng)。如有侵權(quán)或其他問(wèn)題,請(qǐng)聯(lián)系舉報(bào)。

發(fā)表評(píng)論

0條評(píng)論,0人參與

請(qǐng)輸入評(píng)論內(nèi)容...

請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字

您提交的評(píng)論過(guò)于頻繁,請(qǐng)輸入驗(yàn)證碼繼續(xù)

  • 看不清,點(diǎn)擊換一張  刷新

暫無(wú)評(píng)論

暫無(wú)評(píng)論

人工智能 獵頭職位 更多
掃碼關(guān)注公眾號(hào)
OFweek人工智能網(wǎng)
獲取更多精彩內(nèi)容
文章糾錯(cuò)
x
*文字標(biāo)題:
*糾錯(cuò)內(nèi)容:
聯(lián)系郵箱:
*驗(yàn) 證 碼:

粵公網(wǎng)安備 44030502002758號(hào)