構造決策樹,面對乙個資料集,首先找到具有決定性作用的特徵,對每個特徵進行評估,然後根據特徵劃分資料集。
如果分支下的資料屬於同一型別,即停止,不屬於同一型別,重複劃分資料子集。
採用量化的方法判斷如何劃分資料
在劃分資料集之前之後資訊發生的變化稱為資訊增益,獲得資訊增益最高的特徵就是最好的選擇。
from math import log#math模組中的對數函式
defcalcshannonent
(dataset):
numentries = len(dataset)
labelcounts = {}#計算資料集中資料的個數,這裡是5個
for featvec in dataset:#通過迴圈,featvec=[1,1,'yes']
currentlabel = featvec[-1]#取出這一行的最後乙個數,yes or no
if currentlabel not
in labelcounts.keys():
labelcounts[currentlabel] = 0
labelcounts[currentlabel] += 1
#yes為2 no為3
shannonent = 0.0
for key in labelcounts:
prob = float(labelcounts[key])/numentries
shannonent -= prob * log(prob,2)
return shannonent#計算夏農熵
defcreatedataset
(): dataset = [[1,1,'yes'],
[1,1,'yes'],
[1,0,'no'],
[0,1,'no'],
[0,1,'no']]
labels = ['no su***cing','flippers']
return dataset,labels
主要是計算魚類和非魚類的夏農熵
>>>
import trees
>>>
from imp import reload
>>> reload(trees)
'trees'
from
'e:/python\\trees.py'>
>>> mydat,labels=trees.createdataset()
>>> mydat
[[1, 1, 'yes'], [1, 1, 'yes'], [1, 0, 'no'], [0, 1, 'no'], [0, 1, 'no']]
>>> trees.calcshannonent(mydat)
0.9709505944546686
>>> mydat[0][-1]='maybe'
>>> mydat
[[1, 1, 'maybe'], [1, 1, 'yes'], [1, 0, 'no'], [0, 1, 'no'], [0, 1, 'no']]
>>> trees.calcshannonent(mydat)
1.3709505944546687
>>>
python使用篩選法計算小於給定數字的所有素數
思路 首先列出指定範圍內所有候選數字,然後從前往後依次選擇乙個數字去除以後面所有數字,能夠被整除的肯定不是素數,把這些數字過濾掉,然後重複這個過程,直到選擇的除數大於最大數字的平方根為止。主要演示內建函式filter 和切片的用法,實際上這個演算法的效率並程式設計客棧不是很高。def primes2...
計算和為給定數的連續正整數數列
比如 sn 100 時,總和為100 的連續正整數數列有 1100 218 19 20 21 22 39 10 11 12 13 14 15 16 對於這種演算法的設計,我們最容易想到的就是從 1 到 sn 迴圈遍歷所有的數,對於每個數再迴圈計算是否以這個數為起點總和正好是sn。這種演算法的時間複雜...
Python Keras如何將給定的資料集打亂
給定資料集data,資料集對應的標籤label index i for i in range len data random.shuffle index data data index label label index 1 首先,獲得資料集的所有index,其實就是0,1,2,num 1 這裡的n...