[python機器學習及實踐(4)]Sklearn實現決策樹並用Graphviz可視化決策樹


1.決策樹

    決策樹是一種機器學習的方法。決策樹的生成算法有ID3, C4.5和C5.0等。決策樹是一種樹形結構,其中每個內部節點表示一個屬性上的判斷,每個分支代表一個判斷結果的輸出,最后每個葉節點代表一種分類結果。通過學習樣本得到一個決策樹,這個決策樹能夠對新的數據給出正確的分類。

決策樹的學習過程
1)特征選擇:從訓練數據的特征中選擇一個特征作為當前節點的分裂標准(特征選擇的標准不同產生了不同的特征決策樹算法)。
2)決策樹生成:根據所選特征評估標准,從上至下遞歸地生成子節點,直到數據集不可分則停止決策樹停止聲場。
3)剪枝:決策樹容易過擬合,需要剪枝來縮小樹的結構和規模(包括預剪枝和后剪枝)。

2.例子:

數據集:泰坦尼克號乘客數據:一共有1313條乘客信息,這個例子中取pclass,sex,age

 

代碼:

#coding=utf-8
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction import DictVectorizer #特征轉換器
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import classification_report
from sklearn import tree

#1.數據獲取
titanic = pd.read_csv('http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt')
#print titanic.head()
#print titanic.info()
X = titanic[['pclass','age','sex']]  #提取要分類的特征。一般可以通過最大熵原理進行特征選擇
y = titanic['survived']
print X.shape   #(1313, 3)
#print X.head()
#print X['age']

#2.數據預處理:訓練集測試集分割,數據標准化
X['age'].fillna(X['age'].mean(),inplace=True)   #age只有633個,需補充,使用平均數或者中位數都是對模型偏離造成最小的策略
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.25,random_state=33)  # 將數據進行分割

vec = DictVectorizer(sparse=False)
X_train = vec.fit_transform(X_train.to_dict(orient='record'))   #對訓練數據的特征進行提取
X_test = vec.transform(X_test.to_dict(orient='record'))         #對測試數據的特征進行提取
#轉換特征后,凡是類別型型的特征都單獨獨成剝離出來,獨成一列特征,數值型的則不變
print vec.feature_names_   #['age', 'pclass=1st', 'pclass=2nd', 'pclass=3rd', 'sex=female', 'sex=male']

#3.使用決策樹對測試數據進行類別預測
dtc = DecisionTreeClassifier()
dtc.fit(X_train,y_train)
y_predict = dtc.predict(X_test)

#4.獲取結果報告
print 'Accracy:',dtc.score(X_test,y_test)
print classification_report(y_predict,y_test,target_names=['died','servived'])

#5.將生成的決策樹保存
with open("jueceshu.dot", 'w') as f:
    f = tree.export_graphviz(dtc, out_file = f)

運行結果:

結果評價:

決策樹在模型描述上有着巨大的優勢。決策樹的推斷邏輯非常直觀,具有清晰的可解釋性,也方便了模型的可視化。一般無需考慮對數據的量化甚至標准化。

3.決策樹模型的可視化

1)以上的代碼將生成文件jueceshu.dot,需要通過Graphvizhttp://www.graphviz.org/將python生成的決策樹dot文件轉化成pdf文件。

2)安裝Graphviz后,需要設置環境變量:

 

添加系統環境變量 :建立變量名GRAPHVIZ_DOT ;值為安裝的路徑C:\Program Files (x86)\Graphviz2.34\bin\dot.exe

 

 設置環境變量 在用戶環境變量添加以下一個變量;建立變量名 GRAPHVIZ_INSTALL_DIR, 值為如C:\Program Files (x86)\Graphviz2.34

 

在系統環境變量 建立變量名PATH中添加Graphviz的bin目錄路徑,如C:\Program Files (x86)\Graphviz2.34\bin

測試是否安裝成功:在cmd中輸入dot -version檢驗是否安裝成功

 

3)通過cd指令切換到該目錄下。

輸入以下的指令:

dot -Tpdf jueceshu.dot -o output.pdf

 

生成的決策樹:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM