东方亚洲欧a∨人在线观看|欧美亚洲日韩在线播放|日韩欧美精品一区|久久97AV综合

        機器學習基礎(三)——信息、信息熵與信息增益x

        發(fā)布時間:2020-08-28 來源: 入黨申請 點擊:

         機器學習基礎(三)—— 信息、信息熵與信息增益 信息:information,信息熵:information entropy,信息增益:information gain(IG)

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

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

         征就是最好的選擇。

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

         的信息定義為:

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

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

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

         遍歷相乘再相加,可以使用內積計算熵。

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

         熵的性質:

         熵的性質:

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

         計算數據集的香農熵和最佳劃分特征 根據數據集的類別,計算數據集的香農熵:

         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

         按照給定特征(屬性列)劃分數據集:

         # 第三個參數 val 不是手動指定的,

         # 該函數也不是直接交由外部調,而是被其他函數調用

         # 在函數內部,也即遍歷屬性列不重復的屬性值時,傳遞進來 val 值

         def splitDataset(dataset, axis, val):

         splitedDataset = []

         for sample in dataset:

         if sample[axis] == val:

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

         return splitedDataset

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

         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

        相關熱詞搜索:信息 增益 機器

        版權所有 蒲公英文摘 smilezhuce.com