机器学习基础(三)——信息、信息熵与信息增益

信息:information,信息熵:information entropy,信息增益:information gain(IG)

划分数据集的大原则是:将无序的数据变得更加有序。组织杂乱无章数据的一种方法就是使用信息论度量信息,信息论是量化处理信息的分支科学。

在划分数据集之前之后信息发生的变化称为信息增益,知道如何计算信息增益,我们就可以计算每一个特征值划分数据集获得的信息增益,获得信息增益最高的特征就是最好的选择。

信息、信息熵的定义

如果待分类的数据集可能划分在多个分类之中,则类别 xi 的信息定义为:

l(xi)=log2p(xi)

其中 p(xi) 是该类别的样本所占的比例;

为了计算熵,我们需要计算所有类别所有可能包含的信息期望值(由离散型随机变量的期望计算公式可知),

H=i=1np(xi)log2p(xi)

遍历相乘再相加,可以使用内积计算熵。

信息熵,被用来度量信息的无序程度(信息熵越大,越无序,等于 0 时,意味着全部类别都相同,完全有序)

熵的性质:

  • (1)非负, 0<p(xi)1log2p(xi)0
  • (2)完全有序,也即 p(x)=1H=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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五道口纳什

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值