分类与监督学习,朴素贝叶斯分类算法
分類與監(jiān)督學(xué)習(xí),樸素貝葉斯分類算法
1.理解分類與監(jiān)督學(xué)習(xí)、聚類與無(wú)監(jiān)督學(xué)習(xí)。
(1) 簡(jiǎn)述分類與聚類的聯(lián)系與區(qū)別。
??????? 分類是按照某種標(biāo)準(zhǔn)給對(duì)象貼標(biāo)簽,再根據(jù)標(biāo)簽來(lái)區(qū)分歸類。
聚類是指事先沒(méi)有“標(biāo)簽”而通過(guò)某種成團(tuán)分析找出事物之間存在聚集性原因的過(guò)程。
?區(qū)別是,分類是事先定義好類別 ,類別數(shù)不變 。分類器需要由人工標(biāo)注的分類訓(xùn)練得到,屬于有指導(dǎo)學(xué)習(xí)范疇。聚類則沒(méi)有事先預(yù)定的類別,類別數(shù)不確定。 聚類不需要人工標(biāo)注和預(yù)先訓(xùn)練分類器,類別在聚類過(guò)程中自動(dòng)生成 。分類適合類別或分類體系已經(jīng)確定的場(chǎng)合,比如按照國(guó)圖分類法分類圖書;聚類則適合不存在分類體系、類別數(shù)不確定的場(chǎng)合,一般作為某些應(yīng)用的前端,比如多文檔文摘、搜索引擎結(jié)果后聚類(元搜索)等。
(2) 簡(jiǎn)述什么是監(jiān)督學(xué)習(xí)與無(wú)監(jiān)督學(xué)習(xí)。
監(jiān)督學(xué)習(xí)中在給予計(jì)算機(jī)學(xué)習(xí)樣本的同時(shí),還告訴計(jì)算各個(gè)樣本所屬的類別。若所給的學(xué)習(xí)樣本不帶有類別信息,就是無(wú)監(jiān)督學(xué)習(xí)。任何一種學(xué)習(xí)都有一定的目的,對(duì)于模式識(shí)? 別來(lái)說(shuō),就是要通過(guò)有限數(shù)量樣本的學(xué)習(xí),使分類器在對(duì)無(wú)限多個(gè)模式進(jìn)行分類時(shí)所產(chǎn)生的錯(cuò)誤概率最小。
在無(wú)監(jiān)督學(xué)習(xí)的情況下,用全部學(xué)習(xí)樣本可以估計(jì)混合概率密度函數(shù),若認(rèn)為每一模式類的概率密度函數(shù)只有一個(gè)極大值,則可以根據(jù)混合概率密度函數(shù)的形狀求出用來(lái)把各類分開的分界面。
2.樸素貝葉斯分類算法 實(shí)例
利用關(guān)于心臟情患者的臨床數(shù)據(jù)集,建立樸素貝葉斯分類模型。
有六個(gè)分類變量(分類因子):性別,年齡、KILLP評(píng)分、飲酒、吸煙、住院天數(shù)
目標(biāo)分類變量疾病:–心梗–不穩(wěn)定性心絞痛
新的實(shí)例:–(性別=‘男’,年齡<70, KILLP=‘I',飲酒=‘是’,吸煙≈‘是”,住院天數(shù)<7)
最可能是哪個(gè)疾病?
實(shí)例數(shù)據(jù)如下表:
實(shí)例結(jié)果:
?
3.編程實(shí)現(xiàn)樸素貝葉斯分類算法
利用訓(xùn)練數(shù)據(jù)集,建立分類模型。
輸入待分類項(xiàng),輸出分類結(jié)果。
可以心臟病情患者的臨床數(shù)據(jù)為例,但要對(duì)數(shù)據(jù)預(yù)處理。
import numpy as np import pandas data=pandas.read_excel('心臟病患者臨床數(shù)據(jù).xlsx') data #對(duì)性別進(jìn)行處理,男為0,女為1 xingbie=[] for i in data['性別']:if i =='男':xingbie.append(0)else:xingbie.append(1) #對(duì)年齡段進(jìn)行預(yù)處理,年齡小于70為1,70-80之間為2,大于80為3 ages=[] for j in data['年齡']:if j =='<70':ages.append(1)elif j =='70-80':ages.append(2)else:ages.append(3) #對(duì)住院天數(shù)進(jìn)行處理,小于7天為1,7-14之間為2,大于14天為3 days=[] for k in data['住院天數(shù)']:if k=='<7':days.append(1)elif k=='7-14':days.append(2)else:days.append(3) #處理后的數(shù)據(jù) data1=data data1['性別']=xingbie data1['年齡']=ages data1['住院天數(shù)']=days #將數(shù)據(jù)轉(zhuǎn)成數(shù)組 data_arr=np.array(data1) data_arr #利用貝葉斯算法對(duì)給定的組別進(jìn)行分類 def NB(xingbie, ages, KILLP, drink, smoke, days):#初始化值x1_y1,x2_y1,x3_y1,x4_y1,x5_y1,x6_y1 = 0,0,0,0,0,0x1_y2,x2_y2,x3_y2,x4_y2,x5_y2,x6_y2 = 0,0,0,0,0,0y1 = 0y2 = 0#計(jì)算為心梗的概率for a in data_arr:if a[6]=='心梗':y1+=1if a[0]==xingbie:x1_y1+=1if a[1]==ages:x2_y1+=1if a[2]==KILLP:x3_y1+=1if a[3]==drink:x4_y1+=1if a[4]==smoke:x5_y1+=1if a[5]==days:x6_y1+=1else:#計(jì)算患有不穩(wěn)定性心絞痛的概率y2+=1if a[0]==xingbie:x1_y2+=1if a[1]==ages:x2_y2+=1if a[2]==KILLP:x3_y2+=1if a[3]==drink:x4_y2+=1if a[4]==smoke:x5_y2+=1if a[5]==days:x6_y2+=1#計(jì)算每種癥狀在心梗下的概率x1_y1, x2_y1, x3_y1, x4_y1, x5_y1, x6_y1 = x1_y1/y1, x2_y1/y1, x3_y1/y1, x4_y1/y1, x5_y1/y1, x6_y1/y1#計(jì)算每種癥狀在不穩(wěn)定性心絞痛的概率x1_y2, x2_y2, x3_y2, x4_y2, x5_y2, x6_y2 = x1_y2/y2, x2_y2/y2, x3_y2/y2, x4_y2/y2, x5_y2/y2, x6_y2/y2#多個(gè)癥狀在心梗下的概率x_y1 = x1_y1 * x2_y1 * x3_y1 * x4_y1 * x5_y1 * x6_y1#多個(gè)癥狀在不穩(wěn)定性心絞痛下的概率x_y2 = x1_y2 * x2_y2 * x3_y2 * x4_y2 * x5_y2 * x6_y2##初始化各個(gè)特征x的值x1,x2,x3,x4,x5,x6=0,0,0,0,0,0for a in data_arr:if a[0]==xingbie:x1+=1if a[1]==ages:x2+=1if a[2]==KILLP:x3+=1if a[3]==drink:x4+=1if a[4]==smoke:x5+=1if a[5]==days:x6+=1lens = len(data_arr)#所有x的可能性x = x1/lens * x2/lens * x3/lens * x4/lens * x5/lens* x6/lens# 分別計(jì)算心梗和不穩(wěn)定性心絞痛的概率y1_x = (x_y1)*(y1/lens)/xprint(y1_x)y2_x = (x_y2)*(y2/lens)/xprint(y2_x)# 判斷是哪種疾病的可能性更大if y1_x > y2_x:print('病人患心梗的可能性更大,可能性為:',y1_x)else:print('病人患不穩(wěn)定性心絞痛的可能性更大,可能性為:',y2_x)# 判斷:性別=‘男’,年齡<70, KILLP=1,飲酒=‘是’,吸煙=‘是”,住院天數(shù)<7 NB(0,1,1,'是','是',1)運(yùn)行結(jié)果:
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/Soooooo/p/9962612.html
總結(jié)
以上是生活随笔為你收集整理的分类与监督学习,朴素贝叶斯分类算法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 2018-2019-20172329 《
- 下一篇: jsp接收 input文本输入框中,无