心得體會:
1。使用字典樹和matplotlib繪圖
2.決策樹可以用二進位制方法『wb+』儲存到文字檔案,用『rb+』從文字檔案提取
#3.2matplotlib註解繪製樹形圖
#使用文字註解繪製樹節點
import
matplotlib
import
matplotlib.pyplot as plt
decisionnode=dict(boxstyle="
sawtooth
",fc="
0.8") #
設定點leafnode=dict(boxstyle="
round4
",fc="
0.8") #
設定點arrow_args=dict(arrowstyle="
<-
") #
設定箭頭
#在圖中新增這些點
defplotnode(nodetxt,centerpt,parentpt,nodetype):
#annotate是在plt的subplot上標記的函式
createplot.ax1.annotate(nodetxt,xy=parentpt,xycoords='
axes fraction
',xytext=centerpt,\
textcoords='
axes fraction
',va="
center
",bbox=nodetype,arrowprops=arrow_args)
#def createplot():
#fig=plt.figure(1,facecolor='white')#影象編號1,背景色白色
#fig.clf() # clear figure清除所有軸,但是視窗開啟,這樣它可以被重複使用
#createplot.ax1=plt.subplot(111,frameon=false)# 1行1列,位置是1的子圖——createplot.ax1是plt子圖的索引,可以通過ax1設計plt子圖
#plotnode('決策節點',(0.5,0.1),(0.1,0.5),decisionnode)
#plotnode('葉節點',(0.8,0.1),(0.0,0.0),leafnode)
#plt.show()
#注意:使用matplotlib時不要用qq輸入法
#createplot()
#構造註解樹
#獲取葉節點的數目
defgetnumleafs(mytree):
numleafs=0
firststr=list(mytree.keys())[0]
seconddict=mytree[firststr]
for key in
seconddict.keys():
if type(seconddict[key])==dict:
numleafs+=getnumleafs(seconddict[key])
else:numleafs+=1
return
numleafs
#獲得樹的層數
defgettreedepth(mytree):
maxdepth=0
firststr=list(mytree.keys())[0]
seconddict=mytree[firststr]
for key in
seconddict.keys():
if type(seconddict[key])==dict:
thisdepth=1+gettreedepth(seconddict[key])
else:thisdepth=1
if thisdepth>maxdepth:maxdepth=thisdepth
return
maxdepth
#獲得一顆樹的資料
defretrievetree():
mydat, labels =createdataset()
mytree =createtree(mydat, labels)
return
mytree
#mytree=retrievetree()
#print(getnumleafs(mytree))
#print(gettreedepth(mytree))
#plottree函式
defplotmidtest(cntrpt,parentpt,txtstring):
xmid=(parentpt[0]-cntrpt[0])/2.0+cntrpt[0]
ymid=(parentpt[1]-cntrpt[1])/2.0+cntrpt[1]
createplot.ax1.text(xmid,ymid,txtstring)
defplottree(mytree,parentpt,nodetxt):
numleafs=getnumleafs(mytree)
depth=gettreedepth(mytree)
firststr=list(mytree.keys())[0]
cntrpt=(plottree.xoff+(1.0+float(numleafs))/2.0/plottree.totalw , plottree.yoff)
plotmidtest(cntrpt,parentpt,nodetxt)
plotnode(firststr,cntrpt,parentpt,decisionnode)
seconddict=mytree[firststr]
plottree.yoff=plottree.yoff-1.0/plottree.totald
for key in
seconddict.keys():
if type(seconddict[key])==dict:
plottree(seconddict[key],cntrpt,str(key))
else
: plottree.xoff=plottree.xoff+1.0/plottree.totalw
plotnode(seconddict[key],(plottree.xoff,plottree.yoff),cntrpt,decisionnode)
plotmidtest((plottree.xoff,plottree.yoff), cntrpt, str(key))
plottree.yoff=plottree.yoff+1.0/plottree.totald
defcreateplot(intree):
fig=plt.figure(1,facecolor='
white
')#建立背景色白色圖
fig.clf()#
清除框架
axprops=dict(xticks=,yticks=)
createplot.ax1=plt.subplot(111,frameon=false,**axprops)#
生成子圖
plottree.totalw=float(getnumleafs(intree))#
建立變數
plottree.totald=float(gettreedepth(intree))#
建立變數
plottree.xoff=-0.5/plottree.totalw
plottree.yoff=1.0plottree(intree,(0.5,1.0),''
) plt.show()
#createplot(retrievetree())
#3-3測試和儲存分類器
def classify(inputtree,featlabels,testvec):#
testvec儲存著對每個featlabel的答案
firststr=list(inputtree.keys())[0]
seconddict=inputtree[firststr]
featindex=featlabels.index(firststr)
for key in
seconddict.keys():
if testvec[featindex]==key:
if type(seconddict[key])==dict:
classlabel=classify(seconddict[key],featlabels,testvec)
else
: classlabel=seconddict[key]
return
classlabel
#使用演算法:決策樹的儲存
defstoretree(inputtree,filename):
import
pickle
fw=open(filename,'
wb') #
二進位制存
pickle.dump(inputtree,fw)
fw.close()
defgrabtree(filename):
import
pickle
fr=open(filename,'
rb') #
#二進位製取
return
pickle.load(fr)
#mytree=retrievetree()
#storetree(mytree,"e:/python/pycharmprojects/機器學習實戰/include/第03章_決策樹/s.txt")
#print(grabtree("e:/python/pycharmprojects/機器學習實戰/include/第03章_決策樹/s.txt"))
機器學習 決策樹
一 基本概念 決策樹 decision tree 是一種基本的分類與回歸方法。決策樹模型呈樹形結構,在分類問題中,表示屬於特徵對例項進行分類的過程,它可以認為是if then規則的集合,也可以認為是電議在特徵空間與類空空上的條件概率分布,其主要優點是模型具有可讀性,分類速度快。決策樹的學習通常包括3...
機器學習 決策樹
我覺得決策樹是機器學習所有演算法中最可愛的了 沒有那麼多複雜的數學公式哈哈 下圖是一棵決策樹,用來判斷西瓜是好瓜還是壞瓜 決策過程中提出的每個判定問題都是都對某個屬性的測試,每個測試結果要麼推導出最終結論,要麼匯出進一步判斷的問題,在上次決策結果限定的範圍內做進一步判斷。從上圖可以看出,葉節點對應決...
機器學習 決策樹
一 演算法簡介 決策樹一般都是自上而下來生成的,每個決策後事件 即自然狀態 都可能引出兩個或多個事件,導致結果的不同,把這種結構分支畫成形狀很像一棵樹的枝幹,故稱為決策樹。決策樹能夠讀取資料集合,並且決策樹很多任務都是為了資料中所蘊含的知識資訊,因此決策樹可以使用不熟悉的資料集合,並從中提取一系列規...