1、什麼是決策樹
大家好,今天我們來談一下機器學習中的決策樹模型。顧名思義,決策樹分析 (Decision Tree analysis)是通過已知數據生成一種樹狀結構的模型,進而以if-then的二分法樹形結構邏輯對未知數據進行分析的一系列過程。看起來決策樹有點複雜,但是,其實我們在日常生活中,經常會不經意間使用到決策樹的思想。因此,決策樹的分析並不神秘。通過本篇文章您可以了解:決策樹是如何運作的,利用R語言實現決策樹,讀解決策樹的分析結果以及可視化。
2、決策樹分析過程
我們舉一個乳腺癌診斷流程來類比決策樹的分析過程(本過程是乳腺癌診斷簡化的流程,請各位大俠醫輕拍)。在診斷乳腺癌時,需要經過多個診斷、檢測過程才能下診斷結論,醫生的決策可能如下:結果只有兩類,健康者與患者(細分良性腫瘤患者與有惡性可能的患者)。在醫生眼中,臨床診斷是最早、最重要的預判診斷之一。首先,在臨床上會先觀察患者是否有腫塊、症狀來發現問題(首次變量選擇,形成第一個分支),然後根據檢查結果分為疑似與健康兩類;再選擇超聲波檢查與鉬靶判定鈣化程度類型(第二個變量,行程第二個分支),再將結果進行BI-RADS分類,然後根據檢查結果將腫塊分為良性與有惡性趨勢兩類;最終將疑似有問題的進行穿刺檢查(第三個變量選擇,將進入第三個分支),預測確診腫瘤的類別,完成術前診斷。(圖1)。
圖1決策樹及分析流程
決策樹分析的流程與上述過程類似。決策樹模型的算法首先選擇一個分類能力最好、最重要的變量作為第一個分支(選擇的依據有:熵的大小、信息的增益、基尼係數、卡方統計量、增益比等,構成了不同的樹),然後將變量分為兩個以上的子集,於是形成幾個樹的分支,然後算法再選擇第二個分類能力最好、重要的變量,對樹進行第二次分支,直到滿足:沒有備選的變量、剩下的樣品都是同一類又或者到達預定樹的大小。形成模型後,可以對未知的數據進行分類、數值預測的分析方法。在R中,變量選擇、樣品判定與預測均是自動完成。
決策樹算法經過 C4. 5、 C5. 0 與分類回歸樹(Classification And Regression Tree, CART)的發展,已經比較完善,可以應對數值、分類等一系列問題。決策樹分析的核心是利用訓練數據建立分支樹,並生長至一定階段(建模);然後利用測試數據修剪分支樹(修正),使之有較高的預測精度(完成分析),決策樹分析可以完成分類、預測數值、重要變量篩選、數據探索等任務。不同類型的決策樹計算經過以下幾個階段(數學推導此處省去1萬字):
(1)算法選定最佳的變量(診斷方法),實現兩類中計算純度最大化,通過數值或是與否,將全部數據劃分為兩類(即一類良性樣本儘量多,另一類有惡性趨勢樣本儘量多);如果預測變量是連續的,選擇一個數值分割點使兩類儘可能純度最大(本例子沒有),如果預測變量為分類變量也是如此(如各種劃分類別);
(2)在次佳的變量(第二種診斷方法)執行步驟(1),再次產生內子節點;
(3)不斷重複(1)-(2)步驟,直到某一類別的樣品數過少,或分類中的純度低於我們給定的值(閾值),又或者是達到一定的循環數後,停止計算,最終的子類別即為子節點。我們根據子節點的分布就可以對變量的分類或數值進行預測。
總之,決策樹模型與分析經過三步才能完成:
圖2決策樹分析步驟
3、決策樹的優點與缺點
決策樹是一種「貪婪型」分析,在上述過程中,有可能會得到一顆很大的樹,出現過擬合的現象,這樣的話所生成的「樹」僅能反映訓練數據的特徵,而對未知的樣品分析預測的準確度會下降,因此,R語言中的包會採用預修剪(Pre- pruning)和後修剪(Post- pruning)限制深度、10折交叉驗證等方法自動控制決策樹的大小,提高模型的預測能力。
經過幾十年發展,決策樹分析已經成為很多行業的分析方法。決策樹適合用於無數據的分布規律假設,定性、定量多種類型數據混雜的分析中應用。
其具有以下優點:
(1)無數據類型的假設,適用於大多數類型的數據分析(如非正態數據、有偏數據與缺失型數據,尤其是醫學、金融的數據);
(2)高度自動化過程,可以通過分類、定序、數值等變量預測分類或回歸;
(3)是其他機器學習的基礎;
其缺點也要注意如:
(1)會出現過擬合或欠擬合,導致預測精度下降(R語言通過多種控制條件減少過/欠擬合的情況);
(2)有時候產生的分類結果有悖於直覺,不好理解,需要結合專業背景解讀。然而,這一切問題對於傳統分析來講,其缺點是相對比較輕微而且可以避免的(在機器學習中,模型的調整優化與過擬合有直接的關係,一方面需要提高精度,一方面又要防止過擬合,以後可以單獨談談機器學習的過擬合問題)。
本文的數據來源於ULI的資料庫的慢性腎病數據集,該數據來源於印度三家醫院的短期追蹤,隨訪。目的是通過分析病人的背景資料與檢查結果,建立慢性腎病的診斷與分類模型。(http://archive.ics.uci.edu/ml/datasets/Chronic_Kidney_Disease)。數據包括24個自變量與1個因變量。自變量包括病人的年齡(age),血壓(bp)、sg(尿比重)等背景與身體指標,以及分類是否患腎病(ckd與notckd),具體可以參照上述數據文檔的幫助。
圖3 kid數據集的缺失值分析
當我們預覽數據時發現這個數據集的缺失非常嚴重(圖3),圖中紅色柱狀圖與熱圖分別顯示缺失的統計量、分布與位置。簡單用成對刪除或平均值填補將是無法解決的,缺失值的處理可以參考之前的文章(有機會也可以談談實驗中缺失值的處理)。由於缺失比較嚴重,我們採用基於決策樹的缺失值修補法解決大量缺失值。
圖4 處理後的數據集
經過缺失值處理後,就可以進一步進行分析。注意,這裡並沒有討論缺失值補充的合理性,依賴決策樹-隨機森林法對缺失值補充完成。數據會分成訓練集與測試集,並檢查分類的比例。
完成數據的準備後,我們開始決策樹分析。
完成初步的決策樹構建。
通過運行決策樹對象,我們可以看到決策樹的結果。我們通過上圖可以了解樹的信息。第一行n是參與kid.t的總樣品數。第二行Node)為節點序列編號,1)root為樹根、起點,2-7)其他為分支。
split為拆分變量與準則(如hemo<12.95,hemo>12.95);n、loss是分別代表在根部總的樣品數與被錯分的樣品數(如280與180分別代表在根部時反應總的樣品數是280,180是另一組樣品數,在2分支處153代表分類為ckd的樣品數,0代表此處誤判的樣品數量);ynal代表該節點多數的分類類別(在2分支處為ckd,3分支則為notckd);(yprob)則為各水平在此處的比例(如2分支處100%為ckd,分錯為0,而3分支處 85%為notckd,14.9%為ckd);*代表為最後的子節點,分支結束。這裡看起來有點費勁,後面會介紹決策樹的可視方法。
然後我們需要判定決策樹大小是否合適。
cptable為決策樹的誤差診斷表,CP是複雜度,用於懲罰控制過大的樹,是逐步減小的一系列數值(類似於主成分分析的碎石圖);nsplit為分支數,有n個分支就有n+1個終點;rel error代表不同樹分支的誤差,xerror為交叉校驗的誤差,xstd為交叉校驗的誤差的標準差。
圖5 決策樹大小的讀解
rpart已經為我們選擇合適大小的分支數,交叉校驗的誤差最小的樹,避免過擬合的出現(即分支數為3,4個終點)。當然我們也可以手動剪樹,運行以下命令。
模型建立好後,可以開始進行預測。
結果還是不錯,基本沒有分錯。
決策樹也可以通過圖形進行可視化。
通過可視化可以發現hemo與sg兩個指標對ckd分類影響非常大,當hemo<13時,基本可以判定屬於ckd,當hemo> 13且sg=1.010時也是ckd,其餘的被分為notckd。我們也可以非常清晰地看到分析的過程。
圖7 自定義決策樹可視化
變量的重要程度,也可以通過可視化看出來,但是有一些變量並沒有進入判定模型。
圖8 變量的重要程度
通過以上學習,我們也能快速掌握在R語言平臺下決策樹的實施、分析與讀解。其實,決策樹的奧秘遠不僅限於此,它可是樹形分析與組合分析等機器學習的基礎,與「神經網絡」一起,組成現代機器學習的基石。我們未來會沿著這條「樹形」線向大家展示如隨機森林等更加高級別的機器學習與應用,歡迎大家繼續關注「醫學方」與我們的文章。
「醫學方」現正式向粉絲們公開徵稿!內容須原創首發,與科研相關,一經採用,會奉上豐厚稿酬(300-2000元),詳情請戳。
「醫學方」始終致力於服務「醫學人」,將最前沿、最有價值的臨床、科研原創文章推送給各位臨床醫師、科研人員。
醫學方已推出「實驗室那些事兒」「SCI寫作技巧」「文獻精讀與解析」「醫學英語輕鬆學」「國自然基金申請」「臨床數據挖掘」、「基因數據挖掘」、「R語言教程」、「醫學統計學」、「微創動物實驗培訓」等多個專題課程,如需了解課程詳細推文,可關注「醫學方」公眾號,點擊「精品專題」進入
騰訊課堂:https://medfun.ke.qq.com
網易雲課堂:http://study.163.com/u/ykt1467466791112
客服電話:15821255568
客服微信:yixuefang1234
溫馨提示:醫學方還設有專門的討論群哦~各位明星導師都在群中,可以解答各位的遇到的問題,如有興趣,可以加客服微信後加入群聊...