1. 程式人生 > >機器學習筆記(7)——C4.5決策樹中的缺失值處理

機器學習筆記(7)——C4.5決策樹中的缺失值處理

缺失值處理是C4.5決策樹演算法中的又一個重要部分,前面已經討論過連續值和剪枝的處理方法:

現實任務中,通常會遇到大量不完整的樣本,如果直接放棄不完整樣本,對資料是極大的浪費,例如下面這個有缺失值的西瓜樣本集,只有4個完整樣本。

在構造決策樹時,處理含有缺失值的樣本的時候,需要解決兩個問題:

(1)如何在屬性值缺失的情況下選擇最優劃分屬性?

(2)選定了劃分屬性,若樣本在該屬性上的值是缺失的,那麼該如何對這個樣本進行劃分?

以上兩個問題在周志華老師的《機器學習》書中有詳細的講解。但是還有一個問題:

(3)決策樹構造完成後,如果測試樣本的屬性值不完整,該如何確定該樣本的類別?

書中沒有介紹,好在昆蘭在1993年發表的文章中提供瞭解決方案。下面我們對以上3個問題逐一討論。

1. 選擇最優劃分屬性

之前的演算法中,我們選擇資訊增益最大的屬性作為最優劃分屬性,那麼對於有缺失值的屬性,其資訊增益就是無缺失值樣本所佔的比例乘以無缺失值樣本子集的資訊增益。

Gain(D,a)=\rho \times Gain(\tilde{D},a)

其中\rho是屬性a上無缺失值樣本所佔的比例;\tilde{D}是屬性a上無缺失值的樣本子集。回顧一下ID3演算法中,資訊增益的計算方法:

Ent(D)=-\sum_{k=1}^{|Y|}p_klog_2p_k        Gain(D,a)=Ent(D)-\sum_{v=1}^{V}\frac{|D^v|}{|D|}Ent(D^v)

色澤:

Ent(\tilde{D})=-(\frac{6}{14}log_2\frac{6}{14}+\frac{8}{14}log_2\frac{8}{14})=0.985

\tilde{D}^1,\tilde{D}^2,\tilde{D}^3分別表示“色澤”屬性上取值為“青綠”、“烏黑”、“淺白”的樣本子集。

Ent(\tilde{D^1})=-(\frac{2}{4}log_2\frac{2}{4}+\frac{2}{4}log_2\frac{2}{4})=1

Ent(\tilde{D^2})=-(\frac{4}{6}log_2\frac{4}{6}+\frac{2}{6}log_2\frac{2}{6})=0.918

Ent(\tilde{D^3})=-(\frac{0}{4}log_2\frac{0}{4}+\frac{4}{4}log_2\frac{4}{4})=0

Gain(\tilde{D},a) = 0.985-\left (\frac{4}{14}\times1+ \frac{6}{14}\times0.918+\frac{4}{14}\times0\right ) = 0.306

Gain(D,a)=\rho \times Gain(\tilde{D},a) = \frac{14}{17}\times0.306=0.252

同樣可以計算出其他幾個屬性的資訊增益:

屬性 色澤 根蒂
敲聲 紋理 臍部 觸感
資訊增益 0.252 0.171 0.145 0.424 0.289 0.006

因此,選擇“紋理”作為根節點進行劃分。編號為{1,2,3,4,5,6,15}的7個樣本進入“紋理=清晰”的分支,編號為{7,9,13,14,17}的5個樣本進入“紋理=稍糊”的分支,編號為{11,12,16}的3個樣本進入“紋理=模糊”的分支。

那麼選定了劃分屬性,若樣本在該屬性上的值是缺失的,那麼該如何對這個樣本進行劃分?(也就是問題2)

重點來了:對於編號為8和10的缺失值樣本,將分別以7/15、5/15、3/15的權重劃分到以上3個分支。也就是說,將缺失值樣本按不同的概率劃分到了所有分支中,而概率則等於無缺失值樣本在每個分支中所佔的比例。

