【Python机器学习】树回归——使用Python的tkinter库创建GUI
机器学习给我们提供了一些强大的工具,能从未知数据中抽取出有用的信息。因此,能否这些信息以易于人们理解的方式呈现十分重要。如果人们可以直接与算法和数据交互,将可以比较轻松的进行解释。其中一个能够同时支持数据呈现和用户交互的方式就是构建一个图形用户界面(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 dataMatdef reDraw(tolS,tolN):pass
def drawNewTree():passroot=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 Figuredef reDraw(tolS,tolN):reDraw.f.clf()reDraw.a=reDraw.f.add_subplot(111)if chkBtnVar.get():if tolN<2:tolN=2myTree=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=10print('enter Integer for tolN')tolNentry.delete(0,END)tolNentry.insert(0,'10')try:tolS=float(tolSentry.get())except:tolS=1.0print('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()方法则构建连续曲线。
实际绘制效果:


相关文章:
【Python机器学习】树回归——使用Python的tkinter库创建GUI
机器学习给我们提供了一些强大的工具,能从未知数据中抽取出有用的信息。因此,能否这些信息以易于人们理解的方式呈现十分重要。如果人们可以直接与算法和数据交互,将可以比较轻松的进行解释。其中一个能够同时支持数据呈现和用户交互的方式就…...
谷歌浏览器网页底图设置为全黑
输入网址:chrome://flags/ 搜索dark,选择Enabled,重启浏览器即可...
Unity | AmplifyShaderEditor插件基础(第二集:模版说明)
目录 一、前言 二、核心模版和URP模版 1.区别介绍 2.自己的模版 三、输出节点 1.界面 2.打开OutPut 3.ShderType 4.ShaderName 5.Shader大块内容 6.修改内容 四、预告 一、前言 内容全部基于以下链接基础以上讲的。 Unity | Shader基础知识(什么是shader…...
【Linux入门】Linux常见指令
目录 前言 一、Linux基本指令 1.ls指令 2.pwd命令 3.cd 指令 4.touch指令 5.mkdir指令 6.rmdir指令 && rm 指令 7.man指令 8.cp指令 9.mv指令 10.cat 11.date 12.top 13.shutdown-关机 14.重要的几个热键 二、Linux扩展指令 总结 前言 Linux指令是在…...
startData
某音startData 记得加入学习群: python爬虫&js逆向3 714283180...
CV每日论文--2024.7.24
1 、AutoAD-Zero: A Training-Free Framework for Zero-Shot Audio Description 中文标题:T2V-CompBench:组合文本到视频生成的综合基准AutoAD-Zero:零样本音频描述的免训练框架 简介:我们的目标是以无需训练的方式为电影和电视剧…...
大语言模型的简易可扩展增量预训练策略
前言 原论文:Simple and Scalable Strategies to Continually Pre-train Large Language Models翻译文件已整理至Github项目Some-Paper-CN,欢迎大家Star! 摘要 大语言模型(LLMs)通常需要在数十亿个tokens上进行预训…...
python学习之异常
在编程中,异常是指程序运行时发生的错误或异常情况,它们可能会打断程序的正常流程。不同的编程语言定义了自己的一套异常类型。在Python中,异常是基于类和对象的,所有的异常都继承自内置的BaseException类。 以下是Python中一些常…...
多张图像实现全景无痕拼接操作
目录 编辑 1,图像拼接的作用 2,实现步骤 3,效果展示 1,图像拼接的作用 视觉扩展:通过拼接,可以将多个视角的图像合并,创造出比单张图片更广阔的视野。 数据整合:在科学研究和地…...
在阿里云ecs上构建一个WordPress博客网站
1、购买ECS 使用抢占式实例,RDS 使用按量付费 2、在安全组的出入方向添加80端口 3、购买一个公网IP绑定该ecs 4、云数据库rds选择按量付费 5、创建一个名为test_user的普通账号 6、创建数据库 7、设置RDS实例白名单 8、远程登录ecs实例 9、安装apache服务及其扩展包…...
安卓应用开发学习:查看手机传感器信息
一、引言 在手机app的开发中经常会用到手机的传感器,在《Android App 开发进阶与项目实战》一书的第10章就介绍了传感器的一些功能和用法。要想使用传感器,首先得知道手机具备哪些传感器。书中有传感器类型取值的说明,并提供了一个查看手机传…...
C语言字符串缺陷
目录 补缺: 正题开始: 思考: 解决方案: 1.string类 2.redis库 简介: 对于处理字符串的好处: 下期预告:内容待定 补缺: 在上期内容的结尾我留下了一个问题,这个问…...
分布式场景中的常见的技术问题及解决,如分布式锁、分布式事务、分布式 session、分布式任务调度
目录 一、分布式锁 二、分布式事务 三、分布式Session 四、分布式任务调度 在分布式场景中,常见的技术问题及其解决方案涉及多个方面,包括分布式锁、分布式事务、分布式session和分布式任务调度。以下是对这些问题的详细探讨: 一、分布式…...
Android笔试面试题AI答之Kotlin(9)
文章目录 39.Kotlin中List与MutableList的区别?ListMutableList使用场景示例 40. Kotlin中实现单例的几种常见方式?1. 懒汉式(线程不安全)2. 懒汉式(线程安全)3. 饿汉式4. 双重校验锁(DCL, Doub…...
C# 不一样的洗牌算法---Simd指令
洗牌算法,以随机打乱数组中元素的位置 测试数据创建 int[] _data; Random rng new Random(); protected override void CreateData() {_data new int[_size];for (int i 0; i < _data.Length; i){_data[i] i;} } 普通打乱数组元素位置 protected overrid…...
LVGL系列3--纯物理(外部)按键,数字键盘控制控件
LVGL系列 一、LVGL移植 LVGL系列1–AT32移植LVGL_V8具体步骤 LVGL系列2–linux lvglv8 vscode 移植 LVGL系列3–纯物理(外部)按键,数字键盘控制控件 文章目录 LVGL系列一、LVGL移植 一、背景方式一:自定义事件发送与处理函数方式二:利用l…...
FPGA开发——UART回环实现之接收模块的设计
一、简介 因为我们本次进行串口回环的实验的对象是FPGA开发板和PC端,所以在接收和发送模块中先编写接收模块,这样可以在后面更好的进行发送模块的验证。(其实这里先编写哪个模块)都不影响,这里看自己心情,反…...
Debezium系列之:记录一次SQLServer数据库数据不采集,恢复采集造成下游承压的情况,以及相对应的详细解决方案
Debezium系列之:记录一次SQLServer数据库数据不采集,恢复采集造成下游承压的情况,以及相对应的详细解决方案 一、背景二、查看CDC表情况三、 排查数据库是否开启代理四、排查表是否开启CDC五、下游承压情况六、解决方案一、背景 Connector状态正常,但几十台SQLServer数据库…...
Linux线程基础学习记录
0.线程特点 (1).线程共享资源:一个进程下的多个线程共享以下资源 可执行的指令 静态数据 进程中打开的文件描述符 当前工作目录 用户ID 用户组ID (2).线程私有资源: 线程ID PC(程序计数器)和相…...
【Python学习-UI界面】PyQt5 小部件12-QStackedWidget 多页显示
功能和 QTabWidget 类似,它也有助于高效利用窗口的客户区域。 QStackedWidget 提供了一个窗口堆栈,每次只能查看一个窗口。它是建立在 QStackedLayout 之上的一个有用的布局。 样式如下: 右键可以变型为QTabWidget...
调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...
高考志愿填报管理系统---开发介绍
高考志愿填报管理系统是一款专为教育机构、学校和教师设计的学生信息管理和志愿填报辅助平台。系统基于Django框架开发,采用现代化的Web技术,为教育工作者提供高效、安全、便捷的学生管理解决方案。 ## 📋 系统概述 ### 🎯 系统定…...
面试高频问题
文章目录 🚀 消息队列核心技术揭秘:从入门到秒杀面试官1️⃣ Kafka为何能"吞云吐雾"?性能背后的秘密1.1 顺序写入与零拷贝:性能的双引擎1.2 分区并行:数据的"八车道高速公路"1.3 页缓存与批量处理…...
C++_哈希表
本篇文章是对C学习的哈希表部分的学习分享 相信一定会对你有所帮助~ 那咱们废话不多说,直接开始吧! 一、基础概念 1. 哈希核心思想: 哈希函数的作用:通过此函数建立一个Key与存储位置之间的映射关系。理想目标:实现…...
快速排序算法改进:随机快排-荷兰国旗划分详解
随机快速排序-荷兰国旗划分算法详解 一、基础知识回顾1.1 快速排序简介1.2 荷兰国旗问题 二、随机快排 - 荷兰国旗划分原理2.1 随机化枢轴选择2.2 荷兰国旗划分过程2.3 结合随机快排与荷兰国旗划分 三、代码实现3.1 Python实现3.2 Java实现3.3 C实现 四、性能分析4.1 时间复杂度…...
ThreadLocal 源码
ThreadLocal 源码 此类提供线程局部变量。这些变量不同于它们的普通对应物,因为每个访问一个线程局部变量的线程(通过其 get 或 set 方法)都有自己独立初始化的变量副本。ThreadLocal 实例通常是类中的私有静态字段,这些类希望将…...
