机器学习朴素贝叶斯算法+tkinter库界面实现好瓜坏西瓜分类

机器学习朴素贝叶斯算法+tkinter库界面实现好瓜坏西瓜分类

一、界面实现

from tkinter import *
from tkinter import ttk
import NBdef main():win = Tk()win.title('甜的西瓜挑选系统')win.geometry('1000x600')lb2 = Label(win, text="色泽", font="tahoma 12 normal")lb2.grid(column=0, row=4, padx=8, pady=4)def show_data_2(*args):#print(cbx_2.get())passdata2 = ["青绿", "乌黑", "浅白"]cbx_2 = ttk.Combobox(win, width=12, height=8)cbx_2.grid(column=0, row=5)cbx_2.configure(state="readonly")cbx_2["values"] = data2cbx_2.current(0)cbx_2.bind("<<ComboboxSelected>>", show_data_2)lb21 = Label(win, text="根蒂", font="tahoma 12 normal")lb21.grid(column=14, row=4, padx=8, pady=4)def show_data_21(*args):#print(cbx_21.get())passdata21 = ['蜷缩', '硬挺', '稍蜷']cbx_21 = ttk.Combobox(win, width=12, height=8)cbx_21.grid(column=14, row=5)cbx_21.configure(state="readonly")cbx_21["values"] = data21cbx_21.current(0)cbx_21.bind("<<ComboboxSelected>>", show_data_21)lb22 = Label(win, text="敲声", font="tahoma 12 normal")lb22.grid(column=24, row=4, padx=8, pady=4)def show_data_22(*args):#print(cbx_22.get())passdata22 = ['浊响', '清脆', '沉闷']cbx_22 = ttk.Combobox(win, width=12, height=8)cbx_22.grid(column=24, row=5)cbx_22.configure(state="readonly")cbx_22["values"] = data22cbx_22.current(0)cbx_22.bind("<<ComboboxSelected>>", show_data_22)lb23 = Label(win, text="纹理", font="tahoma 12 normal")lb23.grid(column=34, row=4, padx=8, pady=4)def show_data_23(*args):#print(cbx_23.get())passdata23 = ['模糊', '稍糊', '清晰']cbx_23 = ttk.Combobox(win, width=12, height=8)cbx_23.grid(column=34, row=5)cbx_23.configure(state="readonly")cbx_23["values"] = data23cbx_23.current(0)cbx_23.bind("<<ComboboxSelected>>", show_data_23)lb24 = Label(win, text="脐部", font="tahoma 12 normal")lb24.grid(column=40, row=4, padx=8, pady=4)def show_data_24(*args):#print(cbx_24.get())passdata24 = ['凹陷', '平坦', '稍凹']cbx_24 = ttk.Combobox(win, width=12, height=8)cbx_24.grid(column=40, row=5)cbx_24.configure(state="readonly")cbx_24["values"] = data24cbx_24.current(0)cbx_24.bind("<<ComboboxSelected>>", show_data_24)lb25 = Label(win, text="触感", font="tahoma 12 normal")lb25.grid(column=42, row=4, padx=8, pady=4)def show_data_25(*args):#print(cbx_25.get())passdata25 = ['硬滑', '软粘']cbx_25 = ttk.Combobox(win, width=12, height=8)cbx_25.grid(column=42, row=5)cbx_25.configure(state="readonly")cbx_25["values"] = data25cbx_25.current(0)cbx_25.bind("<<ComboboxSelected>>", show_data_25)def predict():a,b,c,d,e,f=cbx_2.get(),cbx_21.get(),cbx_22.get(),cbx_23.get(),cbx_24.get(),cbx_25.get()print(type(a),b,c,d,e,f)testEntry1=[a,b,c,d,e,f]result=NB.testingNB(testEntry1)E1.insert(0, result)b = Button(win, text='预测', font=('KaiTi', 36, 'bold'),  height=1,bg='pink', fg='green', bd=4, width=5, command=predict)b.grid(column=24, row=15, pady=5)L1 = Label(win, text="预测西瓜类型结果")L1.grid(column=40, row=15, pady=10)E1 = Entry(win)E1.grid(column=42, row=15, pady=2)win.mainloop()if __name__ == '__main__':main()

二、朴素贝叶斯算法实现

