機器學習筆記之資訊熵、資訊增益和決策樹(ID3演算法)
決策樹演算法:
優點:計算複雜度不高,輸出結果易於理解,對中間值的缺失不敏感,可以處理不相關的特徵資料。
缺點:可能會產生過度匹配問題。
適用資料型別:數值型和標稱型。
演算法原理:
決策樹是一個簡單的為輸入值選擇標籤的流程圖。這個流程圖由檢查特徵值的決策節點和分配標籤的子葉節點組成。為輸入值選擇標籤,我們以流程圖的初始決策節點(即根節點)開始。此節點包含一個條件,檢查輸入值的特徵之一,基於該特徵的值選擇一個分支。沿著這個描述我們輸入值的分支,我們到到了一個新的決策節點,有一個關於輸入值的特徵的新條件。我們繼續沿著每個節點的條件選擇的分支,直到到達葉節點,它為輸入值提供了一個標籤。
演算法流程:
收集資料:即建立訓練測試資料集。
準備資料:決策樹構造演算法只適用於標稱型資料,因此數值型資料必須是離散化的。
分析資料:建立構造數,構造樹完成後我們檢查圖形是否符合預期。
訓練資料:完善構造樹的資料結構。
測試資料:使用經驗樹計算。
使用演算法:對實際資料進行預測。
那麼問題來了我們是如何確定有多少個樹杈節點呢?這裡我們採用ID3演算法來構造決策樹。
ID3演算法:
ID3演算法(Iterative Dichotomiser 3,迭代二叉樹3代)是一種貪心演算法,用來構造決策樹。ID3演算法起源於概念學習系統(CLS),以資訊熵的下降速度為選取測試屬性的標準,即在每個節點選取還尚未被用來劃分的具有最高資訊增益的屬性作為劃分標準,然後繼續這個過程,直到生成的決策樹能完美分類訓練樣例。
為了實現ID3演算法我們還需要了解這個高富帥提出的三個概念:資訊、資訊熵和資訊增益。
那麼我們就需要認識認識一下這些概念的提出者美國高(高智商)富帥數學家夏農
克勞德·艾爾伍德·夏農(Claude Elwood Shannon ,1916年4月30日—2001年2月24日)是美國數學家、資訊理論的創始人。
這個帥哥提出了下面三個概念
並且由上面的公式我們可以看出其實資訊熵就是資訊的期望值,所以我們可知,資訊熵越越小,資訊的純度越高,也就是資訊越少,在分類領域來講就是裡面包含的類別越少,所以我們可以得出,與初始資訊熵的差越大分類效果越好。
下面我們來舉個例子:
我一般買蘋果的時候,從外觀上評判一個蘋果甜不甜有兩個依據:紅不紅 和 圓不圓 (原諒我淺薄的挑蘋果經驗吧。。。)
蘋果編號 紅不紅 圓不圓 甜不甜
1 1 1 yes
2 1 1 yes
3 1 0 no
4 0 1 no
5 0 1 no
下面我來算一下啊這5個蘋果是不是好蘋果的資訊熵:
下面給出python求資訊熵的程式碼
def calcShannonEnt(dataSet):
numEntries = len(dataSet) #資料集大小
labelCounts = {}
for featVec in dataSet:
currentLabel = featVec[-1] #獲取分類標籤
if currentLabel not in labelCounts.keys(): labelCounts[currentLabel] = 0
labelCounts[currentLabel] += 1 #每個類中資料個數統計
shannonEnt = 0.0
for key in labelCounts: #資訊熵計算
prob = float(labelCounts[key])/numEntries
shannonEnt -= prob * log(prob,2)
return shannonEnt
和我們的筆算結果完全一致。。。
接下來我們要尋找怎麼分類比較好也就是決策樹的叉,我們的例子中可以按兩個方式分類,紅不紅和圓不圓。。到的按哪個分更好一點呢,這下就用到資訊增益了:
def chooseBestFeatureToSplit(dataSet):
numFeatures = len(dataSet[0]) - 1 #計算分類依據的個數
baseEntropy = calcShannonEnt(dataSet) #計算原始分類的資訊熵
bestInfoGain = 0.0; bestFeature = -1
for i in range(numFeatures): #對apple進行分類
featList = [example[i] for example in dataSet]
uniqueVals = set(featList)
newEntropy = 0.0
for value in uniqueVals: #計算該種分類的資訊熵
subDataSet = splitDataSet(dataSet, i, value)
prob = len(subDataSet)/float(len(dataSet))
newEntropy += prob * calcShannonEnt(subDataSet)
infoGain = baseEntropy - newEntropy #計算當前分類的資訊增益
if (infoGain > bestInfoGain): #比較那種分類的資訊增益最大並返回
bestInfoGain = infoGain
bestFeature = i
return bestFeature
我們可以看出,這種分類的資訊熵是0.5509775,它的資訊增益是0.419973
如果按照圓不圓來分類:
顯然第一種分類的資訊增益較大
我們來看一下啊兩個劃分的結果集:
確實第一種方法劃分的較好。
這樣我們的決策樹也就構建好了:
相關文章
- 基於資訊增益的ID3決策樹介紹。
- 機器學習之決策樹ID3(python實現)機器學習Python
- 決策樹中資訊增益、ID3以及C4.5的實現與總結
- ML-熵、條件熵、資訊增益熵
- 機器學習筆記(四)決策樹機器學習筆記
- 機器學習之決策樹演算法機器學習演算法
- 機器學習之決策樹機器學習
- 基於資訊增益和基尼指數的二叉決策樹
- 資訊熵概念隨筆——資訊熵、資訊的熵熵
- 機器學習經典演算法之決策樹機器學習演算法
- 機器學習:決策樹機器學習
- 機器學習之決策樹原理和sklearn實踐機器學習
- 【機器學習】--決策樹和隨機森林機器學習隨機森林
- 鵝廠優文 | 決策樹及ID3演算法學習演算法
- python中如何實現資訊增益和資訊增益率Python
- 機器學習實戰(三)決策樹ID3:樹的構建和簡單分類機器學習
- 機器學習——決策樹模型機器學習模型
- 【Python機器學習實戰】決策樹和整合學習(二)——決策樹的實現Python機器學習
- 資訊增益
- Python機器學習:決策樹001什麼是決策樹Python機器學習
- 《機器學習Python實現_09_01_決策樹_ID3與C4.5》機器學習Python
- 【Python機器學習實戰】決策樹和整合學習(一)Python機器學習
- 機器學習之 決策樹(Decision Tree)python實現機器學習Python
- 機器學習之使用sklearn構造決策樹模型機器學習模型
- ML《決策樹(一)ID3》
- 熵、資訊量、資訊熵、交叉熵-個人小結熵
- 機器學習Sklearn系列:(三)決策樹機器學習
- 機器學習|決策樹-sklearn實現機器學習
- 資訊理論之從熵、驚奇到交叉熵、KL散度和互資訊熵
- 機器學習之決策樹在sklearn中的實現機器學習
- 01 決策樹 - 數學理論概述 - 熵熵
- 機器學習西瓜書吃瓜筆記之(二)決策樹分類 附一鍵生成決策樹&視覺化python程式碼實現機器學習筆記視覺化Python
- 機器學習演算法筆記之6:資料預處理機器學習演算法筆記
- 機器學習 Day 9 | 決策樹基礎機器學習
- 機器學習——決策樹模型:Python實現機器學習模型Python
- 通用機器學習演算法:線性迴歸+決策樹+Xgboost機器學習演算法
- 人工智慧之機器學習基礎——決策樹(Decision Tree)人工智慧機器學習
- 資訊熵(夏農熵)熵
- 機器學習演算法系列(十七)-決策樹學習演算法(Decision Tree Learning Algorithm)機器學習演算法Go