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