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())
運行截圖