首页 > 编程语言 >【Python机器学习】树回归——使用Python的tkinter库创建GUI

【Python机器学习】树回归——使用Python的tkinter库创建GUI

时间:2024-08-13 16:28:08浏览次数:16  
标签:tkinter Python GUI grid reDraw root row

机器学习给我们提供了一些强大的工具,能从未知数据中抽取出有用的信息。因此,能否这些信息以易于人们理解的方式呈现十分重要。如果人们可以直接与算法和数据交互,将可以比较轻松的进行解释。其中一个能够同时支持数据呈现和用户交互的方式就是构建一个图形用户界面(GUI)。

利用GUI对回归树调优的基本步骤:

1、收集数据:所提供的文本文件

2、准备数据:用Python解析上述文件,得到数值型数据

3、分析数据:用tkinter构建一个GUI来展示模型和数据

4、训练算法:训练一棵回归树和一颗模型树,并与数据集一起展示

5、测试算法:这里一般不需要测试过程

6、使用算法:GUI使得人们可以在预剪枝时测试不同参数的影响,还可以帮助我们选择模型的类型。

用tkinter创建GUI

Python有很多GUI框架,其中一个易于使用的tkinter,是随Python的标准编译版本发布的。tkinter可以在Windows、Mac OS和大多数的Linux平台上使用。

简答的GUI窗口:

from tkinter import *

root=Tk()
myLabel=Label(root,text='hello')
myLabel.grid()
root.mainloop()

tkinter的GUI由一些小部件组成。所谓小部件,指的是文本框、按钮、标签和复选按钮等对象。

下面将所需要的小部件集成在一起,构建树管理器。建立一个新的Python文件:

from tkinter import *
from numpy import *

def loadDataSet(fileName):
    dataMat=[]
    fr=open(fileName)
    for line in fr.readlines():
        curLine=line.strip().split('\t')
        fltLine=list(map(float,curLine))
        #print(list(fltLine))
        dataMat.append(fltLine)
    return dataMat

def reDraw(tolS,tolN):
    pass
def drawNewTree():
    pass

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)
tolSentry=Entry(root)
tolSentry.grid(row=2,column=1)
tolSentry.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(loadDataSet('test/sine.txt'))
reDraw.testDat=arange(min(reDraw.rawDat[:,0]),max(reDraw.rawDat[:,0]),0.01)
reDraw(1.0,10)
root.mainloop()

上述代码中,先是建立了一组tkinter模块,并用网格布局管理器安排了它们的位置,这里还给出了两个绘制占位符函数。代码中先创建了一个Tk类型的根部件然后插入标签,我们可以使用grid()方法设定行和列的位置,也可以通过设定columnspan和rowspan的值来告诉布局管理器是否允许一个小部件跨行或跨列。除此以外还有其他设置项可供使用。

现在GUI可以按照要求正常运行,下面利用它来绘图。

集成matplotlib和tkinter

matplotlib的构建程序包括一个前端,同时创建一个后端,用于实现绘图和不同应用之间接口。通过改变后端可以将图像绘制在PNG、PDF、SVG等格式的文件上。

下面将设置后端为TkAgg。TkAgg可以在所选GUI框架上调用Agg,把Agg呈现在画布上。我们可以在Tk的GUI上放置一个画布,并用grid()来调整布局。

先用画布来替换绘制占位符,删掉对应标签并添加以下代码:

reDraw.f = Figure(figsize=(5,4), dpi=100) #create canvas
reDraw.canvas = FigureCanvasTkAgg(reDraw.f, master=root)
reDraw.canvas.draw()
reDraw.canvas.get_tk_widget().grid(row=0, columnspan=3)

下面将树创建函数与画布链接起来:

import matplotlib
matplotlib.use('TkAgg')
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=createTree(reDraw.rawDat,modelLeaf,modelErr,ops=(tolS,tolN))
        yHat=createForeCase(myTree,reDraw.testDat,modelTreeEval)
    else:
        myTree=createTree(reDraw.rawDat,ops=(tolS,tolN))
        yHat=createForeCase(myTree,reDraw.testDat)
    reDraw.a.scatter(reDraw.rawDat[:,0].tolist(),reDraw.rawDat[:,1].tolist(),s=5)
    reDraw.a.plot(reDraw.testDat,yHat,linewidth=2.0)
    reDraw.canvas.draw()
def getInputs():
    try:
        tolN=int(tolNentry.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)

上述代码中,一开始导入matplotlib文件并设定后端为TkAgg。

drawNewTree()函数在ReDraw按钮被点击时被调用,它实现了两个功能:1、调用getInputs()方法得到输入框的值;2、利用该值调用reDraw()方法生成图

getInputs()函数试图理解用户的输入并防止程序崩溃。其中tolS期望的输入是浮点数,而tolN期望的输入是整数。为了得到用户输入的文本,可以在Entry部件上调用.get()方法。另外这里使用了try和except模式,如果Python可以把输入文本解析成整数就继续执行,如果不能识别则输出错误信息,同时清空输入框并恢复为默认值。

