本文正在参加 人工智能创作者扶持方案

1、分类概念

分类是找出描述和区别数据类或概念的模型,以便运用模型猜测类标号未知的方针类标号

分类一般分为两个阶段:

  • 学习阶段:

    • 树立描述预先界说的数据类或概念集的分类器
    • 练习集供给了每个练习元组的类标号,分类的学习进程也称为监督学习。
  • 分类阶段:运用界说好的分类器进行分类的进程。

分类与猜测是不同的概念,分类是猜测分类(离散、无序)标号,而数值猜测是树立接连值函数模型。分类与具类也是不同的概念,分类是有监督学习,供给了练习元组的类标号;聚类是无监督学习,不依赖有类标号的练习实例。

2、朴素贝叶斯分类

2.1 贝叶斯定理

贝叶斯定理的公式为:

P(h│D)=P(D│h)P(h)P(D)P(ℎ│D)=\frac{P(D│ℎ)P(ℎ)}{P(D)}

式中,D为待测验数据假定类别,P(h|D)是h的似然概率,P(h)是h的先验概率,P(h|D)是h的后验概率,P(D)是D的先验概率。

先看一个示例:一所校园里边有 60% 的男生(boy),40% 的女生(girl) 。男生总是穿长裤(pants),女生则一半穿长裤一半穿裙子。随机选取一个穿长裤的学生,他(她)是女生的概率是多大?

上述描述可方式化为

已知P(Boy)=60%, P(Girl)=40%, P(Pants|Girl)=50%,P(Pants|Boy)=100% 求:P(Girl|Pants)

回答

P(Girl│Pants)=P(Girl)P(Pants│Girl)P(Boy)P(Pants∣Boy)+P(Girl)P(Pants∣Girl)=P(Girl)P(Pants│Girl)P(Pants)P(Girl│Pants)=\frac{P(Girl)P(Pants│Girl)}{P(Boy)P(Pants|Boy)+P(Girl)P(Pants|Girl)}=\frac{P(Girl)P(Pants│Girl)}{P(Pants)}

直观了解:算出校园里边有多少穿长裤的,然后在这些人里边再算出有多少女生

关于上述问题能得到这样的观察知识: 一所校园里边有 60% 的男生(boy),40% 的女生(girl) 。男生总是穿长裤(pants),女生则一半穿长裤一半穿裙子。相同,咱们不能直接观察到随机选取的一个穿长裤的学生,判别出该学生是男生仍是女生。

关于不能直接观察到的部分,往往会提出假定。而关于不确认的事物,往往会有多个假定。

朴素贝叶斯分类器

贝叶斯供给了一种核算假定后验概率P(h|D)的办法,即后验概率与先验概率和似然概率乘积成正比。

2.2 极大后验假定

极大后验假定学习器在候选假定集合H中寻找给定数据D时可能性最大的假定h,h被称为极大后验假定(Maximum a posteriori: MAP)。确认MAP的办法是用贝叶斯公式核算每个候选假定的后验概率,核算式如下:

朴素贝叶斯分类器

朴素贝叶斯分类器

最后一步去掉了P(D),由于它是不依赖于h的常量,或认为任何数据的先验概率相等。

2.3 多维特色的联合概率

已知:方针D是由多个特色组成的向量,那么结合上述极大后验假定,咱们的方针能够写成:

朴素贝叶斯分类器

朴素贝叶斯分类器

朴素贝叶斯分类器

但在这里遇到一个问题:核算P(<a_1,a_2,…,a_n>│ℎ)时,当维度过高时,可用数据变得很稀少,难以获得结果。

2.4 独立性假定

之前提到的数据稀少的问题能够用独立性假定来解决,也便是假定D的特色a_i

之间彼此独立,那么上述公式能够写成:

\begin{aligned} $P(<a_1,a_2,…,a_n>│ℎ)=∏_iP(a_i|ℎ) \end{aligned}
hMAP=max⁡h∈HP(h∣<a1,a2,…,an>)=max⁡h∈HP(<a1,a2,…,an>│h)P(h)=max⁡h∈H∐iP(ai│h)P(h)\begin{aligned} ℎ_{MAP}&=\max_{h\in H}P (ℎ|<a_1,a_2,…,a_n>)\\ &=\max_{h\in H} P(<a_1,a_2,…,a_n>│ℎ)P(ℎ)\\ &=\max_{h\in H} {\textstyle \coprod_{i}^{}P} (a_i│ℎ)P(ℎ) \end{aligned}

进行独立性假定之后,获得估量的P(a_i│ℎ)比P(<a_1,a_2,…,a_n>│ℎ)容易很多。如果D的特色之间不满足彼此独立,朴素贝叶斯分类的结果是贝叶斯分类的近似

3、贝叶斯分类案例

下面的练习集描述了购买电脑的情况统计。练习集的特征包含年纪、收入、喜好、信誉以及购买情况。

