Python數(shù)據(jù)分析(4)決策樹模型

前言

  • 蛋肥使用員工離職數(shù)據(jù)集(包含14999個(gè)樣本以及10個(gè)特征)吧寺,通過現(xiàn)有員工是否離職的數(shù)據(jù)矩肩,建立決策樹模型預(yù)測(cè)有可能離職的員工铡原,最后嘗試對(duì)模型進(jìn)行評(píng)估與調(diào)優(yōu)纱新。

準(zhǔn)備

時(shí)間:2021/06/30
系統(tǒng)環(huán)境:Windows 10
所用工具:Jupyter Notebook\Python 3.0
涉及的庫(kù):pandas\train_test_split\DecisionTreeClassifier\accuracy_score\roc_curve\matplotlib.pyplot\roc_auc_score\export_graphviz\graphviz\os\GridSearchCV

搭建決策樹模型

參考資料
阿里云天池-員工離職數(shù)據(jù)

#讀取數(shù)據(jù)集
import pandas as pd
df=pd.read_csv(r"C:\Users\Archer\Desktop\HR_comma_sep.csv")
#將sales篮奄、salary轉(zhuǎn)化為數(shù)值
df=df.replace({"salary":{"low":1,"medium":2,"high":3},
               "sales":{"accounting":1,"hr":2,"IT":3,"management":4,"marketing":5,
                        "product_mng":6,"RandD":7,"sales":8,"support":9,"technical":10}})

#選取自變量捆愁、因變量
X=df.drop(columns="left")
Y=df["left"]

#劃分訓(xùn)練集、測(cè)試集窟却,測(cè)試集占20%
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=1)

#搭建決策樹模型
from sklearn.tree import DecisionTreeClassifier
model=DecisionTreeClassifier(max_depth=3,random_state=1)
model.fit(X_train,Y_train)

獲取預(yù)測(cè)準(zhǔn)確度

蛋肥想法:通過測(cè)試集數(shù)據(jù)昼丑,檢驗(yàn)預(yù)測(cè)準(zhǔn)確度,測(cè)得準(zhǔn)確度為95.47%夸赫。

#預(yù)測(cè)結(jié)果評(píng)分
from sklearn.metrics import accuracy_score
Y_pred=model.predict(X_test)
score=accuracy_score(Y_pred,Y_test)
print(str(score))

獲取預(yù)測(cè)概率

#預(yù)測(cè)概率
Y_pred_=model.predict_proba(X_test)
data=pd.DataFrame(Y_pred_,columns=["不離職概率","離職概率"])

模型評(píng)估-ROC曲線

蛋肥想法:通過繪制ROC曲線菩帝,得出AUC值為0.966,表明預(yù)測(cè)效果不錯(cuò)。

#獲取不同閾值下的命中率(TPR)和假警報(bào)率(FPR)
from sklearn.metrics import roc_curve
fpr,tpr,thres=roc_curve(Y_test,Y_pred_[:,1])

#繪制ROC曲線
import matplotlib.pyplot as plt
plt.plot(fpr,tpr)
plt.savefig(r"C:\Users\Archer\Desktop\my_fig.png",dpi=500)
plt.show

#獲取模型AUC值
from sklearn.metrics import roc_auc_score
auc=roc_auc_score(Y_test,Y_pred_[:,1])
ROC曲線

特征重要性評(píng)估

蛋肥想法:特征重要性最高的是“satisfaction_level”呼奢,而“salary”在該模型中的特征重要性為0宜雀,并不符合實(shí)際(錢可太重要了~),應(yīng)該是因?yàn)閿?shù)據(jù)處理時(shí)單純將工資分為“高”“中”“低”3個(gè)檔次握础,使得該特征變量在決策樹模型中發(fā)揮的作用較小辐董。

#獲取特征重要性
features=X.columns
imp=model.feature_importances_
imp_data=pd.DataFrame()
imp_data["特征名稱"]=features
imp_data["特征重要性"]=imp
imp_data.sort_values("特征重要性",ascending=False)

決策樹模型可視化

#決策樹模型可視化
from sklearn.tree import export_graphviz
import graphviz
import os
os.environ["PATH"]=os.pathsep+r"C:\Program Files\Graphviz\bin"
dot_data=export_graphviz(model,out_file=None,class_names=["0","1"])
graph=graphviz.Source(dot_data)
graph.render(r"C:\Users\Archer\Desktop\result")

參數(shù)調(diào)優(yōu)-GridSearch網(wǎng)格搜索

蛋肥想法:GridSearch網(wǎng)格搜索可以進(jìn)行單參數(shù)和多參數(shù)調(diào)優(yōu),蛋肥這里以max_depth參數(shù)來練習(xí)調(diào)優(yōu)禀综,得出'max_depth': 7時(shí)郎哭,AUC更好為0.985。

#單參數(shù)調(diào)優(yōu),cv=5為5折交叉驗(yàn)證
from sklearn.model_selection import GridSearchCV
parameters={"max_depth":[1,3,5,7,9,11]}
model=DecisionTreeClassifier()
grid_search=GridSearchCV(model,parameters,scoring="roc_auc",cv=5)

#輸出參數(shù)的最優(yōu)值
grid_search.fit(X_train,Y_train)
grid_search.best_params_

總結(jié)

  • 作為機(jī)器學(xué)習(xí)的經(jīng)典算法模型菇存,決策樹模型具有獨(dú)特的優(yōu)勢(shì)夸研,如對(duì)異常值不敏感、可解釋性強(qiáng)等依鸥,也有一些缺點(diǎn)亥至,如結(jié)果不穩(wěn)定、容易造成過擬合等贱迟。
  • 決策樹模型是很多重要集成模型的基礎(chǔ)姐扮。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市衣吠,隨后出現(xiàn)的幾起案子茶敏,更是在濱河造成了極大的恐慌,老刑警劉巖缚俏,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件惊搏,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡忧换,警方通過查閱死者的電腦和手機(jī)恬惯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來亚茬,“玉大人酪耳,你說我怎么就攤上這事∩卜欤” “怎么了碗暗?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)梢夯。 經(jīng)常有香客問我言疗,道長(zhǎng),這世上最難降的妖魔是什么厨疙? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任洲守,我火速辦了婚禮疑务,結(jié)果婚禮上沾凄,老公的妹妹穿的比我還像新娘梗醇。我一直安慰自己,他們只是感情好撒蟀,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布叙谨。 她就那樣靜靜地躺著,像睡著了一般保屯。 火紅的嫁衣襯著肌膚如雪手负。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天姑尺,我揣著相機(jī)與錄音竟终,去河邊找鬼。 笑死切蟋,一個(gè)胖子當(dāng)著我的面吹牛统捶,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播柄粹,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼喘鸟,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了驻右?” 一聲冷哼從身側(cè)響起什黑,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎堪夭,沒想到半個(gè)月后愕把,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡森爽,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年礼华,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拗秘。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡圣絮,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出雕旨,到底是詐尸還是另有隱情扮匠,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布凡涩,位于F島的核電站棒搜,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏活箕。R本人自食惡果不足惜力麸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧克蚂,春花似錦闺鲸、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至赤屋,卻和暖如春立镶,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背类早。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來泰國(guó)打工媚媒, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人涩僻。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓缭召,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親令哟。 傳聞我的和親對(duì)象是個(gè)殘疾皇子恼琼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

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