信息熵在決策樹分類中的簡單應用

(一) 信息熵
信息熵是信息的期望值,描述信息的不確定度。熵越大,表明集合信息的混亂程度越高,換句話說,集合信息混沌,其包含信息價值少。
信息熵計算公式:

信息熵公式

(二)信息增益
信息增益是對信息前后變化量的描述。
計算公式:

infoGain = baseEntropy - EntropyAfter

infoGain > 0 ,表明集合信息熵減小,包含的信息更純更有序,價值得到提高。
infoGain < 0,信息變得混沌。
infoGain = 0,信息量沒有變化,但不表明信息沒有變化。
我們要依據樣本特征來分割數據集以使數據變得更加有序的過程就是要求一個使得infoGain> 0的分類特征,而且是在所有的特征中使得infoGain值最大的特征。
在決策樹分類中,數據集包含的分類特征不止一個,那么,在第一次劃分數據集時如何從整個特征集中抽出一個特征?第二次呢。信息增益便是對這種劃分數據集前后信息是更有序了,還是更混亂的度量。
選出取得信息增益最大的特征,以該特征對數據集分類,如果該特征共有n個特征值,那么劃分數據集后會生成n個節點。這些n個節點再計算信息增益,并選出最大的特征,以此往復,直到最終節點僅包含同一類數據為止。
(三)Python代碼實現
1,劃分數據
splitDataSet方法接收待分類的數據集、預選中的分類特征featIndex及特征的值featValue。如果樣本預特征featIndex的值與featValue值相等,則歸集該樣本且移除該分類特征。返回的retDataSet即為移除分類特征的子數據集。

def splitDataSet(dataSet, featIndex, featValue):
    retDataSet = []
    for singleData in dataSet:
        if singleData[featIndex] == featValue:
            reducedFeatVect = singleData[:featIndex]
            reducedFeatVect.extend(single[featIndex + 1:])
            retDataSet.append(reducedFeatVect)
    return retDataSet

2,選出最佳分類特征
試探性選出最佳分類特征的過程是:
第一步,先從數據集的第一列作為分割數據的特征,接著第二列,第三列直到最后一列。取出第一列的所有值,并存入集合以去重復。
第二步,遍歷集合中的分類特征的值,把每一個值傳入splitDataSet方法來判斷該樣本是否應該化為該特征的值代表的同質集,換句話說,與該特征的值相等的歸集到一類。
第三步,對同一個分類特征而言,可能具有不同的值。特征的值有多少個,對應節點分支有多少支。因此,在對一個分類特征計算信息熵大小時,必須把各個特征的值的信息熵相加,這才代表該分類特征所具有的信息熵。
第四步,原信息熵baseEntropy與分類后的信息熵newEntropy相減即求得信息增益。該次迭代求出的信息增益與上次相比較,若大于上次的信息增益,說明集合信息變得更純些(熵減),則把此次信息增益賦給變量bestInfoFain 并把該特征所在列表索引賦給變量bestFeature ,最后返回最佳的分類特征

def chooseBestFeature(dataSet):
    numFeatures = len(dataSet[0]) - 1
    baseEntropy = calcShonnonEnt(dataSet)
    bestInfoGain = 0.0
    bestFeature = -1
    for i in range(numFeatures):
        featList = [ds[i] for ds in dataSet]
        uniqueVals = set(featList)
        newEntropy = 0.0
        for value in uniqueVals:
            subDataSet = splitDataSet(dataSet, i, value)
            prob = float(len(subDataSet)) / len(dataSet)
            newEntropy += prob * calcShannonEnt(subDataSet)
            infoGain = baseEntropy - newEntropy
        if infoGain > bestInfoGain:
            bestInfoGain = infoGain
            bestFeature = i
    return bestFeature

3,計算信息熵

def calcShanonnEnt(dataSet):
    numberEnt = len(dataSet)
    labelCounts = {}
    for feat in dataSet:
        currentLabel = feat[-1]
        if currentLabel not in labelCounts.keys():
            labelCounts[currentLabel] = 0
        labelCounts[currentLabel] += 1
    shannonEnt = 0.0
    for key in labelCounts:
        prob = float(labelCounts[key]) / numberEntries
        shannonEnt -= prob * log(prob, 2)
    return shannonEnt
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,156評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,401評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,069評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,873評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,635評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,128評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,203評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,365評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,881評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,733評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,935評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,475評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,172評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,582評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,821評論 1 282
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,595評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,908評論 2 372

推薦閱讀更多精彩內容

  • 決策樹理論在決策樹理論中,有這樣一句話,“用較少的東西,照樣可以做很好的事情。越是小的決策樹,越優于大的決策樹”。...
    制杖灶灶閱讀 5,888評論 0 25
  • 注:題中所指的『機器學習』不包括『深度學習』。本篇文章以理論推導為主,不涉及代碼實現。 前些日子定下了未來三年左右...
    我偏笑_NSNirvana閱讀 40,063評論 12 145
  • 分類與預測 餐飲企業經常會碰到下面的問題: 如何預測未來一段時間內,哪些顧客會流失,哪些顧客最有可能成為VIP客戶...
    Skye_kh閱讀 6,311評論 3 15
  • “什么是判定樹?”判定樹是一個類似于流程圖的樹結構;其中,每個內部結點表示在一個屬性上的測試,每個分枝代表一個...
    1想得美閱讀 4,346評論 1 0
  • 0603感賞29 穩住,我們能贏!——《王者榮耀》 進入六月,高考季。 忙碌著高考考場的工作,看到高三師生的緊張,...
    文放wf閱讀 304評論 8 5