計算給定資料集的夏農熵

2021-08-21 20:31:37 字數 1622 閱讀 9986

構造決策樹,面對乙個資料集,首先找到具有決定性作用的特徵,對每個特徵進行評估,然後根據特徵劃分資料集。

如果分支下的資料屬於同一型別,即停止,不屬於同一型別,重複劃分資料子集。

採用量化的方法判斷如何劃分資料

在劃分資料集之前之後資訊發生的變化稱為資訊增益,獲得資訊增益最高的特徵就是最好的選擇。

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...