分類——決策樹模型(附有決策樹生成步驟)


一、決策樹的算法的學習
決策樹學習通常包括特征選擇、決策樹的生產、決策樹的修剪這三個步驟組成。這些決策樹學習的思想主要來自於ID3算法、C4.5算法、CART算法,我學習了這三個算法后是覺得難度依次增加,考慮的問題由局部->總體->優化,下面會依次介紹三種算法個人學習心得,不妥之處,敬請指出。
1、特征選擇
三種算法分別對應三種不同的准則,ID3算法運用了信息增益,C4.5算法運用了信息增益比,CART算法運用了基尼指數(Gini)。(這里只簡要介紹三個准則,詳細請閱讀李航教授的《統計學習方法》)。在介紹之前,先介紹熵的概念,隨機變量X(為輸入實例的所屬類。假如有50個隨機變量(假設全部被決策樹分類),如果所有的隨機變量被分成2類,一類有20的,另一類則有30個,則X的取值為2/5、3/5.)的熵定義為從X1、X2到Xn分別與對應的以2或者e為底,X1、X2到Xn對應的自身的乘積的之和的相反數。
首先介紹ID3算法的准則信息增益:它定義為:g(D,A)=H(D)-H(D|A),其中H(D)為經驗熵,是上述熵的應用,D是訓練數據集;H(D|A)為特征A對數據集D的經驗條件熵,個人理解是每個數據集都已經成為某類的一個數據,用特征A對數據集進行划分,划分出來的每一部分中的數據可能從屬不同的類,H(D|A)即求的是划分的每一部分的H(Di)之和,信息增益g(D,A)就能求出。但是運用信息增益可能在概率上會有偏好,會造成過擬合,因此有了信息增益比。
C4.5則運用了信息增益比,特征A對訓練數據集D的信息增益比gR(D,A)定義為其信息增益g(D,A)與訓練數據集D關於特征A的值的熵HA(D)之比,即gR(D,A)=g(D,A)/HA(D),其中,
CART算法可以用於分類或回歸中,其標准Gini指數請參考李航教授的《統計學習方法》。

2、決策樹的生成(我重點從實戰中記錄心得)
決策樹的生成這里使用了sklearn.datasets庫中的load_wine數據集,一般的建模從代碼層面可以得出模型的准確率、召回率等,但不能生成決策樹。而一棵完美的決策樹會是建模過程更加的高級,所以有必要學習下。畫出對應模型的決策樹需要graphviz第三方庫(這個庫的安裝真的有點難度),需要pip進行install,這一點還不夠,還需要設置電腦系統環境變量,這是重點。
首先從graphviz官方安裝對應的graphviz工具,我安裝的是Win10-64位的,安裝過程中需要記得安裝地址,后面在設置電腦系統環境變量需要使用,安裝成功后便開始進行環境變量的設置了。
設置環境變量:首先進入控制面板,找到“系統”,點擊進入,


設置用戶環境,即輸入剛剛安裝的地址,以我為例:D:\graphviz\bin
設置環境變量,在安裝地址后+\dot.exe,例:D:\graphviz\bin\dot.exe

檢測環境變量是否生效:
1.打開dos窗口:win+R
2.輸入命令:dot -version
3.觀察到如下信息,則該設置生效;

有效之后便是最后一步在Pycharm中安裝graphviz庫了,成功之后便可以使用(這是正常情況下),如果出現下面的bug,python中運行 仍然出錯

’ExecutableNotFound: failed to execute ['dot', '-Tpdf', '-O', 'iris'], make sure the Graphviz executables are on your systems' PATH‘
之后用以下方法查看了環境變量,發現沒有,之后追加上。
import os
os.environ[ "PATH" ] += os.pathsep + 'C:/Program Files (x86)/Graphviz2.38/bin/'
現在就可以使用了。

下面給出決策樹實現load_wine數據集的代碼及決策樹

from sklearn.datasets import load_wine
from sklearn import tree
from sklearn.model_selection import train_test_split as tsplit
from sklearn.tree import DecisionTreeClassifier, export_graphviz
import graphviz
import os
os.environ[ "PATH" ] += os.pathsep + 'D:/graphviz/bin'
X,y=load_wine(return_X_y=True)
x_train,x_test,y_train,y_test=tsplit(X,y,test_size=0.1)
m=tree.DecisionTreeClassifier()
m.fit(x_train,y_train)

**添加特征名稱(feature_names)、分類結果(class_names)、填充顏色filled=True可以給可視化的決策樹添加顏色。因為load_wine數據集有13個特征,所有下面沒有添加,有需要請自己添加,格式一樣。
dot_data=export_graphviz(m,out_file=None,
class_names=['pclass=0','pclass=1st','pclass=2nd'],filled=True)
graph=graphviz.Source(dot_data)
graph.render('決策樹可視化')

附加讀取excel類型文件的例子

#模型搭建代碼匯總
from sklearn.tree import export_graphviz
import graphviz
import os 
import pandas as pd
#1.讀取數據與簡單預處理
df = pd.read_excel('員工離職預測模型.xlsx')
df = df.replace({'工資': {'低': 0, '中': 1, '高': 2}})
#2.提取特征變量和目標變量
X = df.drop(columns='離職')
y = df['離職']
#3.划分訓練集和測試集
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=123)
#4.模型訓練及搭建
from sklearn.tree import DecisionTreeClassifier
model = DecisionTreeClassifier(max_depth=3, random_state=123)
model.fit(X_train, y_train)
#以下這兩行是手動進行環境變量配置,防止在本機的環境變量部署失敗
os.environ['PATH'] = os.pathsep + 'D:\graphviz\bin'
dot_data = export_graphviz(model, out_file=None)
graph = graphviz.Source(dot_data)
graph.render('決策樹可視化')

參考文獻:

[1]李航.統計學習方法[M].清華大學出版社,2019
[2]徐向武.Python高手修煉之道[M].人民郵電出版社,2020
[3]https://blog.csdn.net/qq_45832050/article/details/109271806?utm_source=app&app_version=4.7.1&code=app_1562916241&uLinkId=usr1mkqgl919blen


免責聲明!

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



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