拓端tecdat|Python用決策樹分類預(yù)測糖尿病和可視化實例
原文鏈接: http://tecdat.cn/?p=23848
原文出處:拓端數(shù)據(jù)部落公眾號
決策樹是對例子進(jìn)行分類的一種簡單表示。它是一種有監(jiān)督的機(jī)器學(xué)習(xí)技術(shù),數(shù)據(jù)根據(jù)某個參數(shù)被連續(xù)分割。決策樹分析可以幫助解決分類和回歸問題。
決策樹算法將數(shù)據(jù)集分解成更小的子集;同時,相關(guān)的決策樹也在逐步發(fā)展。決策樹由節(jié)點(diǎn)(測試某個屬性的值)、邊/分支(對應(yīng)于測試的結(jié)果并連接到下一個節(jié)點(diǎn)或葉子)和葉子節(jié)點(diǎn)(預(yù)測結(jié)果的終端節(jié)點(diǎn))組成,使其成為一個完整的結(jié)構(gòu)。
在這篇文章中,我們將學(xué)習(xí)Python中決策樹的實現(xiàn),使用scikit learn包。
對于我們的分析,我們選擇了一個非常相關(guān)和獨(dú)特的數(shù)據(jù)集,該數(shù)據(jù)集適用于醫(yī)學(xué)科學(xué)領(lǐng)域,它將有助于預(yù)測病人是否患有糖尿病,基于數(shù)據(jù)集中采集的變量。這些信息來自國家糖尿病、消化道和腎臟疾病研究所,包括預(yù)測變量,如病人的BMI、懷孕情況、胰島素水平、年齡等。讓我們直接用決策樹算法來解決這個問題,進(jìn)行分類。
用Python實現(xiàn)決策樹
對于任何數(shù)據(jù)分析問題,我們首先要清理數(shù)據(jù)集,刪除數(shù)據(jù)中的所有空值和缺失值。在這種情況下,我們不是在處理錯誤的數(shù)據(jù),這使我們省去了這一步。?
1. 為我們的決策樹分析導(dǎo)入所需的庫并拉入所需的數(shù)據(jù)
# 加載庫
from sklearn.model_selection import train_test_split #導(dǎo)入 train_test_split 函數(shù)
from sklearn import metrics #導(dǎo)入scikit-learn模塊以計算準(zhǔn)確率
# 載入數(shù)據(jù)集
data = pd.read_csv("diabetes.csv", header=None, names=col_names)
讓我們看看這個數(shù)據(jù)集的前幾行是什么樣子的
pima.head()

2. 在加載數(shù)據(jù)后,我們了解結(jié)構(gòu)和變量,確定目標(biāo)變量和特征變量(分別為因變量和自變量)。
#在特征和目標(biāo)變量中拆分?jǐn)?shù)據(jù)集
X = pima[feature] # 特征
y = pima.label # 目標(biāo)變量
3. 我們把數(shù)據(jù)按70:30的比例分成訓(xùn)練集和測試集。
# 將數(shù)據(jù)集分成訓(xùn)練集和測試集
train_test_split(X, y, test_size=0.3, random_state=1) # 70%的訓(xùn)練和30%的測試
作為標(biāo)準(zhǔn)做法,你可以根據(jù)需要遵循70:30至80:20。?
4. 使用scikit learn進(jìn)行決策樹分析
# 創(chuàng)建決策樹分類器對象
clf = DecisionTreeClassifier()
5. 估計分類器預(yù)測結(jié)果的準(zhǔn)確程度。準(zhǔn)確度是通過比較實際測試集值和預(yù)測值來計算的。?
# 模型準(zhǔn)確率,分類器正確的概率是多少?
print("準(zhǔn)確率:",metrics.accuracy_score(y_test, y_pred))

