1. 程式人生 > >決策樹decision tree分析

決策樹decision tree分析

本文目的

最近一段時間在Coursera上學習Data Analysis,裡面有個assignment涉及到了決策樹,所以參考了一些決策樹方面的資料,現在將學習過程的筆記整理記錄於此,作為備忘。

演算法原理

決策樹(Decision Tree)是一種簡單但是廣泛使用的分類器。通過訓練資料構建決策樹,可以高效的對未知的資料進行分類。決策數有兩大優點:1)決策樹模型可以讀性好,具有描述性,有助於人工分析;2)效率高,決策樹只需要一次構建,反覆使用,每一次預測的最大計算次數不超過決策樹的深度。

如何預測

先看看下面的資料表格:

ID

擁有房產(是/否)

婚姻情況(單身,已婚,離婚)

年收入(單位:千元)

無法償還債務(是/否)

1

單身

125

2

已婚

100

3

單身

70

4

已婚

120

5

離婚

95

6

已婚

60

7

離婚

220

8

單身

85

9

已婚

75

10

單身

90

上表根據歷史資料,記錄已有的使用者是否可以償還債務,以及相關的資訊。通過該資料,構建的決策樹如下:

image

比如新來一個使用者:無房產,單身,年收入55K,那麼根據上面的決策樹,可以預測他無法償還債務(藍色

虛線路徑)。從上面的決策樹,還可以知道是否擁有房產可以很大的決定使用者是否可以償還債務,對借貸業務具有指導意義。

基本步驟

決策樹構建的基本步驟如下:

1. 開始,所有記錄看作一個節點

2. 遍歷每個變數的每一種分割方式,找到最好的分割點

3. 分割成兩個節點N1和N2

4. 對N1和N2分別繼續執行2-3步,直到每個節點足夠“純”為止

決策樹的變數可以有兩種:

1) 數字型(Numeric):變數型別是整數或浮點數,如前面例子中的“年收入”。用“>=”,“>”,“<”或“<=”作為分割條件(排序後,利用已有的分割情況,可以優化分割演算法的時間複雜度)。

2) 名稱型(Nominal):類似程式語言中的列舉型別,變數只能重有限的選項中選取,比如前面例子中的“婚姻情況”,只能是“單身”,“已婚”或“離婚”。使用“=”來分割。

如何評估分割點的好壞?如果一個分割點可以將當前的所有節點分為兩類,使得每一類都很“純”,也就是同一類的記錄較多,那麼就是一個好分割點。比如上面的例子,“擁有房產”,可以將記錄分成了兩類,“是”的節點全部都可以償還債務,非常“純”;“否”的節點,可以償還貸款和無法償還貸款的人都有,不是很“純”,但是兩個節點加起來的純度之和與原始節點的純度之差最大,所以按照這種方法分割。構建決策樹採用貪心演算法,只考慮當前純度差最大的情況作為分割點。

量化純度

前面講到,決策樹是根據“純度”來構建的,如何量化純度呢?這裡介紹三種純度計算方法。如果記錄被分為n類,每一類的比例P(i)=第i類的數目/總數目。還是拿上面的例子,10個數據中可以償還債務的記錄比例為P(1) = 7/10 = 0.7,無法償還的為P(2) = 3/10 = 0.3,N = 2。

Gini不純度

image

熵(Entropy)

image

錯誤率

image

上面的三個公式均是值越大,表示越 “不純”,越小表示越“純”。三種公式只需要取一種即可,實踐證明三種公司的選擇對最終分類準確率的影響並不大,一般使用熵公式。

純度差,也稱為資訊增益(Information Gain),公式如下:

image

其中,I代表不純度(也就是上面三個公式的任意一種),K代表分割的節點數,一般K = 2。vj表示子節點中的記錄數目。上面公式實際上就是當前節點的不純度減去子節點不純度的加權平均數,權重由子節點記錄數與當前節點記錄數的比例決定。

停止條件

決策樹的構建過程是一個遞迴的過程,所以需要確定停止條件,否則過程將不會結束。一種最直觀的方式是當每個子節點只有一種型別的記錄時停止,但是這樣往往會使得樹的節點過多,導致過擬合問題(Overfitting)。另一種可行的方法是當前節點中的記錄數低於一個最小的閥值,那麼就停止分割,將max(P(i))對應的分類作為當前葉節點的分類。

