一、決策樹的算法的學習
決策樹學習通常包括特征選擇、決策樹的生產、決策樹的修剪這三個步驟組成。這些決策樹學習的思想主要來自於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