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