過渡擬合

採用上面演算法生成的決策樹在事件中往往會導致過濾擬合。也就是該決策樹對訓練資料可以得到很低的錯誤率,但是運用到測試資料上卻得到非常高的錯誤率。過渡擬合的原因有以下幾點:

  • 噪音資料:訓練資料中存在噪音資料,決策樹的某些節點有噪音資料作為分割標準,導致決策樹無法代表真實資料。
  • 缺少代表性資料:訓練資料沒有包含所有具有代表性的資料,導致某一類資料無法很好的匹配,這一點可以通過觀察混淆矩陣(Confusion Matrix)分析得出。
  • 多重比較(Mulitple Comparition):舉個列子,股票分析師預測股票漲或跌。假設分析師都是靠隨機猜測,也就是他們正確的概率是0.5。每一個人預測10次,那麼預測正確的次數在8次或8次以上的概率為 image,只有5%左右,比較低。但是如果50個分析師,每個人預測10次,選擇至少一個人得到8次或以上的人作為代表,那麼概率為 image,概率十分大,隨著分析師人數的增加,概率無限接近1。但是,選出來的分析師其實是打醬油的,他對未來的預測不能做任何保證。上面這個例子就是多重比較。這一情況和決策樹選取分割點類似,需要在每個變數的每一個值中選取一個作為分割的代表,所以選出一個噪音分割標準的概率是很大的。

優化方案1:修剪枝葉

決策樹過渡擬合往往是因為太過“茂盛”,也就是節點過多,所以需要裁剪(Prune Tree)枝葉。裁剪枝葉的策略對決策樹正確率的影響很大。主要有兩種裁剪策略。

前置裁剪 在構建決策樹的過程時,提前停止。那麼,會將切分節點的條件設定的很苛刻,導致決策樹很短小。結果就是決策樹無法達到最優。實踐證明這中策略無法得到較好的結果。

後置裁剪 決策樹構建好後,然後才開始裁剪。採用兩種方法:1)用單一葉節點代替整個子樹,葉節點的分類採用子樹中最主要的分類;2)將一個字數完全替代另外一顆子樹。後置裁剪有個問題就是計算效率,有些節點計算後就被裁剪了,導致有點浪費。

優化方案2:K-Fold Cross Validation

首先計算出整體的決策樹T,葉節點個數記作N,設i屬於[1,N]。對每個i,使用K-Fold Validataion方法計算決策樹,並裁剪到i個節點,計算錯誤率,最後求出平均錯誤率。這樣可以用具有最小錯誤率對應的i作為最終決策樹的大小,對原始決策樹進行裁剪,得到最優決策樹。

優化方案3:Random Forest

Random Forest是用訓練資料隨機的計算出許多決策樹,形成了一個森林。然後用這個森林對未知資料進行預測,選取投票最多的分類。實踐證明,此演算法的錯誤率得到了經一步的降低。這種方法背後的原理可以用“三個臭皮匠定一個諸葛亮”這句諺語來概括。一顆樹預測正確的概率可能不高,但是集體預測正確的概率卻很高。

準確率估計

決策樹T構建好後,需要估計預測準確率。直觀說明,比如N條測試資料,X預測正確的記錄數,那麼可以估計acc = X/N為T的準確率。但是,這樣不是很科學。因為我們是通過樣本估計的準確率,很有可能存在偏差。所以,比較科學的方法是估計一個準確率的區間,這裡就要用到統計學中的置信區間(Confidence Interval)。

設T的準確率p是一個客觀存在的值,X的概率分佈為X ~ B(N,p),即X遵循概率為p,次數為N的二項分佈(Binomial Distribution),期望E(X) = N*p,方差Var(X) = N*p*(1-p)。由於當N很大時,二項分佈可以近似有正太分佈(Normal Distribution)計算,一般N會很大,所以X ~ N(np,n*p*(1-p))。可以算出,acc = X/N的期望E(acc) = E(X/N) = E(X)/N = p,方差Var(acc) = Var(X/N) = Var(X) / N2 = p*(1-p) / N,所以acc ~ N(p,p*(1-p)/N)。這樣,就可以通過正太分佈的置信區間的計算方式計算執行區間了。

