機器學習之分類與監督學習,樸素貝葉斯分類算法

1.理解分類與監督學習、聚類與無監督學習。

(1)簡述分類與聚類的聯繫與區別。

  分類任務就是通過學習得到一個目標函數f,把每個屬性集x映射到一個預先定義的類標號y中。分類是根據一些給定的已知類別標號的樣本,訓練某種學習機器(即得到某種目標函數),使它能夠對未知類別的樣本進行分類。這屬於supervised learning(監督學習)。通過學習來得到樣本屬性與類標號之間的關係。 
用自己的話來說,就是我們根據已知的一些樣本(包括屬性與類標號)來得到分類模型(即得到樣本屬性與類標號之間的函數),然後通過此目標函數來對只包含屬性的樣本數據進行分類。

  而聚類指事先並不知道任何樣本的類別標號,希望通過某種算法來把一組未知類別的樣本劃分成若干類別,聚類的時候,我們並不關心某一類是什麼,我們需要實現的目標只是把相似的東西聚到一起,這在機器學習中被稱作 unsupervised learning (無監督學習)。通常,人們根據樣本間的某種距離或者相似性來定義聚類,即把相似的(或距離近的)樣本聚爲同一類,而把不相似的(或距離遠的)樣本歸在其他類。聚類的目標:組內的對象相互之間時相似的(相關的),而不同組中的對象是不同的(不相關的)。組內的相似性越大,組間差別越大,聚類就越好。

  分類作爲一種監督學習方法,要求必須事先明確知道各個類別的信息,並且斷言所有待分類項都有一個類別與之對應。但是很多時候上述條件得不到滿足,尤其是在處理海量數據的時候,如果通過預處理使得數據滿足分類算法的要求,則代價非常大,這時候可以考慮使用聚類算法。

(2)簡述什麼是監督學習與無監督學習。

  監督學習:從給定的訓練數據集中學習出一個函數(模型參數),當新的數據到來時,可以根據這個函數預測結果。監督學習的訓練集要求包括輸入輸出,也可以說是特徵和目標。訓練集中的目標是由人標註的。

  無監督學習:輸入數據沒有被標記,也沒有確定的結果。樣本數據類別未知,需要根據樣本間的相似性對樣本集進行分類(聚類,clustering)試圖使類內差距最小化,類間差距最大化。通俗點將就是實際應用中,不少情況下無法預先知道樣本的標籤,也就是說沒有訓練樣本對應的類別,因而只能從原先沒有樣本標籤的樣本集開始學習分類器設計。

 

2.樸素貝葉斯分類算法 實例

利用關於心臟病患者的臨牀歷史數據集,建立樸素貝葉斯心臟病分類模型。

有六個分類變量(分類因子):性別,年齡、KILLP評分、飲酒、吸菸、住院天數

目標分類變量疾病:

–心梗

–不穩定性心絞痛

新的實例:–(性別=‘男’,年齡<70, KILLP=‘I',飲酒=‘是’,吸菸≈‘是”,住院天數<7)

最可能是哪個疾病?

上傳手工演算過程。

 

性別

年齡

KILLP

飲酒

吸菸

住院天數

疾病

1

>80

1

7-14

心梗

2

70-80

2

<7

心梗

3

70-81

1

<7

不穩定性心絞痛

4

<70

1

>14

心梗

5

70-80

2

7-14

心梗

6

>80

2

7-14

心梗

7

70-80

1

7-14

心梗

8

70-80

2

7-14

心梗

9

70-80

1

<7

心梗

10

<70

1

7-14

心梗

11

>80

3

<7

心梗

12

70-80

1

7-14

心梗

13

>80

3

7-14

不穩定性心絞痛

14

70-80

3

>14

不穩定性心絞痛

15

<70

3

<7

心梗

16

70-80

1

>14

心梗

17

<70

1

7-14

心梗

18

70-80

1

>14

心梗

19

70-80

2

7-14

心梗

20

<70

3

<7

不穩定性心絞痛

 

 

3.使用樸素貝葉斯模型對iris數據集進行花分類。

嘗試使用3種不同類型的樸素貝葉斯:

  • 高斯分佈型
  • 多項式型
  • 伯努利型

並使用sklearn.model_selection.cross_val_score(),對各模型進行交叉驗證。

 

"""
    @author Rakers
    @time   2020.05.11
"""

from sklearn.model_selection import cross_val_score #交叉驗證
from sklearn.naive_bayes import GaussianNB  # 高斯分佈型
from sklearn.naive_bayes import MultinomialNB # 多項式型
from sklearn.naive_bayes import BernoulliNB # 伯努利型
from sklearn.datasets import load_iris  #iris數據集
iris = load_iris()

# 高斯分佈型
gnb1 =GaussianNB()  # 構造建立模型
gnb1.fit(iris.data ,iris.target)  # 模型訓練,擬合
scores =cross_val_score(gnb1 ,iris.data ,iris.target ,cv=10)
print("高斯分佈型交叉驗證評分:%.3f " %scores.mean())

# 多項式型
mnb = MultinomialNB()
mnb.fit(iris.data, iris.target)  # g構造模型
scores =cross_val_score(mnb ,iris.data ,iris.target ,cv=10)
print("多項式型交叉驗證評分:%.3f " %scores.mean())

# 伯努利型
bnb = BernoulliNB()
bnb.fit(iris.data, iris.target)  # g構造模型
scores =cross_val_score(bnb ,iris.data ,iris.target ,cv=10)
print("伯努利型交叉驗證評分:%.3f " %scores.mean())

運行截圖

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章