決策樹的原理與構建--圍繞一個例項展開
1. 什麼是決策樹:
決策樹是一種預測模型,用來進行分類,是一種有監督學習。樹中每個節點表示某個物件,而每個分叉路徑則代表的某個可能的屬性值,而每個葉結點則對應從根節點到該葉節點所經歷的路徑所表示的物件的值
2 決策樹例項(圍繞一個例子)
問題1. 基於表1中給出的訓練集,給出分別使用極小熵和極大熵選擇擴充套件屬性所生成的兩棵決策樹。然後給出你對樹的“大小”的理解,並按你的理解比較兩種方法生成的決策樹大小。
問題1. 基於表1中給出的訓練集,給出分別使用極小熵和極大熵選擇擴充套件屬性所生成的兩棵決策樹。然後給出你對樹的“大小”的理解,並按你的理解比較兩種方法生成的決策樹大小。
(1) 極小熵生成決策樹,設表1給的資料集為D,根據最大資訊增益選擇最優特徵生成極小熵決策樹,計算各特徵A1、A2、A3、A4、A5對資料D的資訊增益,統計結果為
class=1 |
class=2 |
||||
D |
8 |
7 |
H(D)= 0.9968 |
||
A1 |
D1 |
8 |
2 |
6 |
g(D,A1)=0.2880 |
D2 |
7 |
6 |
1 |
||
A2 |
D1 |
5 |
4 |
1 |
g(D,A2)=0.1398 |
D2 |
4 |
1 |
3 |
||
D3 |
6 |
3 |
3 |
||
A3 |
D1 |
3 |
1 |
2 |
g(D,A3)=0.0292 |
D2 |
12 |
7 |
5 |
||
A4 |
D1 |
7 |
6 |
1 |
g(D,A4)=0.2880 |
D2 |
8 |
2 |
6 |
||
A5 |
D1 |
6 |
5 |
1 |
g(D,A5)=0.4131 |
D2 |
4 |
0 |
4 |
||
D3 |
5 |
3 |
2 |
上表中的D1和D2,D3分別表示在各個特徵中取值為1、2和3的樣本子集,根據計算後統計在表格中的資料可得:
H(D)=-8/15*log2(8/15)—7/15*log2(7/15)=0.9968
g(D,A1)=H(D)-[8/15*H(D1)+7/15*H(D2)]=0.2880
g(D,A2)=H(D)-[5/15*H(D1)+4/15*H(D2)+6/15*H(D3)]=0.1398
g(D,A3)=H(D)-[3/15*H(D1)+12/15*H(D2)]=0.0292
g(D,A4)=H(D)-[7/15*H(D1)+8/15*H(D2)]=0.2880
g(D,A5)=H(D)-[6/15*H(D1)+4/15*H(D2)+5/15*H(D3)]=0.4131
根據上面的計算結果,特徵A5的資訊增益最大,所以選擇A5為根節點。根據A5的取值將樣本分成3個結合,S1={2,3,6,8,12,13},S2={1,5,7,14},S3={4,9,10,11,15}其中集合S2已全部屬於同一個類,不需要再分,已成為葉子節點。對於集合S1,計算統計結果為:
class=1 |
class=2 |
||||
D |
5 |
1 |
H(D)=0.6500 |
||
A1 |
D1 |
1 |
1 |
0 |
G(D,A1)=0.0484 |
D2 |
5 |
4 |
1 |
||
A2 |
D1 |
3 |
2 |
1 |
G(D,A2)=0.1909 |
D2 |
1 |
1 |
0 |
||
D3 |
2 |
2 |
0 |
||
A3 |
D1 |
1 |
1 |
0 |
G(D,A3)=0.0484 |
D2 |
5 |
4 |
1 |
||
A4 |
D1 |
5 |
5 |
0 |
G(D,A4)=0.6500 |
D2 |
1 |
0 |
1 |
H(D)=0.6500 g(D,A1)= 0.0484 g(D,A2)= 0.1909 g(D,A3)= 0.0484 g(D,A4)=0.6500
根據計算結果,集合S1選擇A4為根結點。根據A4的取值,將S1集合劃分為S11={3,6,8,12,13} S12={2},集合S11和集合S12已成為葉節點。對於集合S3,計算統計結果為:
class 1 |
class 2 |
||||
D |
3 |
2 |
H(D)=0.9710 |
||
A1 |
D1 |
3 |
1 |
2 |
G(D,A1)=0.4200 |
D2 |
2 |
2 |
0 |
||
A2 |
D1 |
2 |
2 |
0 |
G(D,A2)=0.5710 |
D2 |
1 |
1 |
0 |
||
D3 |
2 |
1 |
1 |
||
A3 |
D1 |
0 |
0 |
0 |
G(D,A3)=0 |
D2 |
5 |
3 |
2 |
||
A4 |
D1 |
2 |
1 |
1 |
G(D,A4)=0.0200 |
D2 |
3 |
2 |
1 |
H(D)=0.9710 g(D,A1)=0.4200 g(D,A2)=0.5710 g(D,A3)=0 g(D,A4)=0.0200
根據計算結果,所以集合S3選擇A2作為根結點,根據A2的取值將S3分成集合S31={4,11}集合S32={9}集合S33={10,15} 集合S32和集合S32已為葉子節點。對於集合S33,計算統計結果為
class 1 |
class 2 |
||||
D |
1 |
1 |
H(D)=1 |
||
A1 |
D1 |
1 |
0 |
1 |
G(D,A1)=1 |
D2 |
1 |
1 |
0 |
||
A3 |
D1 |
0 |
0 |
0 |
G(D,A3)=0 |
D2 |
2 |
1 |
1 |
||
A4 |
D1 |
2 |
1 |
1 |
G(D,A4)=0 |
D2 |
0 |
0 |
0 |
H(D)=1 g(D,A1)=1 g(D,A3)=0 g(D,A4)=0
所以選擇A1作為集合S33的根節點。根據A1的取值劃分後的集合也都為葉子節點,至此極小熵決策樹就建立起來了,如下圖所示。
(2) 極大熵生成決策樹,同上面的極小熵建立決策樹類似,設表1中資料集為D。根據資訊增益最小選擇特徵建立決策樹。計算各特徵A1、A2、A3、A4、A5對資料D的資訊增益,統計結果為
class=1 |
class=2 |
||||
D |
8 |
7 |
H(D)= 0.9968 |
||
A1 |
D1 |
8 |
2 |
6 |
G(D,A1)= 0.2880 |
D2 |
7 |
6 |
1 |
||
A2 |
D1 |
5 |
4 |
1 |
G(D,A2)=0.1398 |
D2 |
4 |
1 |
3 |
||
D3 |
6 |
3 |
3 |
||
A3 |
D1 |
3 |
1 |
2 |
G(D,A3)= 0.0292 |
D2 |
12 |
7 |
5 |
||
A4 |
D1 |
7 |
6 |
1 |
G(D,A4)= 0.2880 |
D2 |
8 |
2 |
6 |
||
A5 |
D1 |
6 |
5 |
1 |
G(D,A5)=0.4131 |
D2 |
4 |
0 |
4 |
||
D3 |
5 |
3 |
2 |
H(D)=0.9968g(D,A1)=0.2880 g(D,A2)=0.1398 g(D,A3)=0.0292 g(D,A4)=0.2880 g(D,A5)=0.4131
根據上面計算結果,選擇最小增益A3作為根結果。根據A3的取值,將集合劃分S1={5,8,14},S2={1,2,3,4,6,7,9,10,11,12,13,15}.對於集合S1,計算統計結果為
class=1 |
class=2 |
||||
D |
1 |
2 |
H(D)=0.9183 |
||
A1 |
D1 |
2 |
0 |
2 |
G(D,A1)=0.9183 |
D2 |
1 |
1 |
0 |
||
A2 |
D1 |
1 |
1 |
0 |
G(D,A2)=0.9183 |
D2 |
1 |
0 |
1 |
||
D3 |
1 |
0 |
1 |
||
A4 |
D1 |
1 |
1 |
0 |
G(D,A4)= 0.9183 |
D2 |
2 |
0 |
2 |
||
A5 |
D1 |
1 |
1 |
0 |
G(D,A5)=0.9183 |
D2 |
2 |
0 |
2 |
||
D3 |
0 |
0 |
0 |
H(D)=0.9183 g(D,A1)=0.9183 g(D,A2)=0.9183 g(D,A4)=0.9183 g(D,A5)=0.9183
根據計算結果,選擇A1或A2或A4或A5都可以作為集合S1的根節點,這裡不妨選擇A1作為根節點,根據A1的取值將S1劃分成S11={5,14} ,S12={8},此時S11和S12已經為葉節點不需要在劃分。
對於集合S2,計算統計結果為
class=1 |
class=2 |
||||
D |
7 |
5 |
H(D)=0.9799 |
||
A1 |
D1 |
6 |
2 |
4 |
G(D,A1)= 0.1957 |
D2 |
6 |
5 |
1 |
||
A2 |
D1 |
4 |
3 |
1 |
G(D,A2)=0.0753 |
D2 |
3 |
1 |
2 |
||
D3 |
5 |
3 |
2 |
||
A4 |
D1 |
6 |
5 |
1 |
G(D,A4)=0.1957 |
D2 |
6 |
2 |
4 |
||
A5 |
D1 |
5 |
4 |
1 |
G(D,A5)= 0.2745 |
D2 |
2 |
0 |
2 |
||
D3 |
5 |
3 |
2 |
H(D)=0.9799 g(D,A1)=0.1957 g(D,A2)=0.0753 g(D,A4)=0.1957 g(D,A5)=0.2745
根據計算結果,選擇A2作為集合S2的根節點,根據A2的取值將集合S2劃分為S21={2,4,6,11},S22={7,9,12},S23={1,3,10,13,15},對於集合S21,計算統計結果為
class=1 |
class=2 |
||||
D |
3 |
1 |
H(D)=0.8113 |
||
A1 |
D1 |
1 |
1 |
0 |
G(D,A1)=0.1226 |
D2 |
3 |
2 |
1 |
||
A4 |
D1 |
1 |
1 |
0 |
G(D,A4)=0.1226 |
D2 |
3 |
2 |
1 |
||
A5 |
D1 |
2 |
1 |
1 |
G(D,A5)=0.3113 |
D2 |
0 |
0 |
0 |
||
D3 |
2 |
2 |
0 |
H(D)=0.8113 g(D,A1)=0.1226 g(D,A4)=0.1226 g(D,A5)=0.3113
根據計算結果,選擇A1和A4作為S21的根節點都可以,這裡不妨選A1為S21的根節點。根據A1的取值將S21劃分為S211={11},S212={2,4,6},其中S211已為葉節點。對於集合S212,計算統計結果為
class=1 |
class=2 |
||||
D |
2 |
1 |
H(D)=0.9183 |
||
A4 |
D1 |
1 |
1 |
0 |
G(D,A4)=0.2516 |
D2 |
2 |
1 |
1 |
||
A5 |
D1 |
2 |
1 |
1 |
G(D,A5)=0.2516 |
D2 |
0 |
0 |
0 |
||
D3 |
1 |
1 |
0 |
H(D)=0.9183 g(D,A4)=0.2516 g(D,A5)=0.2516
根據計算結果,選擇A4和A5作為S212的根節點都可以,這裡不妨選A4作為根節點。根據A4的取值將集合S212劃分為S2121={6} S2122={2,4};對於集合S2122選擇A5作為根節點,根據A5的取值將集合S2122劃分為S21221={2} S21223={4};此時集合S2121和集合S21221,S21223都為葉節點,對於集合S22,計算統計結果為
class=1 |
class=2 |
||||
D |
1 |
2 |
H(D)= 0.9183 |
||
A1 |
D1 |
2 |
0 |
2 |
G(D,A1)=0.9183 |
D2 |
1 |
1 |
0 |
||
A4 |
D1 |
1 |
1 |
0 |
G(D,A4)=0.9183 |
D2 |
2 |
0 |
2 |
||
A5 |
D1 |
1 |
1 |
0 |
G(D,A5)=0.9183 |
D2 |
1 |
0 |
1 |
||
D3 |
1 |
0 |
1 |
H(D)=0.9183 g(D,A1)=0.9183 g(D,A4)=0.9183 g(D,A5)=0.9183
根據計算結果,選擇A1或A4或A5作為根節點都可以,這裡選擇A1作為根節點。根據A1的取值將集合S22劃分為S221={12},S222={7,9} 此時,S221和S222已為葉節點。對於集合S23,計算統計結果為
class=1 |
class=2 |
||||
D |
3 |
2 |
H(D)=0.9710 |
||
A1 |
D1 |
3 |
1 |
2 |
G(D,A1)=0.4200 |
D2 |
2 |
2 |
0 |
||
A4 |
D1 |
4 |
3 |
1 |
G(D,A4)=0.3220 |
D2 |
1 |
0 |
1 |
||
A5 |
D1 |
2 |
2 |
0 |
G(D,A5)=0.5710 |
1. 什麼是決策樹:
決策樹是一種預測模型,用來進行分類,是一種有監督學習。樹中每個節點表示某個物件,而每個分叉路徑則代表的某個可能的屬性值,而每個葉結點則對應從根節點到該葉節點所經歷的路徑所
決策數(Decision Tree)在機器學習中也是比較常見的一種演算法,屬於監督學習中的一種。看字面意思應該也比較容易理解,相比其他演算法比如支援向量機(SVM)或神經網路,似乎決策樹感覺“親切”許多。
優點:計算複雜度不高,輸出結果易於理解,對中間值的缺 方式 -1 變化 log nbsp 導致 結點 以及 重要
1、決策樹原理
1.1、定義 分類決策樹模型是一種描述對實例進行分類的樹形結構。決策樹由結點和有向邊組成。結點有兩種類型:內部節點和葉節點,內部節點表示一個特征或屬性,葉節點表示一個類。
ini 相親 tor ext 測試的 select port RR rand
html { }
:root { }
html { font-size: 14px; background-color: var(--bg-color); color: var(--tex 機器學習實戰(Machine Learning in Action)學習筆記————03.決策樹原理、原始碼解析及測試關鍵字:決策樹、python、原始碼解析、測試作者:米倉山下時間:2018-10-24機器學習實戰(Machine Learning in Action,@author: Peter Harr
計算機裡面的資料結構 樹 在計算機儲存領域應用作用非常大,我之前也多次強調多磁碟的存取速度是目前計算機飛速發展的一大障礙,計算機革命性的的下一次飛躍就是看硬碟有沒有質的飛躍,為什麼這麼說?因為磁碟是永久性儲存裝置(在相當長的時間內都可以用),就這一點雖然記憶體在效能方面優勢巨大但是儲存資訊和資料還是要靠磁
1.分析
1.1 背景和意義:
相信很多人都玩過一個網路上傳的遊戲,腦海裡面想一個名人的名字,然後出若干多道問題,比如男的女的,國外的國內的,你只能答是或不是,最後給出你想的那個名人是誰。只要不是很偏的應該都能想出來,一般人覺得很震驚,其實這只是一種簡單機器
決策樹是機器學習最基本的演算法之一,它本身作為一顆樹而言,十分簡單。
就是將特徵屬性放在結點的未知,按照特徵屬性將樣本分類,放在左子樹和右子樹。
而在左子樹和右子樹,繼續使用其他的特徵屬性作為結點,向下分類。
學習決策樹複雜的部分在
程式碼實現請直接移步博文末尾
在機器學習領域,決策樹是用於資料分類、預測的模型。決策樹演算法通過分析訓練集的各個資料特徵的不同,由原始資料集構造出一個樹形結構,比如我們分析一封郵件是否為垃圾郵件時,可以根據傳送方域名、郵件主題等方式區分郵件是否為垃圾郵件,新資料通過使用構造出的決策樹
CART與ID3和C4.5相同都由特徵選擇,樹的生成,剪枝組成。但ID3和C4.5用於分類,CART可用於分類與迴歸。
CART是在給定輸入隨機變數X條件下輸出隨機變數Y的條件概率分佈,與ID3和C4.5的決策樹所不同的是,ID3和C4.5生成的決策樹可以是多 ### 簡介
先看一個例子,某銀行是否給使用者放貸的判斷規則集如下:
```python
if 年齡==青年:
if 有工作==是:
if 信貸情況==非常好:
放
else:
不放
else:
堆排序(Heapsort)概念:是指利用堆這種資料結構所設計的一種排序演算法;
堆(英語:heap) 概念:電腦科學中一類特殊的資料結構的統稱。堆通常是一個可以被看做一棵樹的陣列(集合)物件。
原理圖(圖示為三叉樹):
擴充套件說明:
堆
1. 概述
上一篇日誌中,我們介紹了兩個決策樹構建演算法 – ID3、C4.5: 決策樹的構建演算法 – ID3 與 C4.5 演算法 本篇日誌我們來看看如何使用這兩個演算法以及其他工具構建和展示我們的決策樹
1. 概述
上一篇日誌中,我們介紹了最簡單的分類迴歸演算法 – K 近鄰演算法。 k 近鄰演算法 本篇日誌我們來介紹構建專家系統和資料探勘最常用的演算法 – 決策樹。
2. 決策樹
在系統流程圖中,我們常
(寫在前面:作者是一名剛入學的模式識別專業的碩士生,第一次寫部落格,有錯誤的地方還請大家多多指教評論,一起交流呀~)
決策樹的基本流程
①劃分特徵的選擇(常見的選擇方法有:資訊增益、增益率、基尼指數,下文會詳細介紹)
②劃分停止準則:停止準則表示該節點不再劃分
歡迎轉載,轉載請註明:本文出自Bin的專欄blog.csdn.net/xbinworld。
技術交流QQ群:433250724,歡迎對演算法、技術、應用感興趣的同學加入。
前面三篇寫了線性迴歸,lasso,和LARS的一些內容,這篇寫一下決策樹這個經典的分
轉自: https://blog.csdn.net/huahuazhu/article/details/73167610?locationNum=2&fps=1
###########################################
哈夫曼樹─即最優二叉樹,帶權路徑長度最小的二叉樹,經常應用於資料壓縮。 在計算機資訊處理中,“哈夫曼編碼”是一種一致性編碼法(又稱“熵編碼法”),用於資料的無損耗壓縮。這一術語是指使用一張特殊的編碼表將源字元(例如某檔案中的一個符號)進行編碼。這張編碼表的特殊之處在於,它是根據每一個源字元出現的估算概率而
本人的第一篇文章,趁著我們的資料探勘課設的時間,把實現的決策樹程式碼,拿出來分享下。有很多漏洞和缺陷,還有很多駭客思想的成分,但是總之,能實現,看網上的程式碼,能用的其實也沒幾個。廢話不多說,直接看程式碼
特別鳴謝博主skyonefly的程式碼
附上鍊接:R
1、構建treePlotter.py
#coding:utf-8
import matplotlib.pyplot as plt
# 定義決策樹決策結果的屬性,用字典來定義
# 下面的字典定義也可寫作 decisionNode={boxstyle:'sawtooth' |