国产第页,国产精品视频一区二区三区,国产精品网站夜色,久久艹影院,精品国产第一页,欧美影视一区二区三区,国产在线欧美日韩精品一区二区

機(jī)器學(xué)習(xí)基礎(chǔ)(三)——信息、信息熵與信息增益x

發(fā)布時(shí)間:2020-08-28 來源: 入黨申請(qǐng) 點(diǎn)擊:

 機(jī)器學(xué)習(xí)基礎(chǔ)(三)—— 信息、信息熵與信息增益 信息:information,信息熵:information entropy,信息增益:information gain(IG)

 劃分?jǐn)?shù)據(jù)集的大原則是:將無序的數(shù)據(jù)變得更加有序。組織雜亂無章數(shù)據(jù)的一種方法就是使用信息論度量信息,信息論是量化處理信息的分支科學(xué)。

 在劃分?jǐn)?shù)據(jù)集之前之后信息發(fā)生的變化稱為信息增益,知道如何計(jì)算信息增益,我們就可以計(jì)算每一個(gè)特征值劃分?jǐn)?shù)據(jù)集獲得的信息增益, 獲得信息增益最高的特征就是最好的選擇。

 征就是最好的選擇。

 信息、信息熵的定義 如果待分類的數(shù)據(jù)集可能劃分在多個(gè)分類之中,則類別 xi?? ??

 的信息定義為:

 l(xi)=−log2p(xi) ??(?? ?? ) = −log 2 ??(?? ?? )

 其中 p(xi)??(?? ?? ) 是該類別的樣本所占的比例; 為了計(jì)算熵,我們需要計(jì)算所有類別所有可能包含的信息期望值(由離散型隨機(jī)變量的期望計(jì)算公式可知),

 H=−∑i=1np(xi)log2p(xi) ?? = −∑??????=1(?? ?? )log 2 ??(?? ?? )

 遍歷相乘再相加,可以使用內(nèi)積計(jì)算熵。

 信息熵,被用來度量信息的無序程度(信息熵越大,越無序,等于 0 時(shí),意味著全部類別都相同,完全有序)

 熵的性質(zhì):

 熵的性質(zhì):

。1)非負(fù),0<p(xi)≤1→log2p(xi)≤00 < ??(?? ?? ) ≤ 1 → log 2 ??(?? ?? ) ≤ 0 (2)完全有序,也即 p(x)=1→H=0??(??) = 1 → ?? = 0 • (3)香農(nóng)熵越小越有序,越大越混亂。

 計(jì)算數(shù)據(jù)集的香農(nóng)熵和最佳劃分特征 根據(jù)數(shù)據(jù)集的類別,計(jì)算數(shù)據(jù)集的香農(nóng)熵:

 from collections import Counter

 from math import log

  def calcShannonEnt(dataset):

 classCnt = [sample[-1] for sample in dataset]

 n = len(dataset)

 classCnt = Counter(classCnt)

 ent = 0.

 for times in classCnt.values():

 ent -= times/n*log(times/n, 2)

 return ent

 按照給定特征(屬性列)劃分?jǐn)?shù)據(jù)集:

 # 第三個(gè)參數(shù) val 不是手動(dòng)指定的,

 # 該函數(shù)也不是直接交由外部調(diào),而是被其他函數(shù)調(diào)用

 # 在函數(shù)內(nèi)部,也即遍歷屬性列不重復(fù)的屬性值時(shí),傳遞進(jìn)來 val 值

 def splitDataset(dataset, axis, val):

 splitedDataset = []

 for sample in dataset:

 if sample[axis] == val:

 splitedDataset.append(sample[:axis]+sample[axis+1:])

 return splitedDataset

 選擇最好的數(shù)據(jù)集劃分方式,也即找到最好的屬性列,顯然需要遍歷屬性列,找到最大的信息增益:

 def chooseBestFeatToSplit(dataset):

 baseEnt = calcShannonEnt(dataset)

 bestInfoGain, bestFeat = 0., -1

 for j in range(len(dataset[0])-1):

 featCol = [sample[j] for sample in dataset]

 uniqFeat = set(featCol)

 newEnt = 0.

 for val in uniFeat:

 subDataset = splitDataset(dataset, j, val)

 newEnt = len(subDataset)/len(dataset)*calcShannonEnt(subDataset)

 infoGain = baseEnt - newEnt

 if bestInfo < infoGain:

 bestInfo = infoGain

 bestFeast = j

 return bestFeat

相關(guān)熱詞搜索:信息 增益 機(jī)器

版權(quán)所有 蒲公英文摘 www.huhawan.com