決策樹(shù)分類(lèi)算法
1、概念
決策樹(shù)呈樹(shù)形結(jié)構(gòu)屁使,是一種基本的回歸和分類(lèi)方法在岂。
決策樹(shù)模型的優(yōu)點(diǎn)在于可讀性強(qiáng)、分類(lèi)速度快洁段。
2、程序?qū)崿F(xiàn)
importos
importpydotplus
importnumpyasnp
importpandasaspd
importsklearn.treeastree
importmatplotlib.pyplotasplt
fromIPython.displayimportImage
importsklearn.metricsasmetrics
fromsklearn.treeimportDecisionTreeClassifier
fromsklearn.model_selectionimporttrain_test_split,?ParameterGrid,?GridSearchCV
#?消除pandas輸出省略號(hào)情況
pd.set_option('display.max_columns',None)
#?設(shè)置顯示寬度為1000,這樣就不會(huì)在IDE中換行了
pd.set_option('display.width',1000)
#?讀取數(shù)據(jù),skipinitialspace:忽略分隔符后的空白
accepts?=?pd.read_csv('accepts.csv',?skipinitialspace=True)
#?dropna:對(duì)缺失的數(shù)據(jù)進(jìn)行刪除
accepts?=?accepts.dropna(axis=0,?how='any')
#?因變量,是否違約
target?=?accepts['bad_ind']
#?自變量
data?=?accepts.ix[:,'bankruptcy_ind':'used_ind']
#?業(yè)務(wù)處理,loan_amt:貸款金額,tot_income:月均收入
data['lti_temp']?=?data['loan_amt']?/?data['tot_income']
data['lti_temp']?=?data['lti_temp'].map(lambdax:10ifx?>=10elsex)
#?刪除貸款金額列
deldata['loan_amt']
#?替換曾經(jīng)破產(chǎn)標(biāo)識(shí)列
data['bankruptcy_ind']?=?data['bankruptcy_ind'].replace({'N':0,'Y':1})
#?使用scikit-learn將數(shù)據(jù)集劃分為訓(xùn)練集和測(cè)試集
train_data,?test_data,?train_target,?test_target?=?train_test_split(data,?target,?test_size=0.2,?train_size=0.8,?random_state=1234)
#?初始化一個(gè)決策樹(shù)模型
clf?=?DecisionTreeClassifier(criterion='gini',?max_depth=3,?class_weight=None,?random_state=1234)
#?輸出決策樹(shù)模型信息
print(clf.fit(train_data,?train_target))
#?輸出決策樹(shù)模型的決策類(lèi)評(píng)估指標(biāo)
print(metrics.classification_report(test_target,?clf.predict(test_data)))
#?對(duì)不同的因變量進(jìn)行權(quán)重設(shè)置
clf.set_params(**{'class_weight':?{0:1,1:3}})
clf.fit(train_data,?train_target)
#?輸出決策樹(shù)模型的決策類(lèi)評(píng)估指標(biāo)
print(metrics.classification_report(test_target,?clf.predict(test_data)))
#?輸出決策樹(shù)模型的變量重要性排序
print(list(zip(data.columns,?clf.feature_importances_)))
#?設(shè)置graphviz路徑
os.environ["PATH"]?+=?os.pathsep?+'C:/Program?Files?(x86)/Graphviz2.38/bin/'
#?決策樹(shù)的可視化
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())
#?將決策樹(shù)模型輸出為圖片
graph.write_png(r'pang.png')
#?將決策樹(shù)模型輸出為PDF
graph.write_pdf('tree.pdf')
從圖1可以看見(jiàn)決策樹(shù)根節(jié)點(diǎn)以fico_score <= 683.5為分割標(biāo)準(zhǔn)堂淡。
參考網(wǎng)站:
https://mp.weixin.qq.com/s?__biz=MzU4OTYzNjE2OQ==&mid=2247485104&idx=1&sn=57bd5aba5efdba901a90b853ad7f5ce7&chksm=fdcb3196cabcb88074e69bcaf0b0aaedea8c64a2f02ec9d396511ecc3717700f0e6e21eca6d7&mpshare=1&scene=23&srcid=1229sDzYeCbtGvujmgp6sbYT&sharer_sharetime=1577625469143&sharer_shareid=b9878e2d4bfd9120a9cd4d516418c18e#rd