這裡引入了權重的概念,在學習開始時,樣本的預設權重為1,對於無缺失值的樣本,劃分到子節點時其權重保持不變。

樣本有了權重,我們需要對資訊增益的計算公式做一些改進。

Gain(D,a)=\rho \times Gain(\tilde{D},a)=\rho \times \left ( Ent( \tilde{D} ) -\sum_{v=1}^{V} \tilde{r}_vEnt( \tilde{D}^v ) \right )

Ent(\tilde{D})=-\sum_{k=1}^{|Y|}\tilde{p}_klog_2\tilde{p}_k

\rho =\frac {\sum_{x\in \tilde{D}}w_x }{\sum_{x\in D}w_x}   (無缺失值樣本所佔的比例,樣本的個數按權重w_x來計算)

\tilde{p}_k =\frac {\sum_{x\in \tilde{D}_k}w_x }{\sum_{x\in \tilde{D}}w_x}(無缺失值樣本中第k類所佔的比例,樣本的個數按權重w_x來計算)

\tilde{r}_v =\frac {\sum_{x\in \tilde{D}^v}w_x }{\sum_{x\in \tilde{D}}w_x}(無缺失值樣本中屬性a上取值為a^v的樣本所佔的比例,樣本個數按權重w_x來計算)

下面我們再以“紋理=清晰”這個分支為例,看看下一步將如何劃分:

色澤:

\rho =\frac {\sum_{x\in \tilde{D}}w_x }{\sum_{x\in D}w_x}=\frac{5+2\times\frac{7}{15}}{7+2\times\frac{7}{15}}=0.748

\tilde{p}_1 =\frac {\sum_{x\in \tilde{D}_1}w_x }{\sum_{x\in \tilde{D}}w_x}=\frac{4+\frac{7}{15}}{5+2\times\frac{7}{15}}=0.753    (無缺失值樣本中,好瓜的比例)

\tilde{p}_2 =\frac {\sum_{x\in \tilde{D}_2}w_x }{\sum_{x\in \tilde{D}}w_x}=\frac{1+\frac{7}{15}}{5+2\times\frac{7}{15}}=0.247    (無缺失值樣本中,壞瓜的比例)

\tilde{r}_1 =\frac {\sum_{x\in \tilde{D}^1}w_x }{\sum_{x\in \tilde{D}}w_x}=\frac{3+\frac{7}{15}}{5+2\times\frac{7}{15}}=0.584    (無缺失值樣本中,“色澤=烏黑”的樣本的比例)

\tilde{r}_2 =\frac {\sum_{x\in \tilde{D}^2}w_x }{\sum_{x\in \tilde{D}}w_x}=\frac{2+\frac{7}{15}}{5+2\times\frac{7}{15}}=0.416    (無缺失值樣本中,“色澤=青綠”的樣本的比例)

Ent(\tilde{D})=-\sum_{k=1}^{|Y|}\tilde{p}_klog_2\tilde{p}_k=-0.753 \times log_20.753-0.247 \times log_20.247 = 0.806

Ent(\tilde{D^1})=-(\frac{2.467}{3.467}log_2\frac{2.467}{3.467}+\frac{1}{3.467}log_2\frac{1}{3.467})=0.867    (“色澤=烏黑”)

Ent(\tilde{D^2})=-(\frac{2}{2.467}log_2\frac{2}{2.467}+\frac{0.467}{2.467}log_2\frac{0.467}{2.467})=0.700    (“色澤=青綠”)

Gain(D,a)=\rho \times \left ( Ent( \tilde{D} ) -\sum_{v=1}^{V} \tilde{r}_vEnt( \tilde{D}^v ) \right )

                     =0.748 \times \left ( 0.806-0.584\times 0.867- 0.416 \times 0.700\right )=0.006

根蒂:

無缺失值,\rho =1

無缺失值樣本中,正負樣本所佔比例:

