主頁 >  其他 > 決策樹詳解

決策樹詳解

2020-09-15 15:16:12 其他

一、背景

網上有很多排序演算法的總結,整理的一目了然,惹人喜愛,但關于決策樹的相關博文,普遍存在以下問題

1)歸納程度不足,深度不夠

2)總結點不足,有些疑問找不到答案

3)照抄現有書籍上的公式和推導程序

于是想到自己整理一篇關于決策樹的文章,同時也加深自己的理解

 

二、正文

首先,不說話,直接上圖

 

 

 

 

 

 

在解釋上圖之前,首先宣告,本文盡可能避免公式的羅列(想看的可以翻書或者搜相關博文),盡量用自然語言(人話)去解釋相關的概念,

要理解決策樹之前,要理解如下幾個概念:

1、概率,符號表示為p, p(x)代表隨機事件x發生的概率,比如x代表天氣情況,就有天氣晴朗的概率和下雨的概率

2、資訊量, 符號表示為h,h(x)代表隨機事件x發生這件事包含多少資訊量,h(x) = -logp(x),我們看到概率越小,資訊量越大;舉個例子,我們經常調侃某句話或者某張圖的資訊量有點大,在看這段話或這張圖的時候你腦海中肯定閃過的是各種污污的小概率事件

3、熵,物理和化學中的概念,代表一個系統的混亂程度,熵越大,混亂程度越大,比如水蒸氣的熵>水的熵>冰的熵

4、資訊熵,符號表示為H, H(x)代表各種x所有可能取值的資訊量的期望(可以粗糙地理解為資訊量的平均值,實際為加權平均),,衡量事件x的確定程度,資訊熵越大代表事件的可能性越多,越不確定,比如明天下雨和晴天的概率均為0.5,也就是不確定性最大的情況,這時資訊熵為log2;當明天下雨的概率為1時,確定性最大,資訊熵為0,

 

5、條件熵,即為隨機事件x發生的條件下y事件的資訊熵的期望,,也即表示在已知隨機變數X的條件下隨機變數Y的不確定性的期望,強調的是隨機事件x對隨機事件y的不確定性的影響,比如隨機事件y包括今天下雨或者晴天兩種情況,隨機事件x包括昨天晚上下雨或者晴天的兩天情況;如果昨天晚上下雨,今天下雨的概率會增大,確定性會增加;如果昨晚晴天,今天晴天的概率會增加,確定性也會增加;所以考慮昨晚的天氣情況x時,y的不確定性(條件熵)會減少,

6、資訊增益(互資訊),隨機變數y的資訊熵減去考慮隨機變數x的y的條件熵,即為資訊增益;衡量在考慮隨機變數x的情況下y的不確定性減少的程度,

 

 

7、資訊增益率,資訊增益率的存在意義在于彌補資訊增益的應用缺陷,資訊增益主要用于幫助選擇某個能夠最大程度減少目標變數不確定性的特征(隨機變數),考慮極端情況,當選擇唯一id這種隨機變數時,會導致條件熵為0,資訊增益最大,但這種情況沒有任何泛化意義,所以需要對類似的情況進行懲罰,從而幫助我們做出更合理的選擇,所以 資訊增益率=資訊增益/懲罰項,正好考慮到上述極端情況下我們選擇的隨機變數x的資訊熵最大,所以懲罰項選擇隨機變數x的資訊熵,最后公式為

 

 8、Gini(基尼)指數,從另一個角度衡量隨機變數的不確定性,可以這樣理解,隨機事件x發生的概率為p,然后根據該概率對隨機事件x進行預測,猜錯的可能性為1-p,而對隨機事件x的所有可能的猜錯期望即為基尼指數,即系統越混亂越不確定,猜錯的可能性的期望越高,基尼指數越高,,(也可以理解為隨機抽取兩個樣本,它們屬于不同類別的概率)

 

在詳細說明每種決策樹之前,我覺得有必要去理解一下決策樹是什么

1、編碼角度,決策樹是一系列if-else規則,他能通過一系列決策對樣本進行處理并輸出結果;它和硬編碼一樣可以做到對集合中樣本的不重不漏地處理,而且通過學習演算法得到決策樹,相比人為硬編碼不易出錯,所以我覺得以后開發工程師的基本技術堆疊里不僅要包括資料結構與演算法,還要包括機器學習,

2、概率論角度,決策樹展示了目標變數y在給定特征條件下的條件概率分布

 

在構造決策樹的程序中,主要有三大步驟

1、特征選擇

2、決策樹的生成(包含預剪枝)

3、決策樹的剪枝(后剪枝)

 

下面我們分別針對三種常用的決策樹進行介紹,他們分別為

