Python實(shí)現(xiàn)初階決策樹

《Python數(shù)據(jù)挖掘入門與實(shí)踐》這本書中關(guān)于決策樹部分的講解,代碼部分相對(duì)簡(jiǎn)要,但坑爹的是,他給的數(shù)據(jù)下載網(wǎng)站,人家改版了,根本找不到數(shù)據(jù),進(jìn)行測(cè)試,于是我又用“鳶尾花”數(shù)據(jù)測(cè)試了一下決策樹算法。

閑話少說,直接上代碼。

1、導(dǎo)入鳶尾花數(shù)據(jù)

鳶尾花數(shù)據(jù),可以直接從sklearn庫中進(jìn)行載入,分別將自變量和因變量,賦值為x和y。

from sklearn.datasets import load_iris
import numpy as np
import pandas as pd 
X_data = load_iris().data
y_data = load_iris().target

2、設(shè)置訓(xùn)練集和測(cè)試集

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X_data, y_data)

3、建立決策樹對(duì)象

from sklearn.tree import DecisionTreeClassifier
dtc = DecisionTreeClassifier(max_leaf_nodes=4,random_state = 14)

max_leaf_nodes=4,指保留最大節(jié)點(diǎn)的數(shù)量為4,可以理解為樹的深度為4。
random_state = 14,設(shè)置隨機(jī)種子為14,使用相同的隨機(jī)種子能包粽子幾次的實(shí)驗(yàn)結(jié)果相同。但是,在自己的實(shí)驗(yàn)中,為保證隨機(jī)性,可以設(shè)置不同的隨機(jī)種子。

4、訓(xùn)練并預(yù)測(cè)

dtc.fit(X_train,y_train) #用訓(xùn)練集進(jìn)行訓(xùn)練
y_predict = dtc.predict(X_test) # 利用測(cè)試數(shù)據(jù)生成預(yù)測(cè)值y_predict
# 判斷與訓(xùn)練集y是否相等并返回正確率
accuracy  = np.mean(y_predict == y_test)*100
print('準(zhǔn)確率為%.2f%%' % accuracy)

得出的結(jié)果:準(zhǔn)確率為97.37%

5、得到?jīng)Q策樹圖

導(dǎo)入export_graphviz,生成dot文件

from sklearn.tree import export_graphviz
export_graphviz(clf,out_file = 'tree0.dot')

生成dot文件后,用GVEdit命令轉(zhuǎn)化成png格式或者其他格式。
首先安裝graphviz-2.38,然后設(shè)置環(huán)境變量(本人是windows環(huán)境下運(yùn)行的),然后敲下如下命令即可轉(zhuǎn)化成png格式的樹圖。

dot -Tpng tree0.dot -o tree0.png

生成的樹圖如下所示:


樹圖.png

由上圖可知,此次創(chuàng)建決策用的是信息增益熵,主要用到兩個(gè)特征,即X[2]和X[3]。
根節(jié)點(diǎn)處X[2]小于等于2.45的為一類,且均為第一類鳶尾花
X[2]大于2.45,且X[3]大于1.75的為一類,且大部分為第三類鳶尾花,只有一個(gè)樣本為第二類鳶尾花。
X[3]小于等于1.75,且X[2]小于等于4.95的為一類,且大部分為第二類鳶尾花,只有一個(gè)樣本為第三類鳶尾花。
X[3]小于等于1.75,且X[2]大于4.95的為一類,有2個(gè)為第二類,有4個(gè)為第三類鳶尾花。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容