1.理解分类与监督学习、聚类与无监督学习。
简述分类与聚类的联系与区别。
分类是一种有监督学习,寻找与已知类别距离最近的点,并将其归为同一类,这个过程一般常用算法为KNN算法。
聚类是一种无监督学习,没有已知的类别,需要在所有点中寻找出若干类别,将所有点归为若干类,这个过程一般常用算法为KMeans算法。
联系:(1)分类与聚类都需要通过距离找到最近的点,即二者均用到了NN(Nears Neighbor)算法。
(2)最终都是归为若干类
区别:分类为有监督学习(类别已知)
聚类为无监督学习(类别未知)
(KMeans算法传送门:https://www.cnblogs.com/xiaolan-Lin/p/12694904.html
https://www.cnblogs.com/xiaolan-Lin/p/12715411.html)
简述什么是监督学习与无监督学习。
监督学习相当于数据集中有标签,根据数据集中标记好的数据进行推断功能,通过对已标记数据的学习,利用模型推断出为未标记数据的分类结果(如心悸、先天性心脏病、后天性心脏病等),反之则为无监督学习。无监督学习缺乏足够的先验知识,通过规律以及数据之间的相似性进行学习并归类。
2.朴素贝叶斯分类算法实例
利用关于心脏病患者的临床历史数据集,建立朴素贝叶斯心脏病分类模型。
有六个分类变量(分类因子):性别,年龄、KILLP评分、饮酒、吸烟、住院天数
目标分类变量疾病:
–心梗
–不稳定性心绞痛
新的实例:–(性别=‘男’,年龄<70, KILLP=1,饮酒=‘是’,吸烟≈‘是”,住院天数<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(心梗 | 患者) = [ P(患者 | 心梗) P(心梗) ] / P(患者)
P(不稳定性心绞痛 | 患者) = [ P(患者 | 不稳定性心绞痛) P(不稳定性心绞痛) ] / P(患者)
详细计算:
P(心梗 | 患者) = [ P(患者 | 心梗) P(心梗) ] / P(患者)
= [ P(性别 | 心梗) P(年龄 | 心梗) P(KILLP| 心梗) P(饮酒| 心梗) P(吸烟| 心梗) P(住院天数| 心梗) P(心梗) ] / P(患者)
= [ P(‘男’ | 心梗) P(<70 | 心梗) P(1 | 心梗) P(‘是’ | 心梗) P(‘是’ | 心梗) P(<7 | 心梗) P(心梗) ] / P(患者)
= [( 7/16 x 4/16 x 9/16 x 3/16 x 7/16 x 4/16)x 16/20 ] / P(患者)
= 0.00100 / P(患者)
P(不稳定性心绞痛 | 患者) = P(患者 | 不稳定性心绞痛) P(不稳定性心绞痛) / P(患者)
= [ P(性别 | 不稳定性心绞痛) P(年龄 | 不稳定性心绞痛) P(KILLP| 不稳定性心绞痛) P(饮酒| 不稳定性心绞痛) P(吸烟| 不稳定性心绞痛) P(住院天数| 不稳定性心绞痛) P(不稳定性心绞痛) ] / P(患者)
= [ P(‘男’ | 不稳定性心绞痛) P(<70 | 不稳定性心绞痛) P(1 | 不稳定性心绞痛) P(‘是’ | 不稳定性心绞痛) P(‘是’ | 不稳定性心绞痛) P(<7 | 不稳定性心绞痛) P(不稳定性心绞痛) ] / P(患者)
= [( 1/4 x 1/4 x 1/4 x 1/4 x 2/4 x 2/4)x 4/20 ] / P(患者)
= 0.00019 / P(患者)
P(患者) = P(‘男’ | 性别) P(<70 | 年龄) P(1 | KILLP) P(‘是’ | 饮酒) P(‘是’ | 吸烟) P(<7 | 住院天数)
= 8/20 x 5/20 x 10/20 x 4/20 x 9/20 x 6/20
根据以上计算结果可以判断,由于0.00100 > 0.00019,实例患者患心梗疾病的概率较大。
3.使用朴素贝叶斯模型对iris数据集进行花分类。
尝试使用3种不同类型的朴素贝叶斯:
- 高斯分布型
- 多项式型
- 伯努利型
并使用sklearn.model_selection.cross_val_score(),对各模型进行交叉验证。
1 from sklearn.datasets import load_iris 2 from sklearn.naive_bayes import GaussianNB, MultinomialNB, BernoulliNB 3 from sklearn.model_selection import cross_val_score 4 5 6 def create_dataset(): 7 """ 8 加载鸢尾花数据集 9 """ 10 iris_data = load_iris() 11 feature = iris_data.data 12 labels = iris_data.target 13 return feature, labels 14 15 16 def gnb_model(feature, labels): 17 """ 18 朴素贝叶斯--高斯分布型 19 """ 20 gnb_model = GaussianNB() # 构建高斯模型 21 22 gnb_model.fit(feature, labels) 23 pred = gnb_model.predict(feature) 24 print("==============================") 25 print("高斯分布型模型预测准确有", sum(pred == labels), "组特征") 26 return gnb_model 27 28 29 def mnb_model(feature, labels): 30 """ 31 朴素贝叶斯--多项式型 32 """ 33 mnb_model = MultinomialNB() # 构建高斯模型 34 35 mnb_model.fit(feature, labels) 36 pred = mnb_model.predict(feature) 37 print("==============================") 38 print("多项式型模型预测准确有", sum(pred == labels), "组特征") 39 return mnb_model 40 41 42 def bnb_model(feature, labels): 43 """ 44 朴素贝叶斯--伯努利型 45 """ 46 bnb_model = BernoulliNB() # 构建高斯模型 47 48 bnb_model.fit(feature, labels) 49 pred = bnb_model.predict(feature) 50 print("==============================") 51 print("伯努利型模型预测准确有", sum(pred == labels), "组特征") 52 return bnb_model 53 54 55 def cross_val(model, feature, labels): 56 score = cross_val_score(model, feature, labels, cv=10) 57 print("交叉验证模型准确率为:%.3f" % score.mean()) 58 59 60 if __name__ == "__main__": 61 feature, labels = create_dataset() 62 print("========================朴素贝叶斯=========================") 63 print("原始数据集中有", len(feature), "组特征") 64 gnb = gnb_model(feature, labels) 65 cross_val(gnb, feature, labels) 66 mnb = mnb_model(feature, labels) 67 cross_val(mnb, feature, labels) 68 bnb = bnb_model(feature, labels) 69 cross_val(bnb, feature, labels)
运行结果:
学习链接:https://blog.csdn.net/fisherming/article/details/79509025