機器學習 決策樹 02

2022-07-26 10:24:13 字數 4853 閱讀 7523

心得體會:

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

機器學習 決策樹

我覺得決策樹是機器學習所有演算法中最可愛的了 沒有那麼多複雜的數學公式哈哈 下圖是一棵決策樹,用來判斷西瓜是好瓜還是壞瓜 決策過程中提出的每個判定問題都是都對某個屬性的測試,每個測試結果要麼推導出最終結論,要麼匯出進一步判斷的問題,在上次決策結果限定的範圍內做進一步判斷。從上圖可以看出,葉節點對應決...

機器學習 決策樹

一 演算法簡介 決策樹一般都是自上而下來生成的,每個決策後事件 即自然狀態 都可能引出兩個或多個事件,導致結果的不同,把這種結構分支畫成形狀很像一棵樹的枝幹,故稱為決策樹。決策樹能夠讀取資料集合,並且決策樹很多任務都是為了資料中所蘊含的知識資訊,因此決策樹可以使用不熟悉的資料集合,並從中提取一系列規...