机器学习算法/模型——朴素贝叶斯分类

贝叶斯分分类器是一种生成模型,可以处理多分类问题,是一种非线性模型。

0. 本质和概述

0.1 本质

核心:将样本判定为后验概率最大的类

朴素贝叶斯算法,是一种通过根据新样本的已有特征在数据集中的条件概率(后验概率)来判断新样本所属类别的算法,其将样本判定为后验概率最大的类

之所以称之为“朴素”,因为它假设

① 每个特征之间相互独立
② 每个特征同等重要。

注意:因为各个属性间相互独立,所以类条件概率等于每个属性的类条件概率的乘积
在这里插入图片描述

0.2 贝叶斯公式

  • 贝叶斯定理
    在 B 出现的前提下 A 出现的概率,等于 A 和 B 都出现的概率除以 B 出现的概率。
    在这里插入图片描述

我们希望确定一个具有某些特征的样本属于某类标签的概率,通常记为 P (L |特征 )。贝叶斯定理告诉我们,可以直接用下面的公式计算这个概率:
在这里插入图片描述
(L 为某个标签)

  • 直观理解
    打个最简单的比方来理解贝叶斯公式的作用——为什么判断一个新东西属于某种类别(条件概率)可以通过各种类别本身的特性(类条件概率)来完成:

    问题:判断一个金发碧眼高鼻梁的美女来自日本还是俄罗斯。

    显而易见,因为俄罗斯这个分类下的人种数据,绝大多数都是由“金发”、“碧眼”和“高鼻梁”特征的人构成的,而日本却不是。只需要根据先验知识,就可以轻易得出结论,这就是类条件概率的牛B之处。当然,前提是“独立同分布假设”,这是一切的前提。

怎么理解这句话,可以返回去看看贝叶斯公式能如何起作用。

1. 朴素贝叶模型原理

1.1朴素贝叶斯模型:将频率当成概率(不可靠)

“朴素贝叶斯”(Naïve Bayes)既可以是一种算法——朴素贝叶斯算法,也可以是一种模型——朴素贝叶斯分类模型(分类器)。

朴素贝叶斯算法可以直接利用贝叶斯定理来实现。
在这里插入图片描述
在实际应用中,很少有一件事只受一个特征影响的情况,往往影响一件事的因素有多个。假设,影响 B 的因素有 n 个,分别是 b1,b2,…,bn

则 P(A|B) 可以写为:
在这里插入图片描述
求解该式子,最关键的是分子 P(b1,b2,…,bn|A),根据链式法则,分子有:
在这里插入图片描述
上面的求解过程,看起来好复杂,但是,如果从 b1 到 bn 这些特征之间,在概率分布上是条件独立的,也就是说每个特征 bi 与其他特征都不相关。

那么,当 i≠j 时,有 P(bi|A,bj)=P(bi|A) —— 无关条件被排除到条件概率之外。因此,当 b1,b2,…,bn中每个特征与其他 n-1 个特征都不相关时,就有:
在这里插入图片描述
注意:此处的 Z 对应 P( b1,b2,…,bn)。

上式中的 b1 到 bn 是特征(Feature),而 A 则是最终的类别(Class),所以,我们换一个写法即可得到朴素贝斯分类器的模型函数:

在这里插入图片描述

1.2 朴素贝叶斯模型:条件概率的参数估计

  • 贝叶斯公式
    在这里插入图片描述

  • 一般化的贝叶斯公式

    更一般化的情况,假设事件 A 本身又包含多种可能性,即 A 是一个集合:A={A1,A2,…,An},
    那么对于集合中任意的 Ai,贝叶斯定理可用下式表示:
    在这里插入图片描述
    贝叶斯公式是要找出组成发生事件B的各个样本空间,然后预测事件B的发生来自于Ai的概率。

    其中 P(Ai) 称为原因的先验概率。它是在不知道事件B是否发生的情况下获取的概率。
    而 P(Ai | B) 是原因的后验概率。它是在知道了事件B发生的条件下,有了这个进一步的信息后,判断原因 Ai 发生的概率有多大。

    一般地,如果对样本空间做了大于1的划分,即:
    在这里插入图片描述
    不难推断出:
    在这里插入图片描述
    也就是说在获取了进一步的信息B后,原因的后验概率一般大于原因的先验概率

P(classification | data) = P ( c l a s s i f i c a t i o n ) ∗ P ( d a t a ∣ c l a s s i f i c a t i o n ) P ( d a t a ) \frac{P(classification) * P(data | classification)}{P(data)} P(data)P(classification)P(dataclassification)

注:在贝叶斯公式中,要求后验概率 P(classification | data) ,利用贝叶斯公式将其其转化为求解 :
P(classification) * P(data | classification) / P(data)

这次求解模式在机器学习中被称为:生成式(generative models)模式

P(data) 是与类标记无关的量,可以看做是一个常数;

P(classification) 表达了各类样本所占的比例,根据大数定律,当训练集包含了充足的独立同分布样本时,P(classification)可以通过各类样本出现的频率来进行估计。

关键就是求解 P(data | classification) 即 data相对于classification的概率。

