1. 程式人生 > >Python實現計算資訊增益的夏農熵

Python實現計算資訊增益的夏農熵

夏農熵公式:

# -*- 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