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

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

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

         劃分?jǐn)?shù)據(jù)集的大原則是:將無(wú)序的數(shù)據(jù)變得更加有序。組織雜亂無(wú)章數(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ì)算熵。

         信息熵,被用來(lái)度量信息的無(wú)序程度(信息熵越大,越無(wú)序,等于 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)來(lái) 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.zuancaijixie.com
        91啦在线播放,特级一级全黄毛片免费,国产中文一区,亚洲国产一成人久久精品