\tilde{p}_1 =\frac{6+\frac{7}{15}}{7+2\times\frac{7}{15}}=0.815    \tilde{p}_2 =\frac{1+\frac{7}{15}}{7+2\times\frac{7}{15}}=0.185

屬性值為“蜷縮”、“稍蜷”、“硬挺”的樣本比例:

\tilde{r}_1 =\frac{5}{7+2\times\frac{7}{15}}=0.630     \tilde{r}_2 =\frac{2+\frac{7}{15}}{7+2\times\frac{7}{15}}=0.311    \tilde{r}_3 =\frac{\frac{7}{15}}{7+2\times\frac{7}{15}}=0.059

Ent(\tilde{D})=-0.815 \times log_20.815-0.185 \times log_20.185 = 0.691

Ent(\tilde{D^1})=-(\frac{5}{5}log_2\frac{5}{5}+\frac{0}{5}log_2\frac{0}{5})=0    

Ent(\tilde{D^2})=-(\frac{1.467}{2.467}log_2\frac{1.467}{2.467}+\frac{1}{2.467}log_2\frac{1}{2.467})=0.974    

Ent(\tilde{D^3})=-(\frac{0}{0.467}log_2\frac{0}{0.467}+\frac{0.467}{0.467}log_2\frac{0.467}{0.467})=0

Gain(D,a)=1 \times \left ( 0.691-0.630\times 0- 0.311 \times 0.974-0.059 \times 0\right )=0.388

敲聲:

\rho =\frac{6+2\times\frac{7}{15}}{7+2\times\frac{7}{15}}=0.874

無缺失值樣本中,正負樣本所佔比例:

\tilde{p}_1 =\frac{5+\frac{7}{15}}{6+2\times\frac{7}{15}}=0.856    \tilde{p}_2 =\frac{1}{6+2\times\frac{7}{15}}=0.144

屬性值為“濁響”、“沉悶”、“清脆”的樣本比例:

\tilde{r}_1 =\frac{4+\frac{7}{15}}{6+2\times\frac{7}{15}}=0.644     \tilde{r}_2 =\frac{2}{6+2\times\frac{7}{15}}=0.288    \tilde{r}_3 =\frac{\frac{7}{15}}{6+2\times\frac{7}{15}}=0.067

Ent(\tilde{D})=-0.856 \times log_20.856-0.144 \times log_20.144 = 0.595

Ent(\tilde{D^1})=-(\frac{3.467}{4.467}log_2\frac{3.467}{4.467}+\frac{1}{4.467}log_2\frac{1}{4.467})=0.767    

Ent(\tilde{D^2})=-(\frac{2}{2}log_2\frac{2}{2}+\frac{0}{2}log_2\frac{0}{2})=0    

Ent(\tilde{D^3})=-(\frac{0}{0.467}log_2\frac{0}{0.467}+\frac{0.467}{0.467}log_2\frac{0.467}{0.467})=0

Gain(D,a)=0.874 \times \left ( 0.595-0.644\times 0.767- 0.288 \times 0-0.067 \times 0\right )=0.088

臍部:

\rho =\frac{5+2\times\frac{7}{15}}{7+2\times\frac{7}{15}}=0.748

無缺失值樣本中,正負樣本所佔比例:

\tilde{p}_1 =\frac{5+\frac{7}{15}}{5+2\times\frac{7}{15}}=0.921    \tilde{p}_2 =\frac{\frac{7}{15}}{5+2\times\frac{7}{15}}=0.079

屬性值為“凹陷”、“稍凹”、“平坦”的樣本比例:

\tilde{r}_1 =\frac{5}{5+2\times\frac{7}{15}}=0.843     \tilde{r}_2 =\frac{\frac{7}{15}}{5+2\times\frac{7}{15}}=0.079    \tilde{r}_3 =\frac{\frac{7}{15}}{5+2\times\frac{7}{15}}=0.079