id 年纪 收入 喜好 信誉 购买
1
2
3
4
5
6
7
8
9
10
11
12
13
14

测验案例:一个收入中等、信誉度杰出的青年喜好游戏顾客,是否会购买电脑呢?

依据上表的练习集,能够得到如下已购买电脑的练习集。关于如下测验集,判别一个收入中等、信誉度杰出的青年喜好游戏的顾客是否会购买电脑。

id 年纪段 收入情况 喜好 信誉度 购买电脑
3
4
5
7
9
10
11
12
13

首先核算测验会集购买电脑的客户中不同特色的概率:

P(青年∣购买)=2/9=0.222P(收入中等∣购买)=4/9=0.444P(喜好∣购买)=6/9=0.667P(信誉中∣购买)=6/9=0.667P(青年 |购买) = 2/9 = 0.222\\ P(收入中等 |购买) = 4/9 = 0.444\\ P(喜好 |购买) = 6/9 = 0.667\\ P(信誉中 | 购买) =6/9 = 0.667

然后依据如下公式,核算出购买电脑的似然概率:

朴素贝叶斯分类器

P(X∣购买)=0.2220.4440.6670.667=0.044P(X | 购买) = 0.222 0.444 0.667 0.667=0.044

相同,咱们能够得到不购买电脑的练习集。

id 年纪段 收入情况 喜好 信誉度 购买电脑
1
2
6
8
14

那么测验会集不同特色下不购买电脑的概率:

P(青年∣不买)=3/5=0.6P(收入中等∣不买)=2/5=0.4P(喜好∣不买)=1/5=0.2P(信誉中∣不买)=2/5=0.4P(青年 |不买) = 3/5 = 0.6\\ P(收入中等 |不买) = 2/5 = 0.4\\ P(喜好 |不买) = 1/5 = 0.2\\ P(信誉中 |不买) = 2/5 = 0.4

相同,使用上面的公式核算出不购买电脑的似然概率:

朴素贝叶斯分类器

P(X∣不买)=0.60.40.20.4=0.019P(X |不买) =0.6 0.4 0.2 0.4=0.019

用公式P(X|C_i)P(C_i),可得:

P(C买)=9/14=0.643P(C不买)=5/14=0.357P(购买∣X)=0.0440.643=0.028P(不买∣X)=0.0190.357=0.007P(C_买)=9/14=0.643\\ P(C_不买)=5/14=0.357\\ P(购买|X) =0.0440.643=0.028 \\ P(不买|X) = 0.019 0.357=0.007

4、接连数据如何求概率

下表描述的是不同收入情况下是否购买电脑的结果。那么,能否使用表格中的数据猜测收入为121,无游戏喜好、信誉杰出的中年人是否会购买电脑呢?

id 收入 购买
1 125
2 100
3 70
4 120
5 95
6 60
7 220
8 85
9 75
10 90

这里的收入运用接连数据表示,因而不能选用之前的离散数据概率估量办法。关于接连数据,咱们假定不同类别的收入分别服从不同的正态分布,使用参数估量两组正态分布期望和方差,就能够核算出收入为121时不购买电脑的概率,如下所示:

朴素贝叶斯分类器

朴素贝叶斯分类器

5、朴素贝叶斯分类器的特色

  • 特色能够离散、也能够接连
  • 数学根底坚实、分类功率安稳
  • 对缺失和噪声数据不太敏感
  • 特色如果不相关,分类效果很好

6、贝叶斯算法完成鸢尾花分类

6.1 鸢尾花介绍

朴素贝叶斯分类器

鸢尾属(拉丁学名:Iris L.), 单子叶植物纲, 鸢尾科多年生草本植物, 开的花大而美丽, 观赏价值很高。 鸢尾属约300种, Iris数据会集包含了其中的三种: 山鸢尾(Setosa), 杂色鸢尾(Versicolour), 维吉尼亚鸢尾(Virginica), 每种50个数据, 共含150个数据。 在每个数据包含四个特色: 花萼长度,花萼宽度,花瓣长度,花瓣宽度, 可通过这四个特色猜测鸢尾花卉归于 (山鸢尾, 杂色鸢尾, 维吉尼亚鸢尾) 哪一类。

数据会集部分数据如下图所示:

朴素贝叶斯分类器

6.2 分类代码

import sklearn
# 导入高斯朴素贝叶斯分类器
from sklearn.naive_bayes import GaussianNB
from sklearn.model_selection import train_test_split
import numpy as np
import pandas as pd
​
​
data_url = "Iris.csv"
df = pd.read_csv(data_url)
X = df.iloc[:,1:5]
y=df.iloc[:,5]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
# 运用高斯朴素贝叶斯进行核算
######## Begin ########
clf=GaussianNB()
######## End ########
clf.fit(X_train, y_train)
# 评估
y_pred = clf.predict(X_test)
acc = np.sum(y_test == y_pred) / X_test.shape[0]
print("Test Acc:%.3f" % acc)