機器學習實戰之決策樹

2021-07-22 02:07:46 字數 1674 閱讀 8040

1. 熵(entropy)h(s)用來測量乙個資料集s的不確定程度。 h(

s)=−

∑x∈x

p(x)

log2

p(x)

- s -待計算熵的資料集,在id3演算法的每次迭代中會改變

- x -s中類別的集合 - p

(x)-屬於類別x的元素站集合s中總元素的比例 h(

s)=0

,集合s 被完全分到乙個類中。

在id3中,對每乙個屬性熵,熵最小的屬性在本次迭代中用來劃分資料集。

2. 資訊增益(information gain)

資訊增益ig

(a)用來度量資料集s在被屬性a劃分前和劃分後的熵的變化。也即有多少不確定性被減少了。 ig

(a)=

h(s)

−∑t∈

tp(t

)h(t

) - h(s):集合s的熵

- t:資料集s被屬性a劃分後產生的子集 的集合 - p

(t) :屬於子集t的元素個數佔集合s的比例 - h

(t) :子集t的熵

- 在一次迭代中資訊增益最大的屬性用來劃分資料集

2. 常用的獲取列表的方法:

f=[exmaple[0] for exmaple in mydat],返回乙個list

mydat=[ [0,1,2] , [1,1,2] , [1,3,2] ]

f=[0,1,1]

3. matplotlib.pyplot.subplot(*args,**kwargs)

subplot(nrows,ncols,plot_number):把乙個圖分成nrow*ncols個子圖,在plot_number中畫圖

如果這三個引數都小於10,可以寫成subplot(211)

4. matplotlib.pyplot.annotate(*args,**kwargs)

建立注釋:

5. 函式特殊屬性:__dict__

__dict__用來儲存乙個物件的屬性的字典或對映

經常會看到在乙個函式中出現另乙個函式的屬性,如:在plottree中會出先plottree.yoff=…..,在其他函式中也會出現plottree.xoff=….

這樣就可以新增plottree函式的屬性,也可以利用__dict__來新增屬性plottree.\_\_dict\_\_['mul']=mul  ##其中mul可以是乙個函式

通過dir(functionname)可以檢視函式的屬性

6. pickle模組中dump函式

pickle.dump(obj,file[,protocol])將物件obj寫入開啟的檔案物件file中,檔案物件必須具有寫屬性。

fw=open(filename,'w')

pickle.dump(inputtree,fw)

fw.close

#####從檔案中載入時:

fr=open(filename)

tree=pickle.load(fr)

a=[1,2,3]

b=[4,5,6]

a=[1,2,3,[4,5,6]]

a.extend(b)

a=[1,2,3,4,5,6]

機器學習實戰之決策樹

在 機器學習實戰 決策樹這一章的時候,有些地方的 有點看不太懂,看了幾篇部落格,還是未解。最後仔細看書,發現自己不懂資料集的組織方式。希望大家看的時候也注意一下。在決策樹函式呼叫的資料要滿足如下要求 1 資料必須是由列表元素組成的列表,所有的列表元素都要具有相同的資料長度 2 資料 也就是資料集中的...

機器學習實戰之決策樹

1 演算法概述 1.1 結構分析 決策樹是一種依託決策而建立起來的樹,其中,每乙個內部節點表示乙個屬性上的測試,每乙個分支代表乙個測試的結果輸出,每乙個葉子代表一種類別。如上圖所示就是乙個決策樹,首先分析所給資料集是否為同一類別,如果是,那就不用劃分了,如果不是,就尋找劃分資料集最好的特徵進行劃分 ...

機器學習實戰 決策樹

決策樹 2 python語言在函式中傳遞的是列表的引用,在函式內部對列表物件的修改,將會影響該列表物件的整個生存週期。為了消除這個不良影響,我們需要在函式的開始宣告乙個新列表物件。在本節中,指的是在劃分資料集函式中,傳遞的引數dataset列表的引用,為了不影響dataset我們重新宣告了乙個ret...