Ent(\tilde{D})=-0.921 \times log_20.921-0.079 \times log_20.079 = 0.399

Ent(\tilde{D^1})=-(\frac{5}{5}log_2\frac{5}{5}+\frac{0}{5}log_2\frac{0}{5})=0    

Ent(\tilde{D^2})=-(\frac{0.467}{0.467}log_2\frac{0.467}{0.467}+\frac{0}{0.467}log_2\frac{0}{0.467})=0    

Ent(\tilde{D^3})=-(\frac{0}{0.467}log_2\frac{0}{0.467}+\frac{0.467}{0.467}log_2\frac{0.467}{0.467})=0

Gain(D,a)=0.748 \times \left ( 0.399-0.843\times 0- 0.079 \times 0-0.079 \times 0\right )=0.298

 觸感:

\rho =\frac{6+2\times\frac{7}{15}}{7+2\times\frac{7}{15}}=0.874

無缺失值樣本中,正負樣本所佔比例:

\tilde{p}_1 =\frac{5+\frac{7}{15}}{6+2\times\frac{7}{15}}=0.856    \tilde{p}_2 =\frac{1}{6+2\times\frac{7}{15}}=0.144

屬性值為“硬滑”、“軟粘”的樣本比例:

\tilde{r}_1 =\frac{4+\frac{7}{15}}{6+2\times\frac{7}{15}}=0.644     \tilde{r}_2 =\frac{2}{6+2\times\frac{7}{15}}=0.288    

Ent(\tilde{D})=-0.856 \times log_20.856-0.144 \times log_20.144 = 0.595

Ent(\tilde{D^1})=-(\frac{4.467}{4.467}log_2\frac{4.467}{4.467}+\frac{0}{4.467}log_2\frac{0}{4.467})=0    

Ent(\tilde{D^2})=-(\frac{1}{2.467}log_2\frac{1}{2.467}+\frac{1.467}{2.467}log_2\frac{1.467}{2.467})=0.974    

Gain(D,a)=0.874 \times \left ( 0.595-0.644\times 0- 0.288 \times 0.974\right )=0.275

因此,根蒂作為最優劃分屬性,繼續劃分。

對每個分支遞迴構建出決策樹如下:

2. 如何對有缺失值的樣本分類

對於問題3,決策樹構造完成後,如果測試樣本的屬性值不完整,該如何確定該樣本的類別?昆蘭的文章中給出如下解決方案:

如果分類進入某個屬性值未知的分支節點時,探索所有可能的分類結果並把所有結果結合起來考慮。這樣,會存在多個路徑,分類結果將是類別的分佈而不是某一類別,從而選擇概率最高的類別作為預測類別。

那麼如果是使用上面構造的決策樹,仍然無法確定測試樣本在每條路徑上的概率,因此需要對以上樹結構稍作改進。這裡我們使用昆蘭原著中的資料集,能夠更好的體現演算法的原理。

用前面的計算過程,會得到一個決策樹,我們先看一下每個樣本在樹節點中的分佈情況:

然後我們對樹的結構做個改進,給每個葉子節點加個數值,例如(N/E),N表示該葉節點中所包含的總樣本數,E表示與該葉節點的類別不同的樣本數,然後就可以得到這樣的樹結構。

現在我們使用這個決策樹對測試樣本分類,樣本的屬性值為:ountlook=sunny, temperature=70, humidity=?, windy=false.

測試樣本進入左側第一個分支,但是humidity屬性值未知,因此兩個分支的可能性都會考慮:

  • 如果humidity<=75,類別是play。
  • 如果humidity>75,類別是Don‘t play的概率為3/3.4(88%),play的概率是0.4/3.4(12%)。

那麼,總的類別分佈情況是:

play:2/5.4 \times 100\% + 3.4/5.4 \times 12\%=44\%

Don't\ play:3.4/5.4 \times 88\% =56\%

因此,該樣本的類別判定為Don't play。

