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())