看了些決策樹算法的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