11.分类与监督学习,朴素贝叶斯分类算法

1.理解分类与监督学习、聚类与无监督学习。

简述分类与聚类的联系与区别。

简述什么是监督学习与无监督学习。

区别:

分类是为了确定点的类别,具体有哪些类别是已知的,是监督学习。

聚类是把点成若干类,事先是没有类别的,是一种无监督学习。

联系:

都是为了把点进行一种归类

 

监督学习:从正确的例子中进行的一种学习

无监督学习:在缺乏足够的先验知识,进行的一种机器学习

 

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

不稳定性心绞痛

 

设特征 性别=‘男’,年龄<70, KILLP=‘I',饮酒=‘是’,吸烟≈‘是”,住院天数<7 分别为x1,x2,x3,x4,x5,x6

X为患此病且符合特征的概率,y1为患心梗概率,y2为患不稳定性心绞痛概率。

首先患心梗的概率为Py1=16/20=4/5

患不稳定性心绞痛的概率为Py2=1/5

所以患心梗且性别男的概率即为

Px1|y1=7/16

同样的可以找出患心梗且拥有其他特征的

Px2|y1=4/16=1/4   Px3|y1=9/16     

Px4|y1=3/16   Px5|y1=7/16

Px6|y1=4/16=1/4

 

PX|y1=Px1|y1Px2|y1Px3|y1Px4|y1Px5|y1Px6|y1

 

男的患有心脏病的概率

Px1=8/20

年龄<70患有心脏病的概率

Px2=5/20

······

Px3= 10/20   Px4=4/20  Px5=9/20  Px6=6/20

PX=Px1Px2Px3Px4Px5Px6

 

又由朴素贝叶斯定理可得

可得

 

 

 

患有心梗的概率为:75%

所以患有不稳定性心绞痛的概率为:25%

所以该男子最有可能患有心梗。

 

 

 

3.使用朴素贝叶斯模型对iris数据集进行花分类。

尝试使用3种不同类型的朴素贝叶斯:

  • 高斯分布型
  • 多项式型
  • 伯努利型

并使用sklearn.model_selection.cross_val_score(),对各模型进行交叉验证。

 高斯分布型

from  sklearn.datasets import load_iris
from sklearn.model_selection import cross_val_score
from sklearn.naive_bayes import GaussianNB
iris = load_iris()
gnb = GaussianNB() #建立模型
gnb.fit(iris.data, iris.target) #训练模型
gnb.predict([iris.data[55]])    #分类预测
y_gnb = gnb.predict(iris.data)
print(y_gnb)
#交叉验证
scores=cross_val_score(gnb,iris.data, iris.target, cv=10)
print("高斯分布型的准确率", scores.mean())

运行结果:

 

多项式型

from sklearn.datasets import load_iris
from sklearn.model_selection import cross_val_score
from sklearn.naive_bayes import MultinomialNB
iris = load_iris()
mnb = MultinomialNB()  # 建立模型
mnb.fit(iris.data, iris.target)  # 训练模型
mnb.predict([iris.data[55]])  # 分类预测
y_mnb = mnb.predict(iris.data)
print(y_mnb)
# 交叉验证
scores = cross_val_score(mnb, iris.data, iris.target, cv=10)
print("多项式型的准确率", scores.mean())

 

运行结果:

 

 伯努利型

from  sklearn.datasets import load_iris
from sklearn.model_selection import cross_val_score
from sklearn.naive_bayes import BernoulliNB
iris = load_iris()
bnb = BernoulliNB() #建立模型
bnb.fit(iris.data, iris.target) #训练模型
bnb.predict([iris.data[55]])    #分类预测
y_bnb = bnb.predict(iris.data)
print(y_bnb)
#交叉验证
scores=cross_val_score(bnb,iris.data, iris.target, cv=10)
print("伯努利型准确率", scores.mean())

 

运行结果:

 

 

 

posted @ 2020-05-13 11:22  Seraooo  阅读(184)  评论(0编辑  收藏  举报