机器学习朴素贝叶斯算法+tkinter库界面实现好瓜坏西瓜分类
生活随笔
收集整理的這篇文章主要介紹了
机器学习朴素贝叶斯算法+tkinter库界面实现好瓜坏西瓜分类
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
機(jī)器學(xué)習(xí)樸素貝葉斯算法+tkinter庫(kù)界面實(shí)現(xiàn)好瓜壞西瓜分類
一、界面實(shí)現(xiàn)
from tkinter import * from tkinter import ttk import NBdef main():win = Tk()win.title('甜的西瓜挑選系統(tǒng)')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='預(yù)測(cè)', 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="預(yù)測(cè)西瓜類型結(jié)果")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()二、樸素貝葉斯算法實(shí)現(xiàn)
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))三、運(yùn)行結(jié)果
預(yù)測(cè)前
預(yù)測(cè)后:
注:本文中存在的不足,請(qǐng)?jiān)诹粞詤^(qū)批評(píng)指正,謝謝!
總結(jié)
以上是生活随笔為你收集整理的机器学习朴素贝叶斯算法+tkinter库界面实现好瓜坏西瓜分类的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何将u盘格式化FAT32 NTFS E
- 下一篇: 数据结构----------实现最小堆排