《機器學習》第4章決策樹之詳解資訊熵,資訊增益

2021-09-29 10:27:31 字數 2529 閱讀 8265

參考:資訊熵的公式推導

樣本資料

約等於0.970954

import math

def informationentropy(dataset):

nums = len(dataset) #樣本的數量

lables = {} #用來記錄結果集

for samples in dataset:

if samples[-1] not in lables:

lables[samples[-1]] = 1

else:

lables[samples[-1]] += 1

ents = 0.0

for key in lables.keys():

ff = lables[key] / nums

ents -= ff* math.log(ff,2)

return ents

dataset = [[1,1,1],[1,1,1],[1,0,0],[0,1,0],[0,1,0]]

print(dataset)

print(informationentropy(dataset))

其中dataset是樣本集

關於資訊增益可以根據**來看。

def splitdataset(dataset,axis,value):

retdataset =

for featvec in dataset:

if featvec[axis] == value:

reducedfeatvec = featvec[:axis]

reducedfeatvec.extend(featvec[axis+1:])

return retdataset

def choosebestfeaturetosplit(dataset):

numfeatures = len(dataset[0]) - 1

baseentropy = informationentropy(dataset)

bestinfogain = 0.0

bestfeature = -1

for i in range(numfeatures):

fealist = [example[i] for example in dataset]

uniquevals = set(fealist)

newentropy = 0.0

for value in uniquevals:

subdataset = splitdataset(dataset, i, value)

print("subdataset:", subdataset)

prob = len(subdataset) / float(len(dataset))

newentropy += prob * informationentropy(subdataset)

print("newentropy", newentropy)

infogain = baseentropy - newentropy

print(i, "--", infogain)

if bestinfogain < infogain:

bestinfogain = infogain

bestfeature = i

return (bestinfogain, i)

print(choosebestfeaturetosplit(dataset))

numfeatures = 2 也就是兩個屬性,乙個是顏色,乙個是形狀。

baseentropy->資訊熵。bestinfogain->記錄最佳資訊增益. bestfeature->記錄最佳資訊增益的屬性列
下面for迴圈【  for i in range(numfeatures):】是遍歷每個屬性,,計算出每個屬性對應的資訊增益。

uniquevals是每個屬性的數量。例如紅不紅,只有兩個情況,1或者0, 這裡沒有考慮綠色,青色,紅色,白色等等。僅僅考慮兩種紅不紅。
uniquevals = . 簡單記錄為

三個引數,第乙個引數是元資料,第二個引數是屬性列,第三個引數是屬性列對應的屬性值。

當蘋果為不紅的時候也就是取0的時候,求出splitdataset = [[1,0],[1,0]]

首先將蘋果是否紅這列屬性去掉,然後僅僅取蘋果為0(不紅)的時候的兩行,也就是最後兩行

剩下就是根據公式計算。

資訊增益越大越好。

部分內容參考:

機器學習之決策樹

在這裡,我想以更直觀的方式幫助各位理解 掌握並且運用 注意 是運用 決策樹,從而為機器學習作鋪墊。ps 但還是希望大家稍微知道決策樹大概是什麼樣子。1.根結點 root node 沒有入邊,但有零條或多條出邊 2.內部結點 internal node 恰有一條入邊和 兩條或多條出邊 3.葉結點 le...

機器學習之決策樹

決策樹是很常見的機器學習分類演算法,竟然叫決策樹,那麼它的模型其實就像樹一樣。通過對樣本集的學習,挖掘出有用的規則。對於程式設計師來說或許以條件語句來看就更好理解了,決策樹可以看成是多個if then條件語句的集合。這種模型等同於我們寫的條件語句,所以它的 分類速度是很快的。來個例子了解下決策樹分類...

機器學習之決策樹

簡介 決策樹是一種基本的分類方法,當然也可以用於回歸。我們一般只討論用於分類的決策樹。決策樹模型呈樹形結構。在分類問題中,表示基於特徵對例項進行分類的過程,它可以認為是if then規則的集合。在決策樹的結構中,每乙個例項都被一條路徑或者一條規則所覆蓋。通常決策樹學習包括三個步驟 特徵選擇 決策樹的...