總結

至此,對於決策樹中缺失值的處理就有了完整的解決方案,主要解決了3個問題,1是如何選擇最優劃分屬性gai是有缺失值的訓練樣本如何劃分到分支中,3是測試樣本如有缺失值該如何判斷其類別。Pytho程式碼實現以後的文章中會補充。

參考:

周志華《機器學習》

J.Ross Quinlan C4.5: Programs For Machine Learning

相關推薦

機器學習筆記7——C4.5決策缺失處理

缺失值處理是C4.5決策樹演算法中的又一個重要部分,前面已經討論過連續值和剪枝的處理方法: 現實任務中,通常會遇到大量不完整的樣本,如果直接放棄不完整樣本,對資料是極大的浪費,例如下面這個有缺失值的西瓜樣本集,只有4個完整樣本。 在構造決策樹時,處理含有缺失值

機器學習筆記6——C4.5決策的剪枝處理和Python實現

1. 為什麼要剪枝 還記得決策樹的構造過程嗎?為了儘可能正確分類訓練樣本,節點的劃分過程會不斷重複直到不能再分,這樣就可能對訓練樣本學習的“太好”了,把訓練樣本的一些特點當做所有資料都具有的一般性質,cong從而導致過擬合。這時就可以通過剪枝處理去掉yi一些分支來降低過擬合

機器學習筆記——基於單層決策的AdaBoost演算法實踐

                             基於單層決策樹的AdaBoost演算法實踐    最近一直在學習周志華老師的西瓜書,也就是《機器學習》,在第八章整合學習中學習了一個整合學習演算法,即AdaBoost演算法。AdaBoost是一種迭代演算法,其核心思想

機器學習筆記5——C4.5決策的連續處理和Python實現

在ID3決策樹演算法中,我們實現了基於離散屬性的決策樹構造。C4.5決策樹在劃分屬性選擇、連續值、缺失值、剪枝等幾方面做了改進,內容較多,今天我們專門討論連續值的處理和Python實現。 1. 連續屬性離散化 C4.5演算法中策略是採用二分法將連續屬性離散化處理:假定

Python3實現機器學習經典演算法C4.5決策

一、C4.5決策樹概述   C4.5決策樹是ID3決策樹的改進演算法,它解決了ID3決策樹無法處理連續型資料的問題以及ID3決策樹在使用資訊增益劃分資料集的時候傾向於選擇屬性分支更多的屬性的問題。它的大部分流程和ID3決策樹是相同的或者相似的,可以參考我的上一篇部落格:https://www.cnblogs.

公開課機器學習筆記7Softmax迴歸模型

在本節中,我們介紹Softmax迴歸模型,該模型是logistic迴歸模型在多分類問題上的推廣,在多分類問題中,類標籤  可以取兩個以上的值。 Softmax迴歸模型對於諸如MNIST手寫數字分類等問題是很有用的,該問題的目的是辨識10個不同的單個數字。Softmax迴歸

學習筆記:使用決策演算法檢測POP3暴力破解

1.資料蒐集     載入KDD 99中的資料: def load_kdd99(filename): x=[] with open(filename) asf: for line in f: line=line.st

機器學習筆記十三:TensorFlow實戰五經典卷積神經網路: LeNet -5

1 - 引言 之前我們介紹了一下卷積神經網路的基本結構——卷積層和池化層。通過這兩個結構我們可以任意的構建各種各樣的卷積神經網路模型,不同結構的網路模型也有不同的效果。但是怎樣的神經網路模型具有比較好的效果呢? 下圖展示了CNN的發展歷程。 經過人們不斷的嘗試,誕生了許多有

Linux網路程式設計學習筆記7---5種I/O模型及select輪詢

本文主要介紹5種I/O模型,select函式以及利用select實現C/S模型。 1、5種I/O模型 (1)阻塞I/O: 一直等到資料到來,才會將資料從核心中拷貝到使用者空間中。 (2)非阻塞I/O: 每過一段時

