拓端tecdat|Python用決策樹分類預測糖尿病和可視化實例


原文鏈接: http://tecdat.cn/?p=23848

原文出處:拓端數據部落公眾號


決策樹是對例子進行分類的一種簡單表示。它是一種有監督的機器學習技術,數據根據某個參數被連續分割。決策樹分析可以幫助解決分類和回歸問題。

決策樹算法將數據集分解成更小的子集;同時,相關的決策樹也在逐步發展。決策樹由節點(測試某個屬性的值)、邊/分支(對應於測試的結果並連接到下一個節點或葉子)和葉子節點(預測結果的終端節點)組成,使其成為一個完整的結構。

在這篇文章中,我們將學習Python中決策樹的實現,使用scikit learn包。

對於我們的分析,我們選擇了一個非常相關和獨特的數據集,該數據集適用於醫學科學領域,它將有助於預測病人是否患有糖尿病,基於數據集中采集的變量。這些信息來自國家糖尿病、消化道和腎臟疾病研究所,包括預測變量,如病人的BMI、懷孕情況、胰島素水平、年齡等。讓我們直接用決策樹算法來解決這個問題,進行分類。

用Python實現決策樹

對於任何數據分析問題,我們首先要清理數據集,刪除數據中的所有空值和缺失值。在這種情況下,我們不是在處理錯誤的數據,這使我們省去了這一步。 

1. 為我們的決策樹分析導入所需的庫並拉入所需的數據

  1.  
     
  2.  
    # 加載庫
  3.  
    from sklearn.model_selection import train_test_split #導入 train_test_split 函數
  4.  
    from sklearn import metrics #導入scikit-learn模塊以計算准確率
  5.  
     
  6.  
    # 載入數據集
  7.  
    data = pd.read_csv("diabetes.csv", header=None, names=col_names)
  8.  
     

讓我們看看這個數據集的前幾行是什么樣子的

pima.head()

2. 在加載數據后,我們了解結構和變量,確定目標變量和特征變量(分別為因變量和自變量)。

  1.  
    #在特征和目標變量中拆分數據集
  2.  
    X = pima[feature] # 特征
  3.  
    y = pima.label # 目標變量

3. 我們把數據按70:30的比例分成訓練集和測試集。

  1.  
    # 將數據集分成訓練集和測試集
  2.  
    train_test_split(X, y, test_size=0.3, random_state=1) # 70%的訓練和30%的測試

作為標准做法,你可以根據需要遵循70:30至80:20。 

4. 使用scikit learn進行決策樹分析

  1.  
    # 創建決策樹分類器對象
  2.  
    clf = DecisionTreeClassifier()

5. 估計分類器預測結果的准確程度。准確度是通過比較實際測試集值和預測值來計算的。 

  1.  
    # 模型准確率,分類器正確的概率是多少?
  2.  
    print("准確率:",metrics.accuracy_score(y_test, y_pred))
  3.  
     

我們的決策樹算法有67.53%的准確性。這么高的數值通常被認為是好的模型。 

6. 現在我們已經創建了一棵決策樹,看看它在可視化的時候是什么樣子的

決策樹的可視化。

  1.  
     
  2.  
    Image(graph.create_png())

Python輸出

你會注意到,在這個決策樹圖中,每個內部節點都有一個分割數據的決策規則。

衡量通過決策樹分析創建的節點的不純度

Gini指的是Gini比,衡量決策樹中節點的不純度。人們可以認為,當一個節點的所有記錄都屬於同一類別時,該節點是純的。這樣的節點被稱為葉子節點。

在我們上面的結果中,由於結果的復雜性,完整的決策樹很難解釋。修剪一棵樹對於結果的理解和優化它是至關重要的。這種優化可以通過以下三種方式之一進行。

  • 標准:默認="gini"
  • splitter:字符串,可選(默認="best")或分割策略。選擇分割策略。可以選擇 "best"來選擇最佳分割,或者選擇 "random"來選擇最佳隨機分割。
  • max_depth: int或None,可選(默認=None)或樹的最大深度
    這個參數決定了樹的最大深度。這個變量的數值越高,就會導致過度擬合,數值越低,就會導致擬合不足。

在我們的案例中,我們將改變樹的最大深度作為預修剪的控制變量。讓我們試試max_depth=3。 

  1.  
     
  2.  
    # 創建決策樹分類器對象
  3.  
    DecisionTree( max_depth=3)
  4.  
     
  5.  
     

在Pre-pruning上,決策樹算法的准確率提高到77.05%,明顯優於之前的模型。

決策樹在Python中的實現

  1.  
     
  2.  
    Image(graph.create_png())

結果:

Python輸出

這個修剪過的模型的結果看起來很容易解釋。有了這個,我們就能夠對數據進行分類,並預測一個人是否患有糖尿病。但是,決策樹並不是你可以用來提取這些信息的唯一技術,你還可以探索其他各種方法。

如果你想學習和實現這些算法,那么你應該探索通過輔助方法學習,並得到專業人士的1對1指導。拓端數據科學職業軌道計划保證了1:1的指導,項目驅動的方法,職業輔導,提供實習工作項目保證,來幫助你將職業生涯轉變為數據驅動和決策的角色。請聯系我們以了解更多信息!
 


最受歡迎的見解

1.從決策樹模型看員工為什么離職

2.R語言基於樹的方法:決策樹,隨機森林

3.python中使用scikit-learn和pandas決策樹

4.機器學習:在SAS中運行隨機森林數據分析報告

5.R語言用隨機森林和文本挖掘提高航空公司客戶滿意度

6.機器學習助推快時尚精准銷售時間序列

7.用機器學習識別不斷變化的股市狀況——隱馬爾可夫模型的應用

8.python機器學習:推薦系統實現(以矩陣分解來協同過濾)

9.python中用pytorch機器學習分類預測銀行客戶流失


免責聲明!

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



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