最近在自學機器學習,應導師要求,先把《Machine Learning with R》動手刷了一遍,感受R真不能算是一門計算機語言,感受也就是一個功能複雜的計算器。因此此次就決定使用經典教材《Machine Learning in action》。由於開學得換work station ,怕到時候代碼又丟了,因此就索性開個博客,把代碼上傳上來。css
由於書上的原代碼有不少錯誤,而且網上的許多博客的代碼也是沒有改正的,此次我把修正過的代碼po上來python
version:python3.5git
#coding=utf-8
''' #coding=utf-8 '''
Created on Aug 21, 2017
Tree-Based Regression Methods
@author: Edgis
''' from numpy import * from tkinter import * import matplotlib.pyplot as plt import matplotlib matplotlib.use('TkAgg') import regTrees from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg from matplotlib.figure import Figure """ def reDraw(tolS, tolN): pass def drawNewTree(): pass """ def reDraw(tolS, tolN): reDraw.f.clf() #清空以前的圖像 reDraw.a = reDraw.f.add_subplot(111) if chkBtnVar.get(): if tolN <2: #構建模型樹 tolN = 2 myTree = regTrees.createTree(reDraw.rawDat, regTrees.modelLeaf,regTrees.modelErr,(tolS,tolN)) yHat = regTrees.createForeCast(myTree,reDraw.testDat,regTrees.modelTreeEval) else: #構建迴歸樹 myTree = regTrees.createTree(reDraw.rawDat,ops=(tolS,tolN)) yHat = regTrees.createForeCast(myTree,reDraw.testDat) reDraw.a.scatter(reDraw.rawDat[:,0],reDraw.rawDat[:,1],s=5) reDraw.a.plot(reDraw.testDat, yHat, linewidth=2.0) reDraw.canvas.show() def getInput(): try: tolN = int(tolNentry.get()) except: tolN = 10 print("enter Integer for tolN") #清除錯誤的輸入,用默認值代替 tolNentry.delete(0, END) tolNentry.insert(0,'10') try: tolS = float(tolNentry.get()) except: tolS = 1.0 print("enter Float for tolS") tolNentry.delete(0,END) tolNentry.insert(0,'1.0') return tolN, tolS def drawNewTree(): tolN, tolS = getInput() reDraw(tolS ,tolN) root = Tk() Label(root, text ='Plot Place Holder').grid(row=0,columnspan=3) Label(root, text='tolN').grid(row = 1, column=0) tolNentry = Entry(root) tolNentry.grid(row=1,column=1) tolNentry.insert(0,'10') Label(root,text='tolS').grid(row=2,column=0) tolNentry = Entry(root) tolNentry.grid(row=2,column=1) tolNentry.insert(0,'1.0') Button(root,text='ReDraw',command=drawNewTree).grid(row =1, column=2, rowspan=3) chkBtnVar = IntVar() chkBtn = Checkbutton(root, text='Model Tree',variable = chkBtnVar) #複選框 chkBtn.grid(row=3,column=0,columnspan=2) reDraw.rawDat = mat(regTrees.loadDataSet('sine.txt')) reDraw.testDat = arange(min(reDraw.rawDat[:,0]), max(reDraw.rawDat[:,0]), 0.01) reDraw.f = Figure(figsize=(5,4),dpi=100) reDraw.canvas = FigureCanvasTkAgg(reDraw.f, master=root) reDraw.canvas.show() reDraw.canvas.get_tk_widget().grid(row = 0,columnspan=3) #reDraw(1.0,10) root.mainloop()
更多請戳github
https://github.com/Edgis/Machine-learning-in-action/blob/master/treeExplore.pygithub