Machine Learning in action --CART --treeExplore.py

最近在自学机器学习,应导师要求,先把《Machine Learning with R》动手刷了一遍,感觉R真不能算是一门计算机语言,感觉也就是一个功能复杂的计算器。所以这次就决定使用经典教材《Machine Learning in action》。因为开学得换work station ,怕到时候代码又丢了,所以就索性开个博客,把代码上传上来。

因为书上的原代码有很多错误,并且网上的许多博客的代码也是没有改正的,这次我把修正过的代码po上来

version:python3.5

talk is cheap show me the code

函数定义代码


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值