决策树算法初探
看了些决策树算法的blog,粗略了解了决策树算法是个怎么一回事:决策树的核心点在于找到分裂的属性点,按照熵增益(ID3)最大,或者熵增益率(C4.5)最大来选分裂的属性点。后续包括一些剪枝等等小操作。
里面最基本的是要计算熵,那么就写一个计算熵值得脚本吧。
直接上代码:
#-*- 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)
下面是输出结果,很简单的一个程序,就是记数算概率而已。很好很基础。
C:\Python27\python.exe D:/pycharmscript/test2.py
numEntries is 3
2
2
6
{2: 2, 6: 1}
0.918295834054