Python實現計算資訊增益的夏農熵
阿新 • • 發佈:2018-11-07
夏農熵公式:
# -*- coding:utf-8 -*- import math __author__ = 'yangxin' """ 一條資訊的資訊量大小和它的不確定性有直接的關係。比如說,我們要搞清楚一件非常非常不確定的事,或是我們一無所知的事情, 就需要了解大量的資訊。相反,如果我們對某件事已經有了較多的瞭解,我們不需要太多的資訊就能把它搞清楚。 所以,從這個角度,我們可以認為,資訊量的度量就等於不確定性的多少。 """ class ShannonEntropy(object): # 計算給定資料集的夏農墒的函式 def calc_shannon_ent(self, data_set): # 求list的長度,表示計算參與訓練的資料量 num_entries = len(data_set) # 計算分類標籤label出現的次數 label_counts = {} # the number of unique elements and their occurance for featVec in data_set: # 將當前例項的標籤儲存,即每一行資料的最後一個數據代表的是標籤 current_label = featVec[-1] # 為所有可能的分類建立字典,如果當前的健值不存在,則擴充套件字典並將當前健值加入 if current_label not in label_counts.keys(): label_counts[current_label] = 0 label_counts[current_label] += 1 # 對於label標籤的佔比,求出label標籤的夏農墒 shannon_ent = 0.0 for key in label_counts: # 使所有類標籤的發生頻率計算類別出現的概率 prob = float(label_counts[key]) / num_entries shannon_ent -= prob * math.log(prob, 2) return shannon_ent