正太分佈的置信區間求解如下:

1) 將acc標準化,即image

2) 選擇置信水平α= 95%,或其他值,這取決於你需要對這個區間有多自信。一般來說,α越大,區間越大。

3) 求出 α/2和1-α/2對應的標準正太分佈的統計量 imageimage (均為常量)。然後解下面關於p的不等式。acc可以有樣本估計得出。即可以得到關於p的執行區間

image

參考資料

[1] 《資料探勘導論》Chapter 4 Classification:Basic Concepts, Decision Trees, and Model Evaluation,Pang-Ning Tan & Micheal Steinbach & Vipin Kumar著

[2] Data Analyis, Lectures in Week 6,7 at Coursera

[3] 《集體智慧程式設計》Chapter 7 Modeling with Decision Tree,Toby Segaran著

[4] 《Head First Statistics》 Chapter 12 置信區間的構造, Dawn Griffiths 著

轉自:http://www.cnblogs.com/bourneli/archive/2013/03/15/2961568.html

相關推薦

決策decision tree分析

本文目的 最近一段時間在Coursera上學習Data Analysis,裡面有個assignment涉及到了決策樹,所以參考了一些決策樹方面的資料,現在將學習過程的筆記整理記錄於此,作為備忘。 演算法原理 決策樹(Decision Tree)是一種簡單但是廣泛使

機器學習入門 - 1. 介紹與決策(decision tree)

recursion machine learning programmming 機器學習(Machine Learning) 介紹與決策樹(Decision Tree)機器學習入門系列 是 個人學習過程中的一些記錄與心得。其主要以要點形式呈現,簡潔明了。1.什麽是機器學習?一個比較概括的理解是:

決策 ( decision tree)詳解

決策樹演算法的基本流程 決策樹顧名思義就是基於樹對問題的決策和判別的過程,是人類在面對決策問題時一種很自然的處理機制,下面有個例子 通過決策樹得出最終的結果。                   &nb

決策(Decision Tree) | 繪製決策

01 起 在這篇文章中,我們講解了如何訓練決策樹,然後我們得到了一個字典巢狀格式的決策樹結果,這個結果不太直觀,不能一眼看著這顆“樹”的形狀、分支、屬性值等,怎麼辦呢? 本文就上文得到的決策樹,給出決策樹繪製函式,讓我們對我們訓練出的決策樹一目瞭然。 在繪製決

決策 (decision tree)

通過訓練,我們可以從樣本中學習到決策樹,作為預測模型來預測其它樣本。兩個問題: 我們說要訓練/學習,訓練/學習什麼? 為什麼決策樹可以用來預測?或者說它的泛化能力的來源是哪? #什麼是決策樹? 一棵“樹”,目的和作用是“決策”。一般來說,每個節點上都儲存了一個切分,輸入資料通過切分繼續訪問子節點,直到葉

決策 Decision Tree 簡介

                決策樹(Decision Tree)及其變種是另一類將輸入空間分成不同的區域,每個區域有獨立引數的演算法。決策樹分類演算法是一種基於例項的歸納學習方法,它能從給定的無序的訓練樣本中,提煉出樹型的分類模型。樹中的每個非葉子節點記錄了使用哪個特徵來進行類別的判斷,每個葉子節點則代表

機器學習方法(四):決策Decision Tree原理與實現技巧

歡迎轉載,轉載請註明:本文出自Bin的專欄blog.csdn.net/xbinworld。 技術交流QQ群:433250724,歡迎對演算法、技術、應用感興趣的同學加入。 前面三篇寫了線性迴歸,lasso,和LARS的一些內容,這篇寫一下決策樹這個經典的分

機器學習---決策decision tree的應用

1.Python 2.Python機器學習的庫:scikit-learn 2.1 特性: 簡單高效的資料探勘和機器學習分析 對所有使用者開放,根據不同需求高度可重用性 基於Numpy,SciPy和matplotlib 開源的,且可達到商用級別,獲

