决策树算法初探

看了些决策树算法的blog,粗略了解了决策树算法是个怎么一回事:决策树的核心点在于找到分裂的属性点,按照熵增益(ID3)最大,或者熵增益率(C4.5)最大来选分裂的属性点。后续包括一些剪枝等等小操做。python

里面最基本的是要计算熵,那么就写一个计算熵值得脚本吧。
直接上代码:算法

#-*- coding:utf-8 -*-
import numpy as np
# Python 实现熵的计算
def calcShannonEnt(dataSet):
    # 数据的个数
    numEntries=len(dataSet)
    print 'numEntries is %s'%str(numEntries)
    #用来去统计每种属性结果的次数
    labelCounts={}
    for featVec in dataSet:
        # 应为想要预测的属性值在list的最后一位,因此用-1去获取属性值得结果
        currentLabel=featVec[-1]
        print currentLabel
        #dic里没有就把它初始化
        if currentLabel not in labelCounts.keys():
            labelCounts[currentLabel]=0
        #计数加一
        labelCounts[currentLabel]+=1
    print labelCounts
    #初始化熵值为0
    shannonEnt=0.0
    for key in labelCounts:
        # 计算每一个属性值的几率
        prob=float(labelCounts[key])/numEntries
        #根据熵计算公式求得信息的熵
        shannonEnt-=prob*np.log2(prob)
    return shannonEnt
#咱们把所想要预测的属性值放在数据的最后
dataSet=np.array([[1,2],[3,2],[5,6]])

print calcShannonEnt(dataSet)


下面是输出结果,很简单的一个程序,就是记数算几率而已。很好很基础。spa

C:\Python27\python.exe D:/pycharmscript/test2.py
numEntries is 3
2
2
6
{2: 2, 6: 1}
0.918295834054code