TensorFlow學習筆記7--實現卷積神經網路同(5),不同的程式風格

import tensorflow as tf import numpy as np import input_data mnist = input_data.read_data_sets('data/', one_hot=True) print("MNIST

樹莓派3學習筆記77分辨率800 480顯示器配置

樹莓派、顯示器配置樹莓派3學習筆記(7):7寸(分辨率800 480)顯示器配置 樹莓派搭載分辨率為800X480的顯示器在顯示的時候可能會遇到無法全屏顯示的問題, 顯示器只有部分能夠顯示,有一部分是黑邊,對於這一種情況,我們只需進入系統的boot目錄,找到config.txt文件,或者直接在命

機器學習筆記機器學習可行性分析

資料 表示 image 隨機 訓練樣本 -s mage 例如 lin 從大量數據中抽取出一些樣本,例如,從大量彈珠中隨機抽取出一些樣本,總的樣本中橘色彈珠的比例為,抽取出的樣本中橘色彈珠的比例為,這兩個比例的值相差很大的幾率很小,數學公式表示為: 用抽取到的樣本作為訓練

機器學習筆記邏輯回歸

邏輯回歸 alt 表示 結果 不變 改變 最小值 nbsp 可能性 一、邏輯回歸問題 二分類的問題為是否的問題,由算出的分數值,經過sign函數輸出的是(+1,-1),想要輸出的結果為一個幾率值,則需要改變函數模型 ,其中,, 則邏輯回歸的函數為 二、邏輯回歸錯誤評價 線性

機器學習筆記非線性變換

nbsp 線性 logs 等於 線性模型 images http 自己 空間 一、非線性問題 對於線性不可分的數據資料,用線性模型分類,Ein會很大,相應的Ein=Eout的情況下,Eout也會很大,導致模型表現不好,此時應用非線性模型進行分類,例如: 分類器模型是一個圓

C#學習筆記7——委托

() namespace test task cnblogs [] string 命名空間 program 說明(2017-5-29 22:22:50): 1. 語法:public delegate void mydel();這一句在類外面,命名空間裏面。 2. 專門新建一

Linux學習筆記7

7一、PATH環境變量PATH 環境變量用which可以查看到一個命令的所在路徑,包括它的alias,實際是從當前環境的目錄下去找的。echo $PATH 查看當前命令 rm = /usr/bin/rm舉例:cp /usr/bin/ls /tmp/bin/ls2如果想直接使用ls2,有以下兩種方法:(

Linux第二周學習筆記7

詳解 顯示 one per mes ctr 方向鍵 post sage Linux第二周學習筆記(7)2.13 文檔查看cat_more_less_head_tail(1). cat命令cat命令:用於查看一個文件的內容並將其顯示在屏幕上cat-A命令:顯示所有的內容,包括

機器學習筆記

get 實現 mach 理論 怎樣 算法 分類 AI 結構 1、基礎概念   什麽是機器學習?   機器學習(Machine Learning, ML)是一門多領域交叉學科,涉及概率論、統計學、逼近論、凸分析、算法復雜度理論等多門學科。專門研究計算機怎樣模擬或實現人類的

機器學習筆記2——CART

而後 並不是 參數 生成 AS 最大值 介紹 ... 訓練數據  CART樹   CART樹與上一篇文章提到的ID3、C4.5的區別在於:   (1)CART樹只能夠生成2個結點,即CART樹是一棵二叉決策樹,而後兩者在進行劃分時可以根據特征值的種類生成2個以上的結點

吳恩達機器學習筆記 —— 支持向量機SVM

次數 括號 圖片 最小 我們 支持向量機svm UNC 意思 strong 主要內容: 一.損失函數 二.決策邊界 三.Kernel 四.使用SVM 一.損失函數 二.決策邊界 對於: 當C非常大時,括號括起來的部分就接近於0,所以就變成了: