《機器學習by周志華》學習筆記-決策樹-01

本書中的「決策樹」有時指學習方法,有時指學得的樹。

1、基本流程

1.1、概念

基本流程,亦稱「判定樹」

決策樹(decision tree),是一種常見的機器學習方法。以二分類任務為例,我們希望從給定訓練數據集學得一個模型,用以對新樣例進行分離。

以二分類任務為例,可看作對「當前樣本屬于正類嗎」這個問題的「決策」或「判定」過程。

1.2、目的

是為了產生一棵泛化能力強,即處理未見示例能力強的決策樹。

1.3、基本流程

顧名思義,決策樹是基于樹結構來進行決策的,這恰是人類在面臨決策問題時一種很自然的處理機制。

例如,我們要對「這是好瓜嗎」這樣的問題進行決策時,通常會進行一系列的子判斷或自決策,例如:

  • 他是什么顏色?>>青綠色
  •         它的根蒂是什么形態?>>蜷縮
  •                 它敲起來是什么聲音?>>**
  •                         這是好瓜嗎?>>好瓜

如下圖所示:

顯然,決策過程的最終結論對應了我們所希望的判定結果。例如:「是」或「不是」好瓜。

每個判定問題都是對某個屬性的「測試」。例如:他是什么顏色?、它的根蒂是什么形態?

每個「測試結果」或是「導出最終結論」或是「導出進一步的判斷問題」,其考慮范圍是在上次決策結果的限定范圍之內。例如:他是什么顏色?>>青綠色>>>它的根蒂是什么形態?

一般的,一顆決策樹包含:

  • 一個根節點:包含樣本全集
  • 若干個內部節點:對應一個屬性測試
  • 若干個葉節點:對應決策結果

每個結點包含的樣本集合根據屬性測試的結果被劃分到子結點中;從「根節點」到「每個葉節點」的路徑對應了一個判定測試序列。

其基本流程遵循簡單且直觀的「分而治之(divide-and-conquer)」策略。如下所示:

   輸入  

  • 訓練集D=\left \{ (x_{1},y_{1}),(x_{2},y_{2}),...,(x_{m},y_{m}) \right \}
  • 離散屬性集A=\left \{ A_{1},A_{2},...A_{n} \right \}
  • 每個屬性對應屬性值的樣本個數為a_{i}^{1},a_{i}^{2},...,a_{i}^{V},其中最大樣本個數用a_{i}^{max}表示

   過程  

  • 創建函數TreeGenerate(D,A_{i})
  • 創建節點node
  • if(D中樣本全屬于同一類別A_{i}
  •         thennode=A_{i}且為葉節點)
  •         return 情形(1)
  •  end if
  • ifA=\varnothing或任意樣本類別個數a_{i}^{j}=a_{i}^{max}
  •         thennode為葉節點且標記為D中樣本數量最多的類a_{i}^{max}
  •         return 情形(2)
  •  end if
  • A中選擇最優劃分屬性A_{i}//最優劃分屬性將在下面「2、劃分選擇」說明
  • for  (A_{i}的每一個屬性值用A_{i}^{v}表示)
  •         do(為node生成分支,令D_{i}^{v}表示D中在A_{i}上取值為A_{i}^{v}的樣本子集)
  •                 ifD_{i}^{v}=\varnothing
  •                         then(分支節點=葉節點,類別為D中樣本數量最多的類a_{i}^{max}
  •                         return 情形(3)
  •                         else(分支節點=TreeGenerate(D_{i}^{v},A\setminus \left \{ A_{i}^{v} \right \})
  •                 end if
  • end for

   輸出  

  • 以node為根節點的一棵決策樹

顯然,決策樹的生成是一個遞歸過程。

在決策樹基本算法中,有3種情形會導致遞歸返回:

  • 情形(1):當前結點包含的樣本屬于同一類別,無需劃分。
  • 情形(2):當前屬性集為空,或是所有樣本在所有屬性上取值相同,無法劃分。
  • 情形(3):當前結點包含的樣本集合為空,不能劃分。

在(2)情形下,我們把當前結點標記為葉節點,并將其類別設定為該結點所含樣本最多的類別;

在(3)情形下,同樣吧當前結點標記為葉節點,但將其類別設定為其父節點所含樣本最多的類別。

注意這兩種情形的處理實質不同:

  • 情形(2)是在利用當前結點的后驗分布。
  • 情形(3)是把父節點的樣本分布作為當前結點的先驗分布。

2、劃分選擇

從上面的決策樹「輸入-過程-輸出」的環節中我們可以知道,其中最重要也是需要研究的部分就是——最優劃分屬性。

本章主要的內容則是介紹了讓「劃分選擇」最優的方法:

隨著劃分過程不斷進行,我們希望決策樹的分支節點所包含的樣本盡可能屬于同一類別。即節點的「純度(Purity)」越來越高。

下面我們會介紹一些度量樣本集合「純度(Purity)」比較常用的指標,通過這些指標可以增加樣本「純度」,從而使「劃分選擇」更優。

2.1、信息增益

2.1.1、信息熵(Information Entropy)

「信息熵」是度量樣本「純度」最常用的一種指標。

假設當前樣本集:D=\left \{ \left ( x_{1},y_{1} \right ), \left ( x_{2},y_{2} \right ),..., \left ( x_{m},y_{m} \right ) \right \}的類別集合用Y表示:

Y=\left \{ Y_{1},Y_{2},...,Y_{k} \right \}

其中第Y_{j}(Y_{j}\in Y)類樣本個數為y_{j}(1\leq y_{j}\leq m)\sum_{j=1}^{k}y_{j}=m,其所占比例用P_{j}(j=1,2,...,k)表示,則:

P_{j}=\frac{y_{j}}{m}

其離散屬性集合用A表示:

A=\left \{ A_{1},A_{2},...,A_{n} \right \}  ,其中任意離散屬性用A_{i}(A_{i}\in A)

則樣本集D的「信息熵」定義為:

Ent(D)=-\sum_{j=1}^{k}P_{j}\times log_{2}^{P_{j}}

由于0< P_{j}\leq 1\sum_{j=1}^{k}P_{j}=1所以:

0< Ent(D)\leq \sum_{j=1}^{k}log_{2}^{P_{j}}Ent(D)越小,樣本D的「純度」越高。

2.1.2、信息增益(Information Gain)

假設離散屬性A_{i}有V個可能的取值,分別用\left \{ A_i^{1},A_i^{2},...,A_i^{V} \right \}表示。若使用A_{i}來對樣本集D進行劃分,則會產生V個分支節點。其中第v個分支節點A_i^{v}包含了D中所有在屬性A_{i}上取值為A_i^{v}的樣本,該樣本集合記為D_{i}^{v}(數據為i類別v值的樣本集合)且其對應的樣本數用a_{i}^{v}表示,則樣本集合D_{i}^{v}的信息熵:

Ent(D_{i}^{v})=-\sum_{j=1}^{k}P_{j}\times log_{2}^{P_{j}}

考慮到不同分支節點所包含的樣本數a_{i}^{v}不同,給分支結點賦予權重的規則定為:樣本數越多的分支節點,影響越大。即a_{i}^{v}越大,影響越大。所以權重表示為:

g=\frac{\left | D_{i}^{v} \right |}{\left | D \right |}=\frac{a_{i}^{v}}{m}

則用屬性A_{i}對樣本D進行劃分所獲得的「信息增益(Information Gain)」為:

Gain(D,A_{i})=Ent(D)-\sum_{v=1}^{V}\frac{|D_{i}^{v}|}{|D|}Ent(D_{i}^{v})  

一般來說,信息增益Gain(D,A_{i})越大,則意味著使用屬性A_{i}來進行劃分數據集D獲的的「純度」越大。因此我們可以用信息增益來進行決策樹的「劃分屬性選擇」。也就是上面算法的屬性選擇。

f(A_{i})=\underset{A_{i}\in A}{argmax}Gain(D,A_{i})

上個式子就是求集合A=\left \{ A_{1},A_{2},...,A_{n} \right \}中所有類別的「信息增益」最大的屬性公式。

較為著名的就是ID3(Iterative Dichotomiser,迭代二分器)決策樹學習算法就是以「信息增益」為準則來選擇劃分屬性。

案例:給出數據集D如下表(綠色文字是好瓜Y1,紅色文字是壞瓜Y2)

西瓜數據集D
編號色澤(A1)根蒂(A2)敲聲(A3)紋理(A4)臍部(A5)觸感(A6)是否好瓜(Y)
x1青綠A_{1}^{1}蜷縮A_{2}^{1}渾濁A_{3}^{1}清晰A_{4}^{1}凹陷A_{5}^{1}硬滑A_{6}^{1}是Y1
x2烏黑A_{1}^{2}蜷縮A_{2}^{1}沉悶A_{3}^{2}清晰A_{4}^{1}凹陷A_{5}^{1}硬滑A_{6}^{1}是Y1
x3烏黑A_{1}^{2}蜷縮A_{2}^{1}渾濁A_{3}^{1}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/10009.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/10009.shtml
英文地址,請注明出處:http://en.pswp.cn/web/10009.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

一圖看懂 | 藍卓煤炭行業解決方案

煤炭是我國能源保障的“壓艙石,也是國民經濟中重要的支柱產業之一無論是發電、建材、造紙、冶金、化工等工業領域都離不開煤炭近年來&#xff0c;在“雙碳”及能源安全雙重背景下推動智能化技術與煤炭產業的融合發展提升煤礦安全生產能力的重要性與日俱增智慧礦山的建設已逐漸成…

CentOS 7安裝配置docker

CentOS 7、8安裝、配置docker 這里宿主機的型號選擇是centos7.9.2009的版本 1.宿主機關閉防火墻和selinux&#xff0c;配置ipv4 #設置SELinuxdisabled vim /etc/selinux/config SELinuxdisabled 查看防火墻狀態&#xff1a;firewall-cmd --state 關閉防火墻&#xff1a;syst…

selenium爬取TapTap評論

上一篇寫的beautifulsoup和request爬取出的結果有誤。首先&#xff0c;TapTap網頁以JS格式解析&#xff0c;且評論并沒有“下一頁”&#xff0c;而是每次加載到底部就要進行等待重新加載。我們需要做的&#xff0c;是模仿瀏覽器的行為&#xff0c;所以這里我們用Selenium的方式…

2024年數維杯B題完整代碼和思路論文講解與分析

2024數維杯數學建模完整代碼和成品論文已更新&#xff0c;獲取↓↓↓↓↓ https://www.yuque.com/u42168770/qv6z0d/bgic2nbxs2h41pvt?singleDoc# 2024數維杯數學建模B題45頁論文和代碼已完成&#xff0c;代碼為全部問題的代碼 論文包括摘要、問題重述、問題分析、模型假設、…

【項目實戰】使用Github pages、Hexo如何10分鐘內快速生成個人博客網站

文章目錄 一.準備工作1.安裝git2.安裝node安裝 cnpm 3.使用 GitHub 創建倉庫&#xff0c;并配置 GitHub Pages0.Github Pages是什么1. 在 GitHub 上創建一個新倉庫2. 創建您的靜態網站3. 啟用 GitHub Pages4. 等待構建完成5. 訪問您的網站 二. Hexo1.什么是Hexo2.安裝Hexo1. 安…

【MySQL】求和查詢,目標值int,但空數據時返回null的問題(Java)

問題分析 int selectDeviceMonthRepairCount(String deviceType, String month);<select id"selectDeviceMonthRepairCount" resultType"int">SELECT SUM(repair_count)FROM warranty_recordsWHERE device_type #{deviceType}AND nian_yue #{month…

【代碼筆記】高并發場景下問題解決思路

高并發指的是在單位時間內&#xff0c;瞬時流量激增&#xff0c;系統需要同時處理大量并行的請求或操作。這種情況通常出現在面向大量用戶或服務的分布式系統中&#xff0c;尤其是當用戶請求高度集中時&#xff0c;比如促銷活動、秒殺活動、注冊搶課、熱點事件、定時任務調度等…

Maven 插件使用

1.spring-boot-maven-plugin 我們直接使用 maven package &#xff08;maven自帶的package打包功能&#xff09;&#xff0c;打包Jar包的時候&#xff0c;不會將該項目所依賴的Jar包一起打進去&#xff0c;在使用java -jar命令啟動項目時會報錯&#xff0c;項目無法正常啟動。…

開源相機管理庫Aravis例程學習(七)——chunk-parser

開源相機管理庫Aravis例程學習&#xff08;七&#xff09;——chunk-parser 簡介例程代碼函數說明arv_camera_create_chunk_parserarv_camera_set_chunksarv_chunk_parser_get_integer_value 簡介 本文針對官方例程中的&#xff1a;05-chunk-parser做簡單的講解。并介紹其中調…

kali linux更新卡在libc6:amd64 (2.37-15)

適配于linux的windows子系統&#xff0c;wsl2&#xff0c;安裝kali linux&#xff0c;運行 sudo apt update 卡在&#xff1a;Setting up libc6:amd64 (2.37-15) … 關機重啟、重新修復執行也不行 解決辦法&#xff1a;kill當前apt進程或者關機重啟kali-linux&#xff0c;然…

【系統架構師】-選擇題(十二)計算機網絡

1、網閘的作用&#xff1a;實現內網與互聯網通信&#xff0c;但內網與互聯網不是直連的 2、管理距離是指一種路由協議的路由可信度。15表示該路由信息比較可靠 管理距離越小&#xff0c;它的優先級就越高&#xff0c;也就是可信度越高。 0是最可信賴的&#xff0c;而255則意味…

MySQL變量的定義與使用(一)

一、標識符的命名規范 1、不能以數字開頭 2、不能使用關鍵字 3、只能使用_和$符號&#xff0c;不允許使用其他符號 二、定義MySQL變量的方法 set userName"鵝卵石"; #讀取變量 select userName as 名稱; #讀取時包含賦值操作 select userName:喜羊羊 as 賦值查詢名…

【JavaScript】內置對象 - 數組對象 ① ( 數組簡介 | 數組創建 | 數組類型檢測 )

文章目錄 一、數組對象1、數組簡介2、數組創建3、數組檢測 - Array.isArray() 方法4、數組檢測 - instanceof 運算符 Array 數組對象參考文檔 : https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array 一、數組對象 1、數組簡介 在 JavaScr…

(三十八)第 6 章 樹和二叉樹(二叉樹的二叉線索存儲)

1. 背景說明 2. 示例代碼 1) errorRecord.h // 記錄錯誤宏定義頭文件#ifndef ERROR_RECORD_H #define ERROR_RECORD_H#include <stdio.h> #include <string.h> #include <stdint.h>// 從文件路徑中提取文件名 #define FILE_NAME(X) strrchr(X, \\) ? strrc…

Html生成自定義函數的圖形(2024/5/10)

大概效果如下&#xff1a; 可以自定義函數和x的定義域。 我們可以使用數學表達式解析庫來解析用戶輸入的函數方程&#xff0c;并根據給定的 x 區間計算函數的值&#xff0c;然后使用圖表庫繪制圖形。 在這里&#xff0c;我將使用 math.js 庫來解析數學表達式&#xff0c;并使…

探索計算之美:HTML CSS 計算器案例

本次案例是通過HTML和CSS&#xff0c;我們可以為計算器賦予獨特的外觀和功能&#xff1b; 在這個計算器中&#xff0c;你將會發現&#xff1a; 簡潔清晰的界面設計&#xff0c;使用戶能夠輕松輸入和查看計算結果。利用HTML構建的結構&#xff0c;確保頁面具有良好的可訪問性和…

【全開源】JAVA上門家政服務系統源碼微信小程序+微信公眾號+APP+H5

功能介紹 用戶端&#xff1a;精準分類、支持家政、維修、萬能服務、一口價、報價、線上、各類家政服務、優惠專區、師傅入駐、商家入駐、我的需求、補費明細、我的投訴 師傅端&#xff1a;接單池、消息通知、接單管理、今日訂單、師傅入駐、我的錢包、實名認證 商家端&#…

HTTPS 原理和 TLS 握手機制

HTTPS的概述與重要性 在當今數字化時代&#xff0c;網絡安全問題日益凸顯&#xff0c;數據在傳輸過程中的安全性備受關注。HTTPS 作為一種重要的網絡通信協議&#xff0c;為數據的傳輸提供了強有力的安全保障。它是在 HTTP 的基礎上發展而來&#xff0c;通過引入數據加密機制&a…

流量分析(一)

數據庫類流量分析 MySQL流量 常規操作&#xff0c;查找flag ctfhub{} 注意要選擇字符集 Redis流量 查找ctfhub結果沒找到 嘗試把其變成十六進制繼續進行查找 看到了前半段flag 接著往下看 找到了后半段的flag MongoDB流量 還是一樣查找ctfhub 字符串沒找到 轉成十六進制也沒…

c 在線教育系統論文,在線教育需要在哪些渠道做付費推廣呢?

隨著在網上學習的人越來越多&#xff0c;很多在線教育公司都開發了屬于自己的平臺。如果只做開發&#xff0c;不去做運營推廣的話&#xff0c;這個在線平臺就等于是白做了。那么在線教育需要在哪些渠道做付費推廣呢? 1、官網廣告推薦位 Banner作為一款展示型頁面橫幅廣告&…