統計學習方法 習題5 1 c4 5實現

2021-07-29 02:15:53 字數 3508 閱讀 8271

題目要求:根據訓練資料集,利用資訊增益比(c4.5演算法)生成決策樹。

資訊增益比演算法是id3演算法的改進:

資訊增益比的定義:

補充:資訊增益計算方式:

**實現(機器學習實戰的改編,儲存為tree.py):

from math import log

import operator

def createdataset():

dataset = [1,0,0,1,0],\

[1,0,0,2,0],\

[1,1,0,2,1],\

[1,1,1,1,1],\

[1,0,0,1,0],\

[2,0,0,1,0],\

[2,0,0,2,0],\

[2,1,1,2,1],\

[2,0,1,3,1],\

[2,0,1,3,1],\

[3,0,1,3,1],\

[3,0,1,2,1],\

[3,1,0,2,1],\

[3,1,0,3,1],\

[3,0,0,1,0]

labels = ['age','job','house','creadit']

return dataset, labels

def calcshannonent(dataset):

numentries = len(dataset)

labelcounts = {}

for featvec in dataset:

currentlabel = featvec[-1]

if currentlabel not in labelcounts.keys():

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

def splitdataset(dataset, axis, value):

retdataset =

for featvec in dataset:

if featvec[axis] == value:

reducedfeatvec = featvec[:axis]

reducedfeatvec.extend(featvec[axis + 1:])

return retdataset

def choosebestfeaturetosplit(dataset):

numfeatures = len(dataset[0]) - 1

baseentropy = calcshannonent(dataset)

bestinfogain = 0.0

bestfeature = -1

for i in range(numfeatures):

featlist = [example[i] for example in dataset]

uniquevals = set(featlist)

newentropy = 0.0

for value in uniquevals:

subdataset = splitdataset(dataset, i, value)

prob = len(subdataset) / float(len(dataset))

newentropy += prob * calcshannonent(subdataset)

infogain = (baseentropy - newentropy) / baseentropy

if (infogain > bestinfogain):

bestinfogain = infogain

bestfeature = i

return bestfeature

def majoritycnt(classlist):

classcount = {}

for vote in classlist:

if vote not in classcount.keys():

classcount[vote] = 0

classcount[vote] += 1

sortedclasscount = sorted(classcount.iteritems(), key=operator.itemgetter(1), reverse=true)

return sortedclasscount[0][0]

def createtree(dataset, labels):

classlist = [example[-1] for example in dataset]

if classlist.count(classlist[0]) == len(classlist):

return classlist[0]

if len(dataset[0]) == 1:

return majoritycnt(classlist)

bestfeat = choosebestfeaturetosplit(dataset)

bestfeatlabel = labels[bestfeat]

mytree = }

del (labels[bestfeat])

featvalues = [example[bestfeat] for example in dataset]

uniquevals = set(featvalues)

for value in uniquevals:

sublabels = labels[:]

mytree[bestfeatlabel][value] = createtree(splitdataset(dataset, bestfeat, value), sublabels)

return mytree

呼叫方式:

import tree

mydat,mylab = tree.createdataset()

mytree = tree.createtree(mydat,mylab)

print mytree

結果和id3演算法效果一樣:

統計學習方法 1 統計學習方法概論

統計學習的主要特點是 1 統計學習以計算機及網路為平台,是建立在計算機及網路之上的 2 統計學習以資料為研究物件,是資料驅動的學科 3 統計學習的目的是對資料進行 與分析 4 統計學習以方法為中心,統計學習方法構建模型並應用模型進行 與分析 5 統計學習是概率論 統計學 資訊理論 計算理論 最優化理...

統計學習方法

這兩天翻了一下這本書,做個筆記,方便下次細看。本書主要講解統計學習中用到的監督學習。介紹了一些模型機器演算法。當參考書不錯,不怎麼適合死磕。第一章 主要介紹機器學習,統計學習的基本步驟,以及常用的表示方法。寫的比較系統,對於這個比較不熟悉的,可以好好看看。因為常用的模型就是這樣表示的,懂了這個看公式...

統計學習方法

第一章 方法概述 統計學習方法三要素 模型,策略,演算法 監督學習的重要問題 分類問題 classification 應用 銀行構建客戶分類模型,網路安全利用日誌資料對入侵檢測,影象處理檢測影象中是否有人臉,手寫識別識別分類手寫數字,網際網路搜尋網頁分類 二類分類評價指標 精確度,召回率,f1值 標...