我們的決策樹算法有67.53%的準(zhǔn)確性。這么高的數(shù)值通常被認(rèn)為是好的模型。?
6. 現(xiàn)在我們已經(jīng)創(chuàng)建了一棵決策樹,看看它在可視化的時候是什么樣子的
決策樹的可視化。
Image(graph.create_png())

Python輸出
你會注意到,在這個決策樹圖中,每個內(nèi)部節(jié)點(diǎn)都有一個分割數(shù)據(jù)的決策規(guī)則。
衡量通過決策樹分析創(chuàng)建的節(jié)點(diǎn)的不純度
Gini指的是Gini比,衡量決策樹中節(jié)點(diǎn)的不純度。人們可以認(rèn)為,當(dāng)一個節(jié)點(diǎn)的所有記錄都屬于同一類別時,該節(jié)點(diǎn)是純的。這樣的節(jié)點(diǎn)被稱為葉子節(jié)點(diǎn)。
在我們上面的結(jié)果中,由于結(jié)果的復(fù)雜性,完整的決策樹很難解釋。修剪一棵樹對于結(jié)果的理解和優(yōu)化它是至關(guān)重要的。這種優(yōu)化可以通過以下三種方式之一進(jìn)行。
標(biāo)準(zhǔn):默認(rèn)="gini"
splitter:字符串,可選(默認(rèn)="best")或分割策略。選擇分割策略。可以選擇 "best"來選擇最佳分割,或者選擇 "random"來選擇最佳隨機(jī)分割。
max_depth: int或None,可選(默認(rèn)=None)或樹的最大深度
這個參數(shù)決定了樹的最大深度。這個變量的數(shù)值越高,就會導(dǎo)致過度擬合,數(shù)值越低,就會導(dǎo)致擬合不足。
在我們的案例中,我們將改變樹的最大深度作為預(yù)修剪的控制變量。讓我們試試max_depth=3。?
# 創(chuàng)建決策樹分類器對象
DecisionTree( max_depth=3)

在Pre-pruning上,決策樹算法的準(zhǔn)確率提高到77.05%,明顯優(yōu)于之前的模型。
決策樹在Python中的實現(xiàn)
Image(graph.create_png())
結(jié)果:

Python輸出
這個修剪過的模型的結(jié)果看起來很容易解釋。有了這個,我們就能夠?qū)?shù)據(jù)進(jìn)行分類,并預(yù)測一個人是否患有糖尿病。但是,決策樹并不是你可以用來提取這些信息的唯一技術(shù),你還可以探索其他各種方法。
如果你想學(xué)習(xí)和實現(xiàn)這些算法,那么你應(yīng)該探索通過輔助方法學(xué)習(xí),并得到專業(yè)人士的1對1指導(dǎo)。拓端數(shù)據(jù)科學(xué)職業(yè)軌道計劃保證了1:1的指導(dǎo),項目驅(qū)動的方法,職業(yè)輔導(dǎo),提供實習(xí)工作項目保證,來幫助你將職業(yè)生涯轉(zhuǎn)變?yōu)閿?shù)據(jù)驅(qū)動和決策的角色。請聯(lián)系我們以了解更多信息!
?

最受歡迎的見解
1.從決策樹模型看員工為什么離職
2.R語言基于樹的方法:決策樹,隨機(jī)森林
3.python中使用scikit-learn和pandas決策樹
4.機(jī)器學(xué)習(xí):在SAS中運(yùn)行隨機(jī)森林?jǐn)?shù)據(jù)分析報告
5.R語言用隨機(jī)森林和文本挖掘提高航空公司客戶滿意度
6.機(jī)器學(xué)習(xí)助推快時尚精準(zhǔn)銷售時間序列
7.用機(jī)器學(xué)習(xí)識別不斷變化的股市狀況——隱馬爾可夫模型的應(yīng)用
8.python機(jī)器學(xué)習(xí):推薦系統(tǒng)實現(xiàn)(以矩陣分解來協(xié)同過濾)
9.python中用pytorch機(jī)器學(xué)習(xí)分類預(yù)測銀行客戶流失