原文鏈接: http://tecdat.cn/?p=23848
原文出處:拓端數據部落公眾號
決策樹是對例子進行分類的一種簡單表示。它是一種有監督的機器學習技術,數據根據某個參數被連續分割。決策樹分析可以幫助解決分類和回歸問題。
決策樹算法將數據集分解成更小的子集;同時,相關的決策樹也在逐步發展。決策樹由節點(測試某個屬性的值)、邊/分支(對應於測試的結果並連接到下一個節點或葉子)和葉子節點(預測結果的終端節點)組成,使其成為一個完整的結構。
在這篇文章中,我們將學習Python中決策樹的實現,使用scikit learn包。
對於我們的分析,我們選擇了一個非常相關和獨特的數據集,該數據集適用於醫學科學領域,它將有助於預測病人是否患有糖尿病,基於數據集中采集的變量。這些信息來自國家糖尿病、消化道和腎臟疾病研究所,包括預測變量,如病人的BMI、懷孕情況、胰島素水平、年齡等。讓我們直接用決策樹算法來解決這個問題,進行分類。
用Python實現決策樹
對於任何數據分析問題,我們首先要清理數據集,刪除數據中的所有空值和缺失值。在這種情況下,我們不是在處理錯誤的數據,這使我們省去了這一步。
1. 為我們的決策樹分析導入所需的庫並拉入所需的數據
-
-
# 加載庫
-
from sklearn.model_selection import train_test_split #導入 train_test_split 函數
-
from sklearn import metrics #導入scikit-learn模塊以計算准確率
-
-
# 載入數據集
-
data = pd.read_csv("diabetes.csv", header=None, names=col_names)
-
讓我們看看這個數據集的前幾行是什么樣子的
pima.head()
2. 在加載數據后,我們了解結構和變量,確定目標變量和特征變量(分別為因變量和自變量)。
-
#在特征和目標變量中拆分數據集
-
X = pima[feature] # 特征
-
y = pima.label # 目標變量
3. 我們把數據按70:30的比例分成訓練集和測試集。
-
# 將數據集分成訓練集和測試集
-
train_test_split(X, y, test_size=0.3, random_state=1) # 70%的訓練和30%的測試
作為標准做法,你可以根據需要遵循70:30至80:20。
4. 使用scikit learn進行決策樹分析
-
# 創建決策樹分類器對象
-
clf = DecisionTreeClassifier()
5. 估計分類器預測結果的准確程度。准確度是通過比較實際測試集值和預測值來計算的。
-
# 模型准確率,分類器正確的概率是多少?
-
print("准確率:",metrics.accuracy_score(y_test, y_pred))
-
我們的決策樹算法有67.53%的准確性。這么高的數值通常被認為是好的模型。
6. 現在我們已經創建了一棵決策樹,看看它在可視化的時候是什么樣子的
決策樹的可視化。
-
-
Image(graph.create_png())
Python輸出
你會注意到,在這個決策樹圖中,每個內部節點都有一個分割數據的決策規則。
衡量通過決策樹分析創建的節點的不純度
Gini指的是Gini比,衡量決策樹中節點的不純度。人們可以認為,當一個節點的所有記錄都屬於同一類別時,該節點是純的。這樣的節點被稱為葉子節點。
在我們上面的結果中,由於結果的復雜性,完整的決策樹很難解釋。修剪一棵樹對於結果的理解和優化它是至關重要的。這種優化可以通過以下三種方式之一進行。
- 標准:默認="gini"
- splitter:字符串,可選(默認="best")或分割策略。選擇分割策略。可以選擇 "best"來選擇最佳分割,或者選擇 "random"來選擇最佳隨機分割。
- max_depth: int或None,可選(默認=None)或樹的最大深度
這個參數決定了樹的最大深度。這個變量的數值越高,就會導致過度擬合,數值越低,就會導致擬合不足。
在我們的案例中,我們將改變樹的最大深度作為預修剪的控制變量。讓我們試試max_depth=3。
-
-
# 創建決策樹分類器對象
-
DecisionTree( max_depth=3)
-
-
在Pre-pruning上,決策樹算法的准確率提高到77.05%,明顯優於之前的模型。
決策樹在Python中的實現
-
-
Image(graph.create_png())
結果:
Python輸出
這個修剪過的模型的結果看起來很容易解釋。有了這個,我們就能夠對數據進行分類,並預測一個人是否患有糖尿病。但是,決策樹並不是你可以用來提取這些信息的唯一技術,你還可以探索其他各種方法。
如果你想學習和實現這些算法,那么你應該探索通過輔助方法學習,並得到專業人士的1對1指導。拓端數據科學職業軌道計划保證了1:1的指導,項目驅動的方法,職業輔導,提供實習工作項目保證,來幫助你將職業生涯轉變為數據驅動和決策的角色。請聯系我們以了解更多信息!
最受歡迎的見解
3.python中使用scikit-learn和pandas決策樹
7.用機器學習識別不斷變化的股市狀況——隱馬爾可夫模型的應用