简单的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可以更友好的调节参数和模型来训练模型和学习算法。。