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

发布时间:2020-08-28 来源: 入党申请 点击:

 机器学习基础(三)—— 信息、信息熵与信息增益 信息:information,信息熵:information entropy,信息增益:information gain(IG)

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

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

 征就是最好的选择。

 信息、信息熵的定义 如果待分类的数据集可能划分在多个分类之中,则类别 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

相关热词搜索:信息 增益 机器

版权所有 蒲公英文摘 www.zhaoqt.net