參考:資訊熵的公式推導
樣本資料
約等於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規則的集合。在決策樹的結構中,每乙個例項都被一條路徑或者一條規則所覆蓋。通常決策樹學習包括三個步驟 特徵選擇 決策樹的...