from numpy import *def loadDataSet():postingList=[['青绿', '蜷缩', '浊响', '清晰', '凹陷', '硬滑'],['乌黑', '蜷缩', '沉闷', '清晰', '凹陷', '硬滑'],['乌黑', '蜷缩', '浊响', '清晰', '凹陷', '硬滑'],['青绿', '蜷缩', '沉闷', '清晰', '凹陷', '硬滑'],['浅白', '蜷缩', '浊响', '清晰', '凹陷', '硬滑'],['青绿', '稍蜷', '浊响', '清晰', '稍凹', '软粘'],['乌黑', '稍蜷', '浊响', '稍糊', '稍凹', '软粘'],['乌黑', '稍蜷', '浊响', '清晰', '稍凹', '硬滑'],['乌黑', '稍蜷', '沉闷', '稍糊', '稍凹', '硬滑'],['青绿', '硬挺', '清脆', '清晰', '平坦', '软粘'],['浅白', '硬挺', '清脆', '模糊', '平坦', '硬滑'],['浅白', '蜷缩', '浊响', '模糊', '平坦', '软粘'],['青绿', '稍蜷', '浊响', '稍糊', '凹陷', '硬滑'],['浅白', '稍蜷', '沉闷', '稍糊', '凹陷', '硬滑'],['乌黑', '稍蜷', '浊响', '清晰', '稍凹', '软粘'],['浅白', '蜷缩', '浊响', '稍糊', '凹陷', '硬滑'],['青绿', '蜷缩', '沉闷', '清晰', '稍凹', '硬滑']]classVec=[1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0]return postingList,classVecdef createVocabList(dataSet):vocabSet=set([])for document in dataSet:vocabSet|=set(document)return list(vocabSet)def setOfWords2Vec(vocabList,inputSet):returnVec=[0]*len(vocabList)for word in inputSet:if word in vocabList:returnVec[vocabList.index(word)]=1else:print('not in vocabulary')return returnVecdef bagOfWords2VecMN(vocabList,inputSet):returnVec=[0]*len(vocabList)for word in inputSet:if word in vocabList:returnVec[vocabList.index(word)]+=1return returnVecdef wordsAll(vocabList,listOPosts):trainMat=[]for postinDoc in listOPosts:trainMat.append(bagOfWords2VecMN(vocabList,postinDoc))return trainMatdef trainND0(trainMatrix,trainCategory):numTrainDocs=len(trainMatrix)numWords=len(trainMatrix[0])pAbusive=sum(trainCategory)/float(numTrainDocs)p0Num=ones(numWords)p1Num=ones(numWords)p0Denom=2.0p1Denom=2.0for i in range(numTrainDocs):if trainCategory[i]==1:p1Num+=trainMatrix[i]p1Denom+=sum(trainMatrix[i])else:p0Num+=trainMatrix[i]p0Denom+=sum(trainMatrix[i])p1Vec=log(p1Num/p1Denom)p0Vec=log(p0Num/p0Denom)return p0Vec,p1Vec,pAbusivedef classifyNB(vec2Classify,p0Vec,p1Vec,pClass1):p1=sum(vec2Classify*p1Vec)+log(pClass1)p0=sum(vec2Classify*p0Vec)+log(1.0-pClass1)if p1>p0:return 1else:return 0def testingNB(testEntry1):listOPosts,listClasses = loadDataSet()myVocabList=createVocabList(listOPosts)trainMat=wordsAll(myVocabList,listOPosts)p0V,p1V,pAb=trainND0(trainMat,listClasses)thisDoc=array(setOfWords2Vec(myVocabList,testEntry1))if classifyNB(thisDoc,p0V,p1V,pAb)=='0':return "坏瓜"else:return "好瓜"if __name__ == '__main__':testEntry1 = ['青绿', '蜷缩', '浊响', '清晰', '凹陷', '硬滑']print(testingNB(testEntry1))

三、运行结果
预测前

在这里插入图片描述
预测后:

在这里插入图片描述
注:本文中存在的不足,请在留言区批评指正,谢谢!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/312022.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《ASP.NET Core 微服务实战》-- 读书笔记(第3章)

第 3 章 使用 ASP.NET Core 开发微服务 微服务定义 微服务是一个支持特定业务场景的独立部署单元。它借助语义化版本管理、定义良好的 API 与其他后端服务交互。它的天然特点就是严格遵守单一职责原则。 为什么要用 API 优先 所有团队都一致把公开、文档完备且语义化版本管理的…

数据结构----------实现最小堆排序

数据结构----------实现最小堆排序 原理&#xff1a; 来源于---------------趣学数据结构 代码&#xff1a; #include<stdio.h> #include<stdlib.h> #define N 65535//最大个数排序 int r[N] { -1,1,4,590,4,2,8,7,5,89,67,5,2,1,67,86,54 };//存储要排序的数,第…

abp vnext2.0之核心组件模块加载系统源码解析

abp vnext是abp官方在abp的基础之上构建的微服务架构,说实话,看完核心组件源码的时候,很兴奋,整个框架将组件化的细想运用的很好,真的超级解耦.老版整个框架依赖Castle的问题,vnext对其进行了解耦,支持AutoFac或者使用.Net Core的默认容器.vnext依然沿用EF core为主,其余ORM为辅…

最大堆和最小堆排序

最大堆和最小堆排序 原理参考趣学数据结构 代码 #include<stdio.h> #include<stdlib.h> int r[] { -1,1,4,590,4,2,8,7,5,89,67,5,2,1,67,86,54 };//存储要排序的数,第一个元素不存储元素赋值为-1 int length sizeof(r) / sizeof(int);//待排序的数的个数 void s…

wordList01

wordList one 如果存在什么问题请批评指正&#xff01;谢谢

《ASP.NET Core 微服务实战》-- 读书笔记(第4章)