1、ID3

2、C4.5

3、CART

 

2.1 ID3決策樹

2.1.1 特征選擇

應用場景:分類

依賴指標:資訊熵、條件熵、資訊增益

1、計算待分類樣本的資訊熵

2、計算某個特征條件下的條件熵

3、計算資訊增益,選擇最大資訊增益對應的特征作為當前劃分依據

4、對子節點,遞回進行特征選擇,待選擇特征集去除了上一步已選擇過的特征,即某個特征在從根到某個葉子結點的路徑上不會重復出現

 

2.1.2 決策樹的生成

輸入:訓練資料集D, 特征集A,閾值e,決策樹的最大深度n,作為葉子結點要小于的樣本數量m

輸出:決策樹T

1)若D中所有實體屬于同一類,則T為單結點樹,并將該類作為該結點的類標記,回傳T

2)若A為空集,則T為單結點樹,并將D中實體樹最大的類作為該結點的類標記,回傳T

3)否則,計算A中各特征對D的資訊增益,選擇資訊增益最大的特征Ag

4)(預剪枝)如果Ag的資訊增益小于閾值e,則置T為單結點樹,并將D中實體樹最大的類作為該結點的類標記,回傳T

5)否則,對Ag的每一可能取值ai, 依Ag=ai將D分割為若干非空子集Di,將Di中實體樹最大的類作為標記,構建子結點,由結點及其子結點構成樹T, 回傳T

6)對第i個子結點,以Di為訓練集,以A-{Ag}為特征集,遞回地呼叫(1)~(5)步,如果子結點的深度等于n或者子結點的樣本數量小于m,則將該子結點作為葉子結點,停止遞回呼叫,得到子樹Ti,回傳Ti

 

2.1.3 決策樹的剪枝

決策樹的生成是采用啟發式演算法(類似貪婪演算法),每一步做出最優選擇,實作的是區域最優,結果就是容易過擬合,因為模型記住了很多訓練資料集特有的細節,這些細節會降低模型泛化的能力

決策樹的剪枝采用的是最優化演算法,明確整棵決策樹(全域)的損失函式或代價函式(損失函式+結構風險正則化)進行迭代優化

 代價函式如下:

 

 

 其中t代表某個葉子結點,Nt表示該葉子結點對應的樣本數量,Ht表示該結點的經驗熵(資訊熵),|T|表示模型的復雜度,α控制正則化的強度

這里的Nt可以理解為權重,畢竟如果兩個葉子結點的經驗熵相同,包含子結點數量更多的那個結點對總體混亂程度的貢獻更大,

輸入:生成演算法產生的決策樹T,正則化引數α

輸出:修剪后的子樹Tα

1)計算每個結點的經驗熵

2)遞回地從樹的葉節點向上回縮

3)如果回縮后的損失函式小于等于回縮前的,則進行剪枝

4)回傳第二步呼叫,知道不能繼續為止,得到剪枝后的決策樹

 

2.2 C4.5決策樹

C4.5樹是基于ID3樹的改進,具體表現為兩點

1)特征選擇不僅使用資訊增益,而且還考慮資訊增益率,具體原因請看文章開頭關于資訊增益和資訊增益率的介紹(很多資料單純地說用資訊增益率替代了資訊增益,這是不準確的)

2)增加了對連續變數(特征)的支持(這一點很多資料沒有講,尤其是沒有講如何處理連續變數)

下面我們就講一下C4.5決策樹對特征的處理

1)對于離散特征(分類或者順序特征),該決策樹采用N叉樹的方式,對于每一個特征取值分出一個子結點,和ID3處理方式相同

2)對于連續型特征,采用二分法,

  1、首先將樣本按照該特征大小進行排序

  2、每兩個相鄰特征值取平均值,將該平均值作為分裂點進行樣本劃分

  3、計算每種劃分所對應的資訊增益,選取資訊增益最大的分裂點作為最終二分的分裂點

  4、計算所有特征的資訊增益率和資訊增益,先選取資訊增益高于平均值的特征,再選取資訊增益率最大的特征作為當前劃分依據

3)劃分后的樣本不再保留其原有值,而用布林值代替,

這里有兩個問題需要解釋:

Q1:為什么連續特征的最佳分裂點選取使用資訊增益而非資訊增益率?

因為同一個特征下,最終的結果確定是二分,這種相對的比較,也就不存在資訊增益自身的缺陷(傾向于選擇情況更多的特征,現在情況只有兩種)

Q2:為什么最佳特征的選擇先考慮資訊增益再考慮資訊增益率?

首先,資訊增益傾向于選擇可取值數量較多的變數,資訊增益率傾向于選擇可取值數較少的變數(有點兒矯枉過正),所以采用啟發式演算法,先選取資訊增益高于平均值的特征,再選取資訊增益率最大的特征作為當前劃分依據

 

2.3 CART樹(分類樹)

2.3.1 特征選擇

使用最小化基尼指數,具體來講,

1)對所有特征的所有可能切分點進行基尼指數計算

2)選擇基尼指數最小的特征+切分點組合

 

2.3.2 決策樹的生成

輸入:訓練資料集D,停止計算的條件(預剪枝條件,參考ID3決策樹)

輸出:CART決策樹

根據訓練資料集,從根節點開始,遞回地對每個結點進行以下操作:

1)設結點的訓練資料集為D,計算現有特征對該資料集的基尼指數,此時,對每一個特征A,對其可能取的每個值a(對于大量連續變數計算代價過高,可以選擇分類發生變化的點),根據樣本點對A=a的測驗為‘是’或‘否’,將D分割成D1和D2兩部分,根據計算A=a時的基尼指數,

 

2)在所有可能的特征A以及他們所有可能的切分點a中,選擇基尼指數最小的特征及其對應的切分點作為最優特征與最優切分點,依最優特征與最優切分點,從現結點生成兩個子結點,將訓練資料集依特征分配到兩個子結點中去,

3)對兩個子結點遞回地呼叫(1)(2),直至滿足停止條件

4)生成決策樹

 

2.3.3 決策樹的剪枝

CART的剪枝這里不詳細講解了,總體而言就兩個程序

1)根據生成的完整決策樹,計算每個內部結點對應的損失函式增加量,然后砍去損失函式增加最多的結點,生成新樹

2)對新樹遞回呼叫第一步,生成更多的新樹,構成樹集合

3)通過驗證集選擇最佳的決策樹

上圖

 

注意第六步中應該回傳步驟3,這是一個錯誤,該圖片摘自李航的《統計學習方法》

 

2.4 CART樹(回歸樹)

2.4.1 特征選擇

根據平方誤差最小化準則

1)對每個特征進行排序,依次選擇不同的切分點對樣本進行切分

2)計算切分后子結點中樣本的值與與樣本均值的平方誤差和,選擇平方誤差和最小的切分點和左右子結點平方誤差和最小的特征

3)對子結點遞回進行1、2步

2.4.2 決策樹生成

 

 

2.4.3 決策樹的剪枝

和CART(分類樹)的剪枝幾乎相同,不同點在于損失函式由基尼指數變為了最小二乘,

 

3、補充

1、關于決策樹的具體輸出結果問題

A:拿sklearn關于決策樹的API來講,對于分類樹,既可以用predict()方法直接獲得分類的結果,也可以用predict_prob()獲得樣本屬于某個類別的概率

2、關于整個預測流程是怎樣的?

A:首先通過訓練資料集訓練出了決策樹,包括決策樹的結構和結點,且根據訓練樣本分配到每個葉子結點的數量計算出了每個葉子結點對應的所屬類別的概率(好多資料只提到了葉子結點對應了該節點所屬類別最多的樣本對應的類別),然后待預測樣本只需要根據所訓練出的決策樹走到決策樹的某個葉子結點,輸出該結點早就計算好的分類類別或者某個類別的概率即可(回歸樹則輸出該結點對應訓練樣本的平均值),

3、關于特征值復用的問題

周志華的《機器學習》一書中講到連續特征可以復用,但沒有對此作出解釋,我的推測為,因為連續特征的可選擇切分點會有n個(大于1)情況,所以一個連續特征被使用一次之后(選擇了某個切分點),他所包含的資訊并沒有被完全利用,仍有潛在的價值(其他切分點的資訊可能對接下來的訓練你有所貢獻),據此,我也推測CART不僅對連續特征可以復用,針對離散特征(可能的切分情況大于1時),特征也可以復用,

4、關于樣本缺失值處理的問題

具體來講是兩個子問題

4.1:對于某個特征a,如何選擇a的切分點?

A:計算時只考慮a不為空的樣本

4.2:在特征a處,如果某個樣本的特征a為空,如何對樣本進行劃分?

A:將樣本同時劃入所有子結點,但要包含權重,權重值為所劃入結點的樣本所占父結點樣本的比例*樣本的權重(一般情況下所有樣本的權重初始化相等)

Finished!

感徑訓是沒有做到通俗易懂啊,,,little sad

 

 

參考資料:

1、李航-統計學習方法

2、葫蘆娃-百面機器學習

3、周志華-機器學習

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/47701.html

標籤:其他

上一篇:基于深度推理、自編程、大資料的通用人工智能

下一篇:模擬退火演算法(Simulate Anneal,SA)

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more