码迷,mamicode.com
首页 > 其他好文 > 详细

《机器学习实战》菜鸟学习笔记(三)决策树

时间:2014-10-04 14:58:46      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   for   sp   div   c   on   log   

老规矩,Talk is cheap, show me your code.

#-*-coding:utf-8-*-
from math import log

def calcShannonEnt(datsSet):
    #长度
    numEntries = len(dataSet)
    #字典统计
    labelCounts = {}
    #遍历特征
    for featVec in dataSet:
        #最后一维特征(分类)
        currentLabel = featVec[-1]
        #如果不在字典中,则添加进字典
        #可以写成labelCounts[labelCount] = labelCounts.get(currentLabel,0) + 1
        if currentLabel not in labelCounts.key():
            labelCounts[currentLabel] = 0
        labelCounts[currentLabel] += 1
    #信息增益
    shannonEnt = 0.0
    #对于每一个分类
    for key in labelCounts:
        #概率,也就是这个分类出现的次数除以总共的分类数量
        prob = float(labelCounts[key])/numEntries
        #计算熵 概率*以二为底概率的对数
        shannonEnt -= prob * log(prob,2)
    return shannonEnt

这段代码很简单,可能对于最后几句话理解起来有些困难。那我们一起来分析一下。

什么是信息增益和熵呢?学过信息论的同学肯定知道,那么对于没有学过的同学呢?不要着急,我们一起来看看。

首先 信息增益和熵是一回事,就是一个事情两个名字而已。那么什么是熵呢?

熵就是信息的期望值,在信息世界,熵越高,则能传输越多的信息,熵越低,则意味着传输的信息越少。ok,那么什么是信息呢?是如何用数学语言描述呢?信息的定义就是:

-ln(p)

很简单是不,那么我们应该怎么理解呢?首先p代表某个分类出现的概率。比如,均匀色子出现6的概率为1/6,硬币正面朝上的概率为1/2。那么又为什么取对数呢?

 

《机器学习实战》菜鸟学习笔记(三)决策树

标签:style   blog   color   for   sp   div   c   on   log   

原文地址:http://www.cnblogs.com/shyustc/p/4005827.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!