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

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

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

聯繫:兩者都是對於想要分析的目標點,都會在數據集中尋找它最近的點,即二者都用到了NN算法。

區別:

  分類:從機器學習的觀點,分類技術是一種有指導的監督學習,即每個訓練樣本的數據對象已經有類標識,通過學習可以形成表達數據對象與類標識間對應的知識。

  聚類:在機器學習中,聚類是一種無指導的無監督學習。也就是說,聚類是在預先不知道欲劃分類的情況下,根據信息相似度原則進行信息聚類的一種方法。

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

監督學習:表示機器學習的數據是帶標記的,這些標記可以包括數據類別、數據屬性及特徵點位置等。這些標記作爲預期效果,不斷修正機器的預測結果。

無監督學習:表示機器學習的數據是沒有標記的。機器從無標記的數據中探索並推斷出潛在的聯繫。

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

不穩定性心絞痛

樸素貝葉斯公式:

 

 計算:

p(實例) = 8/20 * 5/20 * 10/20 * 4/20 * 9/20 * 6/20 = 54/40000

p(心梗 / 實例) = ( 7/16 * 4/16 * 9/16 * 3/16 * 7/16 * 4/16 ) * 16/20 / ( 54/40000 ) ≈ 75%

p(不穩定性心絞痛 / 實例) = ( 1/4 * 1/4 * 1/4 * 1/4 * 2/4 * 2/4 * 1/4 ) * 4/20 / (54 / 40000) ≈ 15%

由於p(心梗 / 實例) > p(不穩定性心絞痛 / 實例) ,所以該實例最可能患心梗

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

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

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

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

##樸素貝葉斯算法
# 導入樸素貝葉斯模型
from sklearn.naive_bayes import GaussianNB, MultinomialNB, BernoulliNB
# 模型交叉驗證
from sklearn.model_selection import cross_val_score
# 導入鳶尾花數據庫
from sklearn.datasets import load_iris

# 導入鳶尾花數據集
iris = load_iris()
x = iris['data']
y = iris['target']

### 高斯分佈型
# 構建模型
GNB_model = GaussianNB()
# 訓練模型
GNB_model.fit(x, y)
# 預測模型
GNB_pre = GNB_model.predict(x)
print("高斯分佈型:")
print("模型準確率:", sum(GNB_pre == y)/len(x))
# 模型交叉驗證得分
GNB_score = cross_val_score(GNB_model, x, y, cv=10)
print("平均精度:%.2f\n" % GNB_score.mean())

### 多項式型
# 構建模型
MNB_model = MultinomialNB()
# 訓練模型
MNB_model.fit(x, y)
# 預測模型
MNB_pre = MNB_model.predict(x)
print("多項式型:")
print("準確率:", sum(MNB_pre == y)/len(x))
# 模型交叉驗證得分
MNB_score = cross_val_score(MNB_model, x, y, cv=10)
print("平均精度:%.2f\n" % MNB_score.mean())

### 伯努利型
BNB_model = BernoulliNB()  # 構建模型
BNB_model.fit(x, y)  # 訓練模型
BNB_pre = BNB_model.predict(x)  # 預測模型
print("伯努利型:")
print("模型準確率:", sum(BNB_pre == y)/len(x))
# 模型交叉驗證得分
BNB_score = cross_val_score(BNB_model, x, y, cv=10)
print("平均精度:%.2f\n" % BNB_score.mean())

 

 

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