2. 朴素贝叶斯的目标函数

  • 类的后验概率 P(c | x)
    也就是我们需要求解的问题
    在这里插入图片描述

  • 类条件概率 P(x | c)

    类条件概率,它等于在训练集中属于类别 c 的所有样本中,所有属性组合的样本出现的概率

    在类所属的特征间相互独立的前提假定下有:

    在这里插入图片描述
    其中,d是样本的所有属性个数。
    这个意思是说,因为各个属性间相互独立,所以类条件概率等于每个属性的类条件概率的乘积

因此,联合上面两个式子,可以得到如下式子:
在这里插入图片描述

  • 目标函数
    由于对所有类别来说,P(x)是相同的,因此贝叶斯分类器的目标函数进一步化简为如下:
    在这里插入图片描述
    其中 c 为所有类别中的每一个,称上面式子为朴素贝叶斯分类器的目标函数

明显地,朴素贝叶斯分类器的训练学习的过程便是基于训练数据,求得类的先验概率P©,并且为每个属性求得类条件概率,然后相乘取最大值的过程。

3. 代码

一种快速创建简易模型的方法就是假设数据服从高斯分布,且变量无协方差(no covariance,指线性无关)。只要找出每个标签的所有样本点均值和标准差,再定义一个高斯分布,就可以拟合模型了。

注:朴素贝叶斯常用的三个模型有:
高斯模型:处理特征是连续型变量的情况
多项式模型:最常见,要求特征是离散数据
伯努利模型:要求特征是离散的,且为布尔类型,即true和false,或者1和0

  • 构造数据
from sklearn.datasets import make_blobs
X, y = make_blobs(100, 2, centers=2, random_state=2, cluster_std=1.5)
plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='RdBu');

在这里插入图片描述

  • 模型拟合
from sklearn.naive_bayes import GaussianNB
model = GaussianNB()
model.fit(X, y)
  • 新数据
# 新数据

rng = np.random.RandomState(0)
Xnew = [-6, -14] + [14, 18] * rng.rand(2000, 2)
ynew = model.predict(Xnew)
  • 可视化并查看决策边界
# 可视化新数据,查看决策边界的位置
plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='RdBu')
lim = plt.axis()
plt.scatter(Xnew[:, 0], Xnew[:, 1], c=ynew, s=20, cmap='RdBu', alpha=0.1)
plt.axis(lim);

在这里插入图片描述

# 可以用 predict_proba 方法计算样本属于某个标签的概率
yprob = model.predict_proba(Xnew)
yprob[-8:].round(2)

# 这个数组分别给出了前两个标签的后验概率

4. 总结

  1. 贝叶斯公式——模型构造
  2. 大数定律——估计 P(label)
  3. 极大似然估计——求解 P(feature | label)
  4. 概率估计的平滑处理——
    4.1 加一平滑法
    把概率计算为对应类别样本中该特征值出现次数 + 1 /对应类别样本总数,来规避除以0的情况
    4.2 拉普拉斯修正

之所以称为“朴素”或“朴素贝叶斯”,是因为如果对每种标签的生成模型进行非常简单的假设,就能找到每种类型生成模型的近似解,然后就可以使用贝叶斯分类。不同类型的朴素贝叶斯分类器是由对数据的不同假设决定的。

参考

  1. 说说贝叶斯分类
  2. 朴素贝叶斯分类器:例子解释
  3. 朴素贝叶斯分类:拉普拉斯修正
  4. 朴素贝叶斯分类器——从贝叶斯定理到分类
  5. 朴素贝叶斯分类器——条件概率的参数估计
  6. 一句话+一张图说清楚朴素贝叶斯算法
  • 0
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您介绍一下朴素贝叶斯算法在新闻分类中的应用及其Sklearn实现。 首先,朴素贝叶斯算法是一种基于贝叶斯定理和特征条件独立假设的分类算法,其主要思想是利用先验概率和条件概率来计算后验概率,从而实现分类。在新闻分类中,我们可以将每篇新闻看作一个样本,将其所属的类别作为标签进行分类。 Sklearn是Python中一个强大的机器学习库,其中包含了朴素贝叶斯分类器的实现。下面是一个使用Sklearn实现新闻分类的示例代码: ```python # 导入所需的库和数据集 from sklearn.datasets import fetch_20newsgroups from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.naive_bayes import MultinomialNB from sklearn.metrics import classification_report # 加载数据集 newsgroups_train = fetch_20newsgroups(subset='train') newsgroups_test = fetch_20newsgroups(subset='test') # 特征提取(使用TF-IDF方法) vectorizer = TfidfVectorizer() X_train = vectorizer.fit_transform(newsgroups_train.data) X_test = vectorizer.transform(newsgroups_test.data) y_train = newsgroups_train.target y_test = newsgroups_test.target # 训练模型 clf = MultinomialNB() clf.fit(X_train, y_train) # 预测并评估模型 y_pred = clf.predict(X_test) print(classification_report(y_test, y_pred, target_names=newsgroups_test.target_names)) ``` 以上代码中,我们首先使用Sklearn提供的`fetch_20newsgroups`函数加载新闻数据集。然后,我们使用`TfidfVectorizer`方法对文本进行特征提取,将其转换为TF-IDF特征向量。接着,我们使用`MultinomialNB`方法训练模型,并使用测试集进行预测和评估。 最后,我们使用`classification_report`方法输出分类结果的准确率、召回率和F1值等指标。在这个示例中,我们使用的是多项式朴素贝叶斯分类器(Multinomial Naive Bayes),它适用于文本分类等离散型数据的分类应用。 希望这个示例代码可以对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值