第 4 章 后端服务现实中的服务不可能处于真空之中&#xff0c;大多数服务都需要与其他服务通信才能完成功能。我们将这些支持性服务称为后端服务&#xff0c;接下来我们将通过创建一个新的服务并修改之前的团队服务与这个服务通信&#xff0c;以探索如何创建并消费后端服务。微…

WordList02

WordList 2 如果存在什么问题欢迎批评指正&#xff01;谢谢&#xff01;

CentOS7 安装 Jenkins( 构建 Vue 和 dotNET Core )

之前的自动构建工具 Jenkins 是部署在公司内网的 Windows 服务器上&#xff0c;现在武汉处于非常时期&#xff0c;兄弟们都在家自我隔离&#xff0c;为了远程提交的代码能自动构建&#xff0c;需要在外网的 CentOS 服务器上搭建 Jenkins 环境来进行构建工作。目的产品采用前后端…

shell(希尔排序)

shell&#xff08;希尔排序&#xff09; 原理:参考趣学数据结构 代码&#xff1a; #include<stdio.h> #include<stdlib.h> void shellInsert(int b[],int dk,int length) {//希尔排序以dk的增量插入int j;for (int i 1 dk; i < length-1; i) {b[0] b[i];//哨…

[蓝桥杯2019初赛]等差数列-数列

解题思路: 给你n个数&#xff0c;是某个等差数列的一部分&#xff0c;问该等差数列最小有几项&#xff1f;&#xff1a;((最大数−最小数)/d)1((最大数-最小数)/d)1((最大数−最小数)/d)1,其中d是该等差数列所有&#xff08;所有已知数与最小数差值&#xff09;的最大公因数&am…

Dynatrace成功扩展kubernetes全栈可观察性

软件情报公司Dynatrace&#xff08;NYSE&#xff1a;DT&#xff09;在Perform 2020会议上宣布了对Kubernetes支持的新增强功能。Dynatrace可解释的AI引擎DavisTM现在自动获取其他Kubernetes事件和指标&#xff0c;使其能够在整个Kubernetes集群&#xff0c;容器和工作负载的堆栈…

wordList3

wordList3 如果存在什么问题&#xff0c;欢迎批评指正&#xff01;谢谢&#xff01;

[蓝桥杯2019初赛]矩形切割-找规律

代码如下&#xff1a; #include <iostream> using namespace std;int main() {int a, b;int ans 1;cin >> a >> b;while (1) {if (a 1 && b 1 || a b)break;if ( a > b) {int c b;b a;a c;}b b - a;ans;}cout << ans << end…

K8S水平伸缩器 - 自动伸缩微服务实例数量

作者&#xff1a;justmine头条号&#xff1a;大数据达摩院微信公众号&#xff1a;大数据处理系统创作不易&#xff0c;在满足创作共用版权协议的基础上可以转载&#xff0c;但请以超链接形式注明出处。为了方便大家阅读&#xff0c;可以关注头条号或微信公众号&#xff0c;后续…

[蓝桥杯2019初赛]质数-质数筛or 水题

法一&#xff1a; 代码如下&#xff1a; #include <iostream> #include <cmath> using namespace std;bool check(int x) {for (int i 2; i < sqrt(x); i)if (x % i 0)return false;return true; }int main() {int n;int ans 0;for (int i 2; i; i) {if (c…

SqlServer 利用游标批量更新数据

SqlServer 利用游标批量更新数据Intro游标在有时候会很有用&#xff0c;在更新一部分不多的数据时&#xff0c;可以很方便的更新数据&#xff0c;不需要再写一个小工具来做了&#xff0c;直接写 SQL 就可以了Sample下面来看一个实际示例&#xff1a;-- 声明字段变量 DECLARE Re…

math:线性代数之行列式

math&#xff1a;线性代数之行列式 提供解题的方法总结 如果存在什么问题&#xff0c;欢迎批评指正&#xff01;谢谢!

[蓝桥杯2019初赛]旋转-找规律

代码如下&#xff1a; #include <iostream> using namespace std; const int N 110; int a[N][N];int main() {int n, m;cin >> n >> m;for (int i 1; i < n; i)for (int j 1; j < m; j)cin >> a[i][j];for (int i 1; i < m; i){for (in…

《ASP.NET Core 微服务实战》-- 读书笔记(第5章)

第 5 章 创建数据服务选择一种数据存储由于我坚持要尽可能的跨平台&#xff0c;所以我决定选用 Postgres&#xff0c;而不用 SQL Server 以照顾 Linux 或 Mac 电脑的读者构建 Postgres 仓储在本节&#xff0c;我们要升级位置服务让它使用 Postgres为了完成这一过程&#xff0c;…

腾飞答不忘初心的三个问题

去年的时候有同学在微信上问了我3个问题&#xff0c;我觉得非常有代表性&#xff0c;当时没有回答。主要是通过简短的语言无法全面表述可能会产生歧义&#xff0c;所以决定专门写一篇文章来表达一下我的想法&#xff0c;需要说明的是以下内容只是以我个人的经验给大家一些参考。…