树回归--python Tkinter库创建GUI(2)

简单的Tkinter库创建GUI的例子可参考:
http://blog.csdn.net/lilong117194/article/details/78456376

下面是代码:

# -*- coding: utf-8 -*-
"""
Created on Mon Nov 06 10:24:42 2017

"""
from numpy import *
from Tkinter import *
import regTrees  
import matplotlib # 导入matplot文件
matplotlib.use('TkAgg')  # 设置后端TkAgg
# 将TkAgg和matplotlib图链接起来
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg 
from matplotlib.figure import Figure

# 绘制树
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 getInputs(): # 获取用户输入
    try: tolN = int(tolNentry.get()) # 期望输入是整数,在Entry部件上调用.get()方法
    except: # 清除错误用默认值替换
        tolN = 10 
        print "enter Integer for tolN" 
        tolNentry.delete(0, END)  # 清除错误得输入,并恢复默认值
        tolNentry.insert(0,'10')
    try: tolS = float(tolSentry.get())   # 期望输入是浮点数
    except: 
        tolS = 1.0 
        print "enter Float for tolS"
        tolSentry.delete(0, END) 
        tolSentry.insert(0,'1.0')
    return tolN,tolS  # 返回用户的输入值

def drawNewTree():  # 从输入文本框中获取参数
    tolN,tolS = getInputs() # 该方法得到输入框的值
    reDraw(tolS,tolN)  # 调用reDraw绘制图


# 布局GUI代码   
root=Tk()# 创建一个TK类型的根部件 
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)

Label(root, text="tolN").grid(row=1, column=0)  # grid方法设置行和列的位置
tolNentry = Entry(root)      # Entry:允许单行输入的文本输入框
tolNentry.grid(row=1, column=1) # 设置文本框的位置
tolNentry.insert(0,'10')  
Label(root, text="tolS").grid(row=2, column=0)
tolSentry = Entry(root) # 文本输入框放在root中
tolSentry.grid(row=2, column=1)
tolSentry.insert(0,'1.0')
# 点击ReDraw按钮时,就调用drawNewTree()函数
Button(root, text="ReDraw", command=drawNewTree).grid(row=1, column=2, rowspan=3)

chkBtnVar = IntVar()  # 按钮整数值,为了读取Checkbutton的值
chkBtn = Checkbutton(root, text="Model Tree", variable = chkBtnVar) # Checkbutton复选按钮
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(1.0, 10)

root.mainloop()

运行结果:

分类回归树:
这里写图片描述

模型树:
这里写图片描述

构建尽可能大的树:
这里写图片描述

注意:这里的import regTrees用的是《机器学习实战》里的源码,但是有两处需要改动的地方,具体查看:
http://blog.csdn.net/lilong117194/article/details/78444615

通过GUI可以更友好的调节参数和模型来训练模型和学习算法。。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值