【機器學習演算法-python實現】決策-Decision tree(1) 資訊熵劃分資料集

1.背景          決策書演算法是一種逼近離散數值的分類演算法,思路比較簡單,而且準確率較高。國際權威的學術組織,資料探勘國際會議ICDM (the IEEE International Con

4 決策(Decision Tree)

決策樹是一種基本的分類與迴歸方法 以下內容討論用於分類的決策樹,是由訓練資料集估計條件概率的模型 在學習時,利用訓練資料,根據損失函式最小化的原則建立決策樹,模型 在預測時,對新的資料,利用決策樹模型

演算法雜貨鋪——分類演算法之決策(Decision tree)

http://www.cnblogs.com/leoo2sk/archive/2010/09/19/decision-tree.html 3.1、摘要       在前面兩篇文章中,分別介紹和討論了樸素貝葉斯分類與貝葉斯網路兩種分類演算法。這兩種演算法都以貝葉斯定

機器學習之決策 Decision Tree(三)scikit-learn演算法庫

1、scikit-learn決策樹演算法類庫介紹         scikit-learn決策樹演算法類庫內部實現是使用了調優過的CART樹演算法,既可以做分類,又可以做迴歸。分類決策樹的類對應的是DecisionTreeClassifier,而回歸決策樹的類對應的是D

決策(decision tree)的自我理解 (上)

最近在看周志華的《機器學習》,剛好看完決策樹這一章,因此結合網上的一些參考資料寫一下自己的理解。 何為決策樹? 決策樹是一種常見機器學習方法中的一種分類器。它通過訓練資料構建一種類似於流程圖的樹結構,

分類演算法之決策(Decision tree)

1.1、決策樹引導       通俗來說,決策樹分類的思想類似於找物件。現想象一個女孩的母親要給這個女孩介紹男朋友,於是有了下面的對話:       女兒:多大年紀了?       母親:26。       女兒:長的帥不帥?       母親:挺帥的。       女兒:

OpenCV3.3中決策(Decision Tree)介面簡介及使用

OpenCV 3.3中給出了決策樹Decision Tres演算法的實現,即cv::ml::DTrees類,此類的宣告在include/opencv2/ml.hpp檔案中,實現在modules/ml/src/tree.cpp檔案中。其中:(1)、cv::ml::DTrees類

決策(decision tree)的自我理解 (下) 關於剪枝和連續值缺失值處理

對剪枝的粗淺理解 剪枝分預剪枝和後剪枝,顧名思義,預剪枝就是在樹還沒完成之前,預先剪去樹的部分分支,後剪枝就是在整棵樹完成了之後對樹剪去部分分支,從而完成了對樹的精簡操作,避免了因屬性太多而造成的過擬合。 預剪枝(prepruning):在決策樹生成過程中,對每個結點在劃分

決策decision tree+SVM+knn+隨機森林+高斯貝葉斯

很多分類器的用法都相似的,下面針對一個訓練集(特徵向量+類別) 介紹幾種常用的分類器方法: 資料集的介紹: kaggle 中 泰坦尼克號的資料集,通過某些特徵提取的方法構造成清洗後的資料集,同時按相同的處理方法處理測試集。 七個特徵屬性+一個決策屬性 不同分類器方法的用法: XTrain與Y

機器學習-決策 Decision Tree

咱們正式進入了機器學習的模型的部分,雖然現在最火的的機器學習方面的庫是Tensorflow, 但是這裡還是先簡單介紹一下另一個數據處理方面很火的庫叫做sklearn。其實咱們在前面已經介紹了一點點sklearn,主要是在categorical data encoding那一塊。其實sklearn在資料建模方面

手把手生成決策(dicision tree)

img ever load eight 嘗試 存在 lan 3.6 https 手把手生成決策樹(dicision tree)

sklearn學習7-----決策tree)

imp 分布 nodes 但是 amp 選擇 width .com 開始 1、使用示例 2、樹模型參數:【很多參數都是用來限制樹過於龐大,即擔心其過擬合】 # 1.criterion gini or entropy:用什麽作為衡量標準 ( 熵值或者Gini系數