reDraw()函数的主要目的是把树绘制出来。该函数假定输入是合法的,它首先要做的是清空之前的图像,使得前后两个图像不会重叠。清空时图像的各个子图也都会被清除,所以需要重新添加一个新图。接下来函数会检查复选框是否被选中。根据复选框是否被选中,确定基于tolS和tolN参数构建模型树还是回归树。当树构建完成之后就对测试集testDat进行预测,该测试集与训练集有相同的范围且点的分布均匀。最后,真实数据和预测值都会被绘制出来。具体实现是,真实值采用scatter()方法绘制,而预测值则采用plot()方法绘制,这是因为scatter()方法构建的是离散型散点图,而plot()方法则构建连续曲线。

实际绘制效果:

标签:tkinter,Python,GUI,grid,reDraw,root,row
From: https://blog.csdn.net/weixin_39407597/article/details/141139018

相关文章

  • python 画小提琴图
    我这里有2023年6月-2024年8月每日的温度数据,想画一个小提琴图,看看其中值等信息代码如下:#!usr/bin/envpython#-*-coding:utf-8-*-"""@author:Suyue@file:vilolinpic.py@time:2024/08/13@desc:"""importpandasaspdimportmatplotlib.pyplotaspltimport......
  • 24.python模块
    python中的模块(一)模块的介绍1、python中模块:模块也是一个python文件,也叫.py文件2、一个模块中包含:类、函数、变量、方法等3、模块的结构:4、一个模块能够有逻辑的组织python的代码段二、模块的导入1、import模块名importtimeprint(1)time.sleep(5)print(2)2、fro......
  • python之selenium基础知识
    内容总结自官方文档https://www.selenium.dev/documentation/SeleniumWebDriverWebDriver被设计为一个简单而简洁的编程接口。WebDriver是一个紧凑的面向对象API。它有效地驱动浏览器。Selenium通过使用WebDriver支持市场上所有主要浏览器的自动化。WebDriver定义了......
  • 23.python函数
    (1)len函数:返回字符的长度计算列表的长度、字符长度、元组的长度、字典长度案例:list=[1,2,3,4]print(len(list))#4(2)abs绝对值a=-1print(abs(a))#1(3)sum函数求和print(sum(range(1,101)))list=[1,2,3,4]print(sum(list))#104、max最大值list=[1,2,......
  • 用 Python示例,怎么利用电商api来制定营销策略!
    以下是一个更完整的示例代码,用于使用电商API数据来制定营销策略。在这个示例中,我们不仅获取最畅销的商品,还获取不同价格段的销售分布,以制定更全面的营销策略:importrequestsimportjson#假设这是获取商品销售数据的API端点api_endpoint="https://example-ecommerce-......
  • 本地通过python运行AI大语言模型LLaMa2
    什么是Llama2Llama全称largelanguagemodel, MetaAI公司2023年发布的开源AI大型语言模型,参数7B~65B。最新版本为Llama3。更为详细的介绍可参考,LLaMA-维基百科,自由的百科全书(wikipedia.org)。什么是llama.cpp?一个开源c++库,用c++重写了LLaMa的推理代码,可用于加载......
  • 电脑提示缺失highgui100.dll怎么办?dll的修复指南
    在使用某些应用程序或游戏时,您可能会遇到系统提示“找不到highgui100.dll”或“highgui100.dll缺失”的错误信息。这个错误通常意味着您的系统中缺少了一个重要的动态链接库(DLL)文件,而这个文件对于程序的正常运行是必要的。以下是几个简单步骤来帮助您解决这个问题:1.确认文件......
  • 基于Python训练完成的机器学习模型如何封装成桌面应用
    有时候需要将训练完成的模型封装成桌面应用,本文描述封装成基于Python的桌面应用程序的方法。模型封装是指将模型及其预处理和后处理步骤打包在一起,形成一个独立的服务单元。确保机器学习模型已经训练完成并且能够在本地环境中正确运行。Python有多种GUI库可供选择,如Tkinter、......
  • python 读写excel
    概要通过pandas操作excel示例,读取sheet1,加工后写入sheet2环境:pycharm+python3.8代码示例importpandasaspdimportosdefmockdata(excelfile):ifnotos.path.exists(excelfile):print(f"{excelfile}notexists.")returndf=pd.re......
  • 如何使用镜像源安装python库?【pip安装太慢怎么办?】
    如何使用镜像源安装python库?【pip安装太慢怎么办?】当我们使用pip安装一些python库时,会发现下载速度慢得可怜!使用国内的镜像源可以解决这个问题,让下载速度达到正常的网速。如何修改pip的默认源呢?以清华镜像源为例:pipinstallxxx-ihttps://pypi.tuna.tsinghua.edu.cn/sim......