決策樹算法初探

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

相關文章
相關標籤/搜索