<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>第 7 章 朴素贝叶斯 on 《从零学AI指南手册》</title>
		<link>https://mlwithme.github.io/ml/chapter07/</link>
		<description>Recent content in 第 7 章 朴素贝叶斯 on 《从零学AI指南手册》</description>
		<generator>Hugo</generator>
		<language>zh_CN</language>
		
		
		
		
			<atom:link href="https://mlwithme.github.io/ml/chapter07/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>7.1 朴素贝叶斯算法</title>
				<link>https://mlwithme.github.io/ml/chapter07/faf303eb93a241d1/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://mlwithme.github.io/ml/chapter07/faf303eb93a241d1/</guid>
				<description>&lt;p&gt;在前面几章内容中，我们分别介绍了一种回归模型和两种分类模型及模型的改善与泛化。在接下来的这章内容中，我们将介绍下一个新的分类模型——朴素贝叶斯（Naive Bayes, NB）。整个第7章的学习路线如图7-1所示，我们将先以朴素贝叶斯为例来介绍详细介绍贝叶斯算法背后的思想和原理以及如何从零实现，然后再来介绍基于不同条件概率下的贝叶斯算法模型。&lt;/p&gt;&#xA;&lt;div align=center&gt;&lt;img width=&#34;420&#34; src=&#34;https://mlwithme.github.io/images/ml/240427134933.jpg&#34;/&gt; &lt;/div&gt;&lt;center&gt;图 7-1 朴素贝叶斯算法学习路线图&lt;/center&gt;&#xA;&lt;h1 id=&#34;71-朴素贝叶斯算法&#34;&gt;7.1 朴素贝叶斯算法&lt;a class=&#34;anchor&#34; href=&#34;#71-%e6%9c%b4%e7%b4%a0%e8%b4%9d%e5%8f%b6%e6%96%af%e7%ae%97%e6%b3%95&#34;&gt;#&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;h2 id=&#34;711-概念介绍&#34;&gt;7.1.1 概念介绍&lt;a class=&#34;anchor&#34; href=&#34;#711-%e6%a6%82%e5%bf%b5%e4%bb%8b%e7%bb%8d&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;什么是朴素贝叶斯呢？从名字也可以看出，朴素贝叶斯算法与贝叶斯公式有着莫大的关联，说得简单点朴素贝叶斯就是由贝叶斯公式加“朴素”这一条件所构成的。在看贝叶斯算法的相关内容时，相信各位读者一定会被突如其来的数学概念搞得头昏脑涨。例如先验概率（Prior Probability）、后验概率（Posteriori Probability）、极大似然估计（Maximum Likelihood Estimation）、极大后验概率估计（Maximum A Posteriori Estimation）等等，所以接下来我们将先简单地介绍一下这几个概念，让读者先对这部分内容有一个感性的认识，然后继续介绍后面的内容。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;1. 先验概率&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;所谓先验概率指的是根据历史经验得出来的概率。例如可以通过西瓜的颜色、敲击的声音来判断其是否成熟。因为已经有了通过颜色和声音来判断的“经验”，不管这个经验是自己学会的还是别人告诉的，它都是你在执行一项任务之前已经知道的信息。又如在某二分类数据集中，其中正样本有4个，负样本有6个，通过这个数据集能够学习到的先验知识便是任取一个样本，其为正样本的可能性为40%，为负样本的可能性为60%。最后再举个例子，假如办公室失窃了，理论上每个人都可能是小偷，但可以根据对每个人的了解分析得出一个可能性，例如张三偷窃的可能性为20%，李四偷窃的可能性为30%，王五偷窃的可能性为50%，而这就被称为先验概率，它是通过历史经验得来的。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;2. 后验概率&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;所谓后验概率指的是通过贝叶斯公式推断得到的结果。例如上述例子中，不可能因为负样本出现的可能性为60%就判定任意取出的样本为负样本，也不能因为王五偷窃的可能性最大就判定每次办公室失窃都是由他所为。先验知识只能帮助我们先取得一个大致的判断，而事实情况需要根据先验概率和条件概率进行计算。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;3. 极大后验概率估计&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;一言以蔽之，极大后验概率指的是在所有后验概率中选择其中最大的一个。例如上述例子中，根据先验概率和条件概率便可以计算出每个样本属于正样本还是负样本的后验概率。最后在判断该样本属于何种类别时，挑选后验概率最大的类别即可。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;4. 极大似然估计&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;所谓极大似然估计（最大似然估计）指的是用来估计使当前已知结果最有可能发生的模型参数值（参见3.4.3节）。例如上述例子中，已知的当前结果为正样本有4个，负样本有6个。那么什么样的模型参数能够使这一结果最可能发生呢？此时只需最大化式(7-1)即可。&lt;/p&gt;&#xA;$$&#xA;\left( \begin{matrix}&#xA;  10 \\ &#xA;  4 \\ &#xA;\end{matrix} \right){{p}^{4}}{{(1-p)}^{6}}\tag{7-1}&#xA;$$&lt;p&gt;&#xA;其中，$p$ 为属于正样本的概率。&lt;/p&gt;&#xA;&lt;h2 id=&#34;712-朴素贝叶斯原理&#34;&gt;7.1.2 朴素贝叶斯原理&lt;a class=&#34;anchor&#34; href=&#34;#712-%e6%9c%b4%e7%b4%a0%e8%b4%9d%e5%8f%b6%e6%96%af%e5%8e%9f%e7%90%86&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;由贝叶斯公式可知&#xA;&lt;/p&gt;&#xA;$$&#xA;P(B|A)=\frac{P(AB)}{P(A)}\tag{7-2}&#xA;$$&lt;p&gt;&#xA;假设$B$为最终的分类标签，$A$为一系列的特征属性，那么在使用朴素贝叶斯进行样本分类时，实际计算的是每个样本在当前的特征取值为$A$的情况下，它属于类别$B$的概率，因此，当进一步计算出特征值$A$属于每个类别的概率后，再挑选概率值最大时所对应的类别即可作为该样本的类标。但是，在实际情况中对于$A$和$B$之间的联合概率分布$P(AB)$并不知道，说得直白点就是我们不知道数据集的生成规则，但是可通过先验概率分布$P(B)$乘以条件概率分布$P(A|B)$来得到联合分布，即公式(7-2)可转换为&#xA;&lt;/p&gt;&#xA;$$&#xA;P(B|A)=\frac{P(B)P(A|B)}{P(A)}\tag{7-3}&#xA;$$&lt;p&gt;&#xA;现在假设输入空间$\mathcal{X}\subseteq R^n$，为$n$维向量的集合，输出空间为类标记$\mathcal{Y}=\{{{c}_{1}},{{c}_{2}},...,{{c}_{K}}\}$，输入为特征向量$x\in\mathcal{X}$，输出为类标记$y\in \mathcal{Y}$。同时，$X$ 是定义在输入空间$\mathcal{X}$上的随机向量，$Y$是定义在输出空间$\mathcal{Y}$上的随机变量，也就是说$X$是一个$m\times n$的矩阵，$y$为类标签。$P(X,Y)$是$X$和$Y$的联合概率分布，训练集$T=\{(x_1,y_1),(x_2,y_2),…,(x_m,y_m)\}$由$P(X,Y)$独立同分布产生。&lt;/p&gt;&#xA;&lt;p&gt;根据上面的分析可知，可以通过学习数据的先验分布，再学习数据的条件概率分布，即可得到联合概率分布$P(X,Y)$。具体地，对于每个类别来讲其先验概率分布为&#xA;&lt;/p&gt;&#xA;$$&#xA;P(Y={{c}_{k}})=\frac{\#{{c}_{k}}}{m},k=1,2,...,K\tag{7-4}&#xA;$$&lt;p&gt;&#xA;其中，$\#{{c}_{k}}$表示该类别一共有多少个样本，$m$表示样本总数。&lt;/p&gt;&#xA;&lt;p&gt;同时，对于已知类标下的条件概率分布为&#xA;&lt;/p&gt;&#xA;$$&#xA;P(X=x|Y={{c}_{k}})=P({{X}^{(1)}}={{x}^{(1)}},...,{{X}^{(n)}}={{x}^{(n)}}|Y={{c}_{k}})\tag{7-5}&#xA;$$&lt;p&gt;&#xA;其中，${{x}^{(i)}}$表示第$i$个特征的取值。&lt;/p&gt;&#xA;&lt;p&gt;从式(7-5)可知，在实际情况中我们并不知道对应的条件概率，因此朴素贝叶斯对条件概率分布又做了一个条件独立性假设，即$P(AB|D)=P(A|D)P(B|D)$，而这也是“朴素”一词的由来。故，式(7-5)可改写为&#xA;&lt;/p&gt;&#xA;$$&#xA;P(X=x|Y={{c}_{k}})=\prod\limits_{i=1}^{n}{P}({{X}^{(i)}}={{x}^{(i)}}|Y={{c}_{k}})\tag{7-6}&#xA;$$&lt;p&gt;&#xA;由此，根据式(7-3)的分析可知，对于已知特征属性在$X=x$的条件下，其属于类别$Y=c_k$的后验概率为&#xA;&lt;/p&gt;</description>
			</item>
			<item>
				<title>7.2 贝叶斯估计</title>
				<link>https://mlwithme.github.io/ml/chapter07/842c7b8684c747d2/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://mlwithme.github.io/ml/chapter07/842c7b8684c747d2/</guid>
				<description>&lt;h1 id=&#34;72-贝叶斯估计&#34;&gt;7.2 贝叶斯估计&lt;a class=&#34;anchor&#34; href=&#34;#72-%e8%b4%9d%e5%8f%b6%e6%96%af%e4%bc%b0%e8%ae%a1&#34;&gt;#&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;p&gt;在介绍完7.1节中的内容后，相信各位读者对朴素贝叶斯算法的原理应该有了清楚地认识，但还有一个不能忽略的问题就是，当训练集不充分的情况下，某个维度的条件概率缺失时该怎么处理。例如在7.1.3节的示例中，如果条件概率$P(X^{(3)}=D|Y=1)=0$，即训练集中不存在这一情况，而在测试的数据样本中却存在这种情况该如何处理呢？如果此时仍旧将这种情况下的条件概率看作0，则在预测的时候将会产生很大的错差。&lt;/p&gt;&#xA;&lt;h2 id=&#34;721-平滑处理&#34;&gt;7.2.1 平滑处理&lt;a class=&#34;anchor&#34; href=&#34;#721-%e5%b9%b3%e6%bb%91%e5%a4%84%e7%90%86&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;通常，解决这类问题的一个有效办法就是在各个估计中加入一个平滑项（Smoothing Parameter），则此时先验概率和条件概率的计算方法为&#xA;&lt;/p&gt;&#xA;$$&#xA;{{P}_{\lambda }}(Y={{c}_{k}})=\frac{\sum\limits_{i=1}^{m}{I}({{y}_{i}}={{c}_{k}})+\lambda }{m+K\lambda }\tag{7-20}&#xA;$$$$&#xA;{{P}_{\lambda }}({{X}^{(j)}}={{a}_{jl}}|Y={{c}_{k}})=\frac{\sum\limits_{i=1}^{m}{I}(x_{i}^{(j)}={{a}_{jl}},{{y}_{i}}={{c}_{k}})+\lambda }{\sum\limits_{i=1}^{m}{I}({{y}_{i}}={{c}_{k}})+{{S}_{j}}\lambda }\tag{7-21}&#xA;$$&lt;p&gt;其中$K$表示数据集分类的类别数；$S_j$表示第$j$维特征的取值情况数； $\lambda\geq0$，并且当$\lambda=1$时称为拉普拉斯平滑（Laplace Smoothing），这也是常用的做法。&lt;/p&gt;&#xA;&lt;p&gt;同时，当$\lambda&gt;0$时分别称式(7-20)和式(7-21)为先验概率和条件概率的贝叶斯估计，并且可以发现，当$\lambda=0$时，就是极大似然估计。&lt;/p&gt;&#xA;&lt;h2 id=&#34;722-计算示例&#34;&gt;7.2.2 计算示例&lt;a class=&#34;anchor&#34; href=&#34;#722-%e8%ae%a1%e7%ae%97%e7%a4%ba%e4%be%8b&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;接下来，将第7.1.3节中的数据使用拉普拉斯平滑（$\lambda=1 $）再来计算一次。在计算之前我们知道，此时类别数$K=2,S_1=2,S_2=2,S_3=3$。&lt;/p&gt;&#xA;&lt;p&gt;根据表7-1和式(7-20)易知，各类别的先验概率分别为&#xA;&lt;/p&gt;&#xA;$$&#xA;P(Y=0)=\frac{6}{15+2\cdot 1},\ \ P(Y=1)=\frac{11}{15+2\cdot1}\tag{7-22}&#xA;$$&lt;p&gt;&#xA;条件概率为&lt;/p&gt;&#xA;$$&#xA;\begin{aligned}&#xA;  &amp; P({{X}^{(1)}}=0|Y=0)=\frac{5}{5+2\cdot1},P({{X}^{(1)}}=1|Y=0)=\frac{2}{7} \\[1ex] &#xA; &amp; P({{X}^{(2)}}=0|Y=0)=\frac{5}{7},P({{X}^{(2)}}=1|Y=0)=\frac{2}{7} \\[1ex]  &#xA; &amp; P({{X}^{(3)}}=D|Y=0)=\frac{2}{8},P({{X}^{(3)}}=S|Y=0)=\frac{2}{8} \\[1ex]  &#xA; &amp; P({{X}^{(3)}}=T|Y=0)=\frac{4}{8},P({{X}^{(1)}}=0|Y=1)=\frac{4}{12} \\[1ex]  &#xA; &amp; P({{X}^{(1)}}=1|Y=1)=\frac{8}{12},P({{X}^{(2)}}=0|Y=1)=\frac{5}{12} \\[1ex]  &#xA; &amp; P({{X}^{(2)}}=1|Y=1)=\frac{7}{12},P({{X}^{(3)}}=D|Y=1)=\frac{3}{13} \\[1ex]  &#xA; &amp; P({{X}^{(3)}}=S|Y=1)=\frac{4}{13},P({{X}^{(3)}}=T|Y=1)=\frac{6}{13}  &#xA;\end{aligned}\tag{7-23}&#xA;$$&lt;p&gt;&#xA;计算出属于各个类别的后验概率为&#xA;&lt;/p&gt;&#xA;$$&#xA;\begin{aligned}&#xA;  &amp; P(Y=0|X=x) \\[1ex] &#xA; &amp; =P(Y=0)\cdot P({{X}^{(1)}}=0|Y=0)\cdot P({{X}^{(2)}}=1|Y=0)\cdot P({{X}^{(3)}}=D|Y=0) \\[1ex] &#xA; &amp; =\frac{6}{17}\cdot \frac{5}{7}\cdot \frac{2}{7}\cdot \frac{2}{8}\approx 0.02  &#xA;\end{aligned}\tag{7-24}&#xA;$$$$&#xA;\begin{aligned}&#xA;  &amp; P(Y=1|X=x) \\[1ex] &#xA; &amp; =P(Y=1)\cdot P({{X}^{(1)}}=0|Y=1)\cdot P({{X}^{(2)}}=1|Y=1)\cdot P({{X}^{(3)}}=D|Y=1) \\[1ex] &#xA; &amp; =\frac{11}{17}\cdot \frac{4}{12}\cdot \frac{7}{12}\cdot \frac{3}{13}\approx 0.03 \\[1ex] &#xA;\end{aligned}\tag{7-25}&#xA;$$&lt;p&gt;于是我们同样可以得出，样本$x=(0,1,D)$属于$y=1$的可能性最大。&lt;/p&gt;</description>
			</item>
			<item>
				<title>7.3 朴素贝叶斯实现</title>
				<link>https://mlwithme.github.io/ml/chapter07/724bf42b09bb440e/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://mlwithme.github.io/ml/chapter07/724bf42b09bb440e/</guid>
				<description>&lt;h1 id=&#34;73-朴素贝叶斯实现&#34;&gt;7.3 朴素贝叶斯实现&lt;a class=&#34;anchor&#34; href=&#34;#73-%e6%9c%b4%e7%b4%a0%e8%b4%9d%e5%8f%b6%e6%96%af%e5%ae%9e%e7%8e%b0&#34;&gt;#&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;p&gt;经过前面两个小节内容的介绍，对于朴素贝叶斯算法的原理我们已经有了清晰的认识。在本节内容中，我们将开始分步对各个部分的实现进行详细地介绍。同时，需要说明的是以下实现代码均参考自sklearn 0.24.0 中的&lt;code&gt;CategoricalNB&lt;/code&gt;模块，只是对部分处理逻辑进行了修改与简化，完整代码见 &lt;code&gt;AllBooKCode/Chapter07/C01_naive_bayes_category.py&lt;/code&gt;  文件。&lt;/p&gt;&#xA;&lt;h2 id=&#34;731-特征计数实现&#34;&gt;7.3.1 特征计数实现&lt;a class=&#34;anchor&#34; href=&#34;#731-%e7%89%b9%e5%be%81%e8%ae%a1%e6%95%b0%e5%ae%9e%e7%8e%b0&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;通过7.1节的内容可知，不管是计算先验概率还是条件概率，在这之前都需要先统计训练集中各个样本及样本特征取值的分布情况。因此，这里首先需要初始化相关的计数器，然后再对样本和特征取值的分布情况进行统计。&lt;/p&gt;&#xA;&lt;p&gt;具体地，对于计数器的初始化工作实现过程，示例代码如下：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#40a070&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#007020;font-weight:bold&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#0e84b5;font-weight:bold&#34;&gt;MyCategoricalNB&lt;/span&gt;(&lt;span style=&#34;color:#007020&#34;&gt;object&lt;/span&gt;):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#40a070&#34;&gt;2&lt;/span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#40a070&#34;&gt;3&lt;/span&gt;     &lt;span style=&#34;color:#007020;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#06287e&#34;&gt;__init__&lt;/span&gt;(&lt;span style=&#34;color:#007020&#34;&gt;self&lt;/span&gt;, alpha&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#40a070&#34;&gt;1.0&lt;/span&gt;):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#40a070&#34;&gt;4&lt;/span&gt;         &lt;span style=&#34;color:#007020&#34;&gt;self&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;alpha &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; alpha&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#40a070&#34;&gt;5&lt;/span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#40a070&#34;&gt;6&lt;/span&gt;     &lt;span style=&#34;color:#007020;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#06287e&#34;&gt;_init_counters&lt;/span&gt;(&lt;span style=&#34;color:#007020&#34;&gt;self&lt;/span&gt;):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#40a070&#34;&gt;7&lt;/span&gt;         &lt;span style=&#34;color:#007020&#34;&gt;self&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;class_count_ &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; np&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;zeros(&lt;span style=&#34;color:#007020&#34;&gt;self&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;n_classes, dtype&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;np&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;float64)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#40a070&#34;&gt;8&lt;/span&gt;         &lt;span style=&#34;color:#007020&#34;&gt;self&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;category_count_ &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; [np&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;zeros((&lt;span style=&#34;color:#007020&#34;&gt;self&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;n_classes, &lt;span style=&#34;color:#40a070&#34;&gt;0&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#40a070&#34;&gt;9&lt;/span&gt;                                 &lt;span style=&#34;color:#007020;font-weight:bold&#34;&gt;for&lt;/span&gt; _ &lt;span style=&#34;color:#007020;font-weight:bold&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#007020&#34;&gt;range&lt;/span&gt;(&lt;span style=&#34;color:#007020&#34;&gt;self&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;n_features_)]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在上述代码中，第3~4行是初始化平滑项系数&lt;code&gt;alpha&lt;/code&gt;。第7行&lt;code&gt;class_count_&lt;/code&gt;被初始化成了一个形状为&lt;code&gt;[n_classes,]&lt;/code&gt;的全零向量，其中&lt;code&gt;n_classes&lt;/code&gt;表示分类的类别数量，而每个维度分别表示每个类别的样本数量（例如&lt;code&gt;[2,2,3]&lt;/code&gt;表示0、1、2这3个类别的样本数分别是2、2、3），其目的是后续用于计算每个类别的先验概率。第8行&lt;code&gt;category_count_&lt;/code&gt;被初始化成了一个包含有&lt;code&gt;n_features_&lt;/code&gt;个元素的列表，其中&lt;code&gt;n_features_&lt;/code&gt;表示数据集的特征维度数量，同时&lt;code&gt;category_count_&lt;/code&gt;中每个元素的形状是&lt;code&gt;[n_classes,0]&lt;/code&gt;（后续每个元素将会更新为&lt;code&gt;[n_classes,len(X_i)]&lt;/code&gt;的形状，&lt;code&gt; len(X_i)&lt;/code&gt;表示&lt;code&gt;X_i&lt;/code&gt;这个特征的取值情况数量）；而&lt;code&gt;category_count_&lt;/code&gt;的作用是记录在各个类别下每个特征变量中各种取值情况的数量，例如&lt;code&gt;category_count_[i][j][k]&lt;/code&gt;为10表示含义就是特征&lt;code&gt;i&lt;/code&gt;在类别&lt;code&gt;j&lt;/code&gt;下特征取值为&lt;code&gt;k&lt;/code&gt;的样本数量为10个。&lt;/p&gt;&#xA;&lt;p&gt;在初始化两个计数器之后，进一步便可以实现各个类别及特征分布的统计，示例代码如下：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#40a070&#34;&gt;1&lt;/span&gt;     &lt;span style=&#34;color:#007020;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#06287e&#34;&gt;_count&lt;/span&gt;(&lt;span style=&#34;color:#007020&#34;&gt;self&lt;/span&gt;, X, Y):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#40a070&#34;&gt;2&lt;/span&gt;         &lt;span style=&#34;color:#007020;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#06287e&#34;&gt;_update_cat_count&lt;/span&gt;(X_feature, Y, cat_count, n_classes):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#40a070&#34;&gt;3&lt;/span&gt;             &lt;span style=&#34;color:#007020;font-weight:bold&#34;&gt;for&lt;/span&gt; j &lt;span style=&#34;color:#007020;font-weight:bold&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#007020&#34;&gt;range&lt;/span&gt;(n_classes):  &lt;span style=&#34;color:#60a0b0;font-style:italic&#34;&gt;# 遍历每个类别&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#40a070&#34;&gt;4&lt;/span&gt;                 mask &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; Y[:, j]&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;astype(&lt;span style=&#34;color:#007020&#34;&gt;bool&lt;/span&gt;)  &lt;span style=&#34;color:#60a0b0;font-style:italic&#34;&gt;# 取每个类别下对应样本的索引&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#40a070&#34;&gt;5&lt;/span&gt;                 counts &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; np&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;bincount(X_feature[mask])  &lt;span style=&#34;color:#60a0b0;font-style:italic&#34;&gt;# 统计当前类别下，特征X_feature中各个取值下的数量&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#40a070&#34;&gt;6&lt;/span&gt;                 indices &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; np&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;nonzero(counts)[&lt;span style=&#34;color:#40a070&#34;&gt;0&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#40a070&#34;&gt;7&lt;/span&gt;                 cat_count[j, indices] &lt;span style=&#34;color:#666&#34;&gt;+=&lt;/span&gt; counts[indices]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#40a070&#34;&gt;8&lt;/span&gt;                 &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#40a070&#34;&gt;9&lt;/span&gt;         &lt;span style=&#34;color:#007020&#34;&gt;self&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;class_count_ &lt;span style=&#34;color:#666&#34;&gt;+=&lt;/span&gt; Y&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;sum(axis&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#40a070&#34;&gt;0&lt;/span&gt;)  &lt;span style=&#34;color:#60a0b0;font-style:italic&#34;&gt;# Y: shape(n,n_classes)   Y.sum(): shape(n_classes,)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#40a070&#34;&gt;10&lt;/span&gt;         &lt;span style=&#34;color:#007020&#34;&gt;self&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;n_categories_ &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; X&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;max(axis&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#40a070&#34;&gt;0&lt;/span&gt;) &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#40a070&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#40a070&#34;&gt;11&lt;/span&gt;         &lt;span style=&#34;color:#007020;font-weight:bold&#34;&gt;for&lt;/span&gt; i &lt;span style=&#34;color:#007020;font-weight:bold&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#007020&#34;&gt;range&lt;/span&gt;(&lt;span style=&#34;color:#007020&#34;&gt;self&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;n_features_):  &lt;span style=&#34;color:#60a0b0;font-style:italic&#34;&gt;# 遍历每个特征&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#40a070&#34;&gt;12&lt;/span&gt;             X_feature &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; X[:, i]  &lt;span style=&#34;color:#60a0b0;font-style:italic&#34;&gt;# 取每一列的特征&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#40a070&#34;&gt;13&lt;/span&gt;             &lt;span style=&#34;color:#007020&#34;&gt;self&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;category_count_[i] &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; np&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;pad(&lt;span style=&#34;color:#007020&#34;&gt;self&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;category_count_[i],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#40a070&#34;&gt;14&lt;/span&gt;                          [(&lt;span style=&#34;color:#40a070&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#40a070&#34;&gt;0&lt;/span&gt;), (&lt;span style=&#34;color:#40a070&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#007020&#34;&gt;self&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;n_categories_[i])], &lt;span style=&#34;color:#4070a0&#34;&gt;&amp;#39;constant&amp;#39;&lt;/span&gt;)                                   &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#40a070&#34;&gt;15&lt;/span&gt;             _update_cat_count(X_feature, Y,&lt;span style=&#34;color:#007020&#34;&gt;self&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;category_count_[i],&lt;span style=&#34;color:#007020&#34;&gt;self&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;n_classes)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在上述代码中，第1行参数&lt;code&gt;Y&lt;/code&gt;是原始标签经过one-hot编码后的形式，例如3分类问题中类别1会被编码成&lt;code&gt;[0,1,0]&lt;/code&gt;的形式，因此&lt;code&gt;Y&lt;/code&gt;的形状为&lt;code&gt;[n,n_classes]&lt;/code&gt;。第9行代码是计算得到每个类别对应的样本数量。第10行则是统计每个特征维度的取值数量（因为特征取值是从0开始的所以后面加了1）,例如&lt;code&gt;[3 3 3 3]&lt;/code&gt;表示四个特征维度的取值均有3种情况。第11~12行开始遍历每个特征并取对应的特征列。第13~14行是对&lt;code&gt;category_count_&lt;/code&gt;中的每个元素填充&lt;code&gt;self.n_categories_[i]&lt;/code&gt;列全0向量，此时&lt;code&gt;category_count_&lt;/code&gt;中每个元素将会变成形状为&lt;code&gt;[n_classes,len(X_i)]&lt;/code&gt;的全零矩阵。第15行则是根据输入的每一列特征等相关参数来更新&lt;code&gt;category_count_&lt;/code&gt;计数器。&lt;/p&gt;</description>
			</item>
			<item>
				<title>7.4 多项式朴素贝叶斯原理与实现</title>
				<link>https://mlwithme.github.io/ml/chapter07/1a9deee1d5f042b5/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://mlwithme.github.io/ml/chapter07/1a9deee1d5f042b5/</guid>
				<description>&lt;h1 id=&#34;74-多项式朴素贝叶斯原理与实现&#34;&gt;7.4 多项式朴素贝叶斯原理与实现&lt;a class=&#34;anchor&#34; href=&#34;#74-%e5%a4%9a%e9%a1%b9%e5%bc%8f%e6%9c%b4%e7%b4%a0%e8%b4%9d%e5%8f%b6%e6%96%af%e5%8e%9f%e7%90%86%e4%b8%8e%e5%ae%9e%e7%8e%b0&#34;&gt;#&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;p&gt;在上一节内容中，我们详细介绍了一种常见的朴素贝叶斯算法，也被称之为Categorical Naive Bayes。但实际上，”朴素贝叶斯“算法远不止这一种，而它们之间的主要区别在于对条件概率的处理上[3]，即式(7-10)中的$\prod{P}({{X}^{(i)}}={{x}^{(i)}}|Y={{c}_{k}})$部分。因此在接下来的这节内容中，我们将会介绍第2种基于朴素贝叶斯思想的分类模型，多项朴素贝叶斯（Multinomial Naive Bayes, MNB）。&lt;/p&gt;&#xA;&lt;h2 id=&#34;741-算法思想&#34;&gt;7.4.1 算法思想&lt;a class=&#34;anchor&#34; href=&#34;#741-%e7%ae%97%e6%b3%95%e6%80%9d%e6%83%b3&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;在通过Categorical NB来进行文本分类的场景中，在计算条件概率时都是将词表中的每个词以是否出现为标准进行类别化（Categorization）处理，因此如果将词频作为特征维度的取值类别，那么将会出现在测试集中特征维度的取值情况数大于训练集中的情况。&lt;/p&gt;&#xA;&lt;p&gt;例如在训练集中“客栈”这个词出现的最大次数为10，那么模型在拟合过程中就会认为“客栈”这个维度的特征取值有10种情况，并以此进行建模；但是当测试集中的某个样本里“客栈”这个词出现的频次为11时，那么模型便会认为该维度多了一种取值情况，进而无法取到对应的条件概率。&lt;/p&gt;&#xA;&lt;p&gt;同时，在利用词袋模型对文本进行向量化表示时词频也是一个重要的考量因素，而多项朴素贝叶斯算法在处理这一问题时则是将每个维度的词频在总词频中的占比来作为条件概率进行建模[4]。&lt;/p&gt;&#xA;&lt;h2 id=&#34;742-算法原理&#34;&gt;7.4.2 算法原理&lt;a class=&#34;anchor&#34; href=&#34;#742-%e7%ae%97%e6%b3%95%e5%8e%9f%e7%90%86&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;在MNB中，我们可以将类别$c_k$下条件概率的分布参数化为$\theta_{c_k}=(\theta_{c_k1},\theta_{c_k2}...,\theta_{c_kn})$这样的形式，其中$n$表示训练集中的特征维度（例如在文本分类中则是词表的长度），$\theta_{c_ki}$则是类别$c_k$下特征$i$的条件概率。进一步，参数$\theta_{c_k}$可以通过极大似然估计来计算得到[3]：&#xA;&lt;/p&gt;&#xA;$$&#xA;\hat{\theta}_{c_ki}=\frac{N_{c_ki}+\alpha_i}{N_{c_k}+\alpha }\tag{7-26}&#xA;$$&lt;p&gt;&#xA;其中$N_{c_ki}$表示在整个训练集$T$中样本属于$c_k$这个类别下特征$x^{(i)}$出现的频次，即$N_{c_ki}=\sum_{x\in T}x^{(i)}$；$N_{c_k}$表示类别$c_k$下所有维度特征的总频次，即$N_{c_k}=\sum_{i=1}^nN_{c_ki}$；$\alpha_i$表示每个特征维度对应的平滑系数，$\alpha$表示所有平滑系数的总和[4]。但是在实际处理时通常会将每个维度的平滑系数设为相等，因此式(7-26)可以改写为：&#xA;&lt;/p&gt;&#xA;$$&#xA;\hat{\theta}_{c_ki}=\frac{N_{c_ki}+\alpha}{N_{c_k}+\alpha n }\tag{7-27}&#xA;$$&lt;p&gt;&#xA;其中$\alpha$表示每个特征维度的平滑系数。&lt;/p&gt;&#xA;&lt;p&gt;在根据式(7-27)估计得到每个类别下各个特征的条件概率（词频占比）后，便可以通过式(7-10)来最大化后验概率以此确定样本的分类类别。但是这里存在一个问题，那就是通过式(7-10)可以知道，在最大化后验概率时各个特征维度的条件概率是进行的累乘操作，而在动则上千维的文本向量中，这样累乘计算得到的结果将会出现下溢的情况。&lt;/p&gt;&#xA;&lt;p&gt;因此，常见的一种做法是在式(7-10)的两边同时取自然对数$\log$，且由于$\log$函数是单调的因此这并不影响最终的预测结果[5]。所以式(7-10)可以改写为如下形式&#xA;&lt;/p&gt;&#xA;$$&#xA;\hat{y} = \arg\max_{c_k} \log{\left(P(Y=c_k)\prod\limits_{i=1}^{n}{P}({{X}^{(i)}}|Y={{c}_{k}})\right)}\tag{7-28}&#xA;$$&lt;p&gt;&#xA;其中${P}({{X}^{(i)}}|Y={{c}_{k}})$表示在类别$Y=c_k$下特征$X^{(i)}$对应的条件概率。&lt;/p&gt;&#xA;&lt;p&gt;进一步，根据$\log(xy)=\log(x)+\log(y)$，式(7-28)可以改写为&#xA;&lt;/p&gt;&#xA;$$&#xA;\hat{y} = \arg\max_{c_k} \left(\log P(Y=c_k) +\sum_{i=1}^n\log P({{X}^{(i)}}|Y={{c}_{k}})\right)\tag{7-29}&#xA;$$&lt;p&gt;&#xA;同时对于MNB算法来说，从式(7-27)可以看出，此时条件概率计算的是训练集中特征维度的词频占比（相当于模型参数），因此在最终计算后验概率时需要同时考虑到每个维度的词频情况，即[4]&#xA;&lt;/p&gt;&#xA;$$&#xA;\hat{y} = \arg\max_{c_k} \left(\log P(Y=c_k) +\sum_{i=1}^nf_i\log P({{X}^{(i)}}|Y={{c}_{k}})\right)\tag{7-30}&#xA;$$&lt;p&gt;&#xA;其中$f_i$表示特征维度$i$对应的词频。&lt;/p&gt;&#xA;&lt;p&gt;此时根据式(7-30)的形式来看，还可以将$\log P({{X}^{(i)}}|Y={{c}_{k}})$理解为特征$x^{(i)}$在对应类别下重要性大小的权重，而先验概率$\log P(Y=c_k)$则可以理解为数据集中各类别的相对频次（偏置），频次越大则当前样本越可能归属于该类别。因此，从这个角度看还可以将多项贝叶斯理解一个简单的线性模型。也正是因为这样的特性，MNB算法在处理TFIDF这类文本特征表示时依旧有着很好的效果[3]。&lt;/p&gt;&#xA;&lt;p&gt;到此，对于多项贝叶斯算法的基本原理就介绍完了，下面我们再来通过一个实际的计算示例来帮助大家更加清晰地理解。&lt;/p&gt;&#xA;&lt;h2 id=&#34;743-计算示例&#34;&gt;7.4.3 计算示例&lt;a class=&#34;anchor&#34; href=&#34;#743-%e8%ae%a1%e7%ae%97%e7%a4%ba%e4%be%8b&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;假设现在有一批基于词袋模型表示的文本数据，其一共包含有$X^{(1)},X^{(2)},X^{(3)}$这3个特征维度，每个维度表示词表中相应词的词频，$Y$表示样本对应的所属类别，如表7-2所示。现需要预测$x=[17,25,39]$这个样本的所属类别。&lt;/p&gt;&#xA;&lt;center&gt;表 7-2. 示例计算数据&lt;/center&gt;&lt;div align=center&gt;&lt;img width=&#34;600&#34; src=&#34;https://mlwithme.github.io/images/ml/240516161505.jpg&#34;/&gt; &lt;/div&gt;&#xA;&lt;p&gt;根据式(7-30)，由表7-2易知，各个类别先验概率的$\log$取值为&#xA;&lt;/p&gt;</description>
			</item>
			<item>
				<title>7.5 高斯朴素贝叶斯原理与实现</title>
				<link>https://mlwithme.github.io/ml/chapter07/5c27cdd8b3264f50/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://mlwithme.github.io/ml/chapter07/5c27cdd8b3264f50/</guid>
				<description>&lt;h1 id=&#34;75-高斯朴素贝叶斯原理与实现&#34;&gt;7.5 高斯朴素贝叶斯原理与实现&lt;a class=&#34;anchor&#34; href=&#34;#75-%e9%ab%98%e6%96%af%e6%9c%b4%e7%b4%a0%e8%b4%9d%e5%8f%b6%e6%96%af%e5%8e%9f%e7%90%86%e4%b8%8e%e5%ae%9e%e7%8e%b0&#34;&gt;#&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;p&gt;在前面两节内容中，我们分别介绍了基于类别特征的Categorical朴素贝叶斯算法和基于特征权重的Multinomial朴素贝叶斯算法，而两者之间的唯一区别就体现在对条件概率的处理上。在接下来的这节内容中，我们将会介绍第3种基于朴素贝叶斯思想的极大化后验概率模型——高斯朴素贝叶斯（Gaussian Naive Bayes, GNB）。&lt;/p&gt;&#xA;&lt;h2 id=&#34;751-算法思想&#34;&gt;7.5.1 算法思想&lt;a class=&#34;anchor&#34; href=&#34;#751-%e7%ae%97%e6%b3%95%e6%80%9d%e6%83%b3&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;根据Categorical贝叶斯和Multinomial贝叶斯算法的原理可知，前者只能用于处理类别型取值的特征变量，而后者的初衷也是为了处理包含词频的文本向量表示（尽管从结果上看也适用于类似TFIDF这样的连续型特征）。所谓高斯贝叶斯是指假定样本每个特征维度的条件概率均服从高斯分布，进而再根据贝叶斯公式来计算得到新样本在某个特征分布下其属于各个类别的后验概率，最后通过极大化后验概率来确定样本的所属类别。&lt;/p&gt;&#xA;&lt;h2 id=&#34;752-算法原理&#34;&gt;7.5.2 算法原理&lt;a class=&#34;anchor&#34; href=&#34;#752-%e7%ae%97%e6%b3%95%e5%8e%9f%e7%90%86&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;高斯贝叶斯算法假定数据样本在各个类别下，每个特征变量$X^{(i)}$的条件概率均服从高斯分布，即&#xA;&lt;/p&gt;&#xA;$$&#xA;P(X^{(i)}|Y=c_k)=\frac{1}{\sqrt{2\pi \sigma^2_{c_ki}}}\exp\left(-\frac{(X^{(i)}-\mu_{c_ki})^2}{2\sigma^2_{c_ki}}\right)\tag{7-36}&#xA;$$&lt;p&gt;其中$X^{(i)}$表示第$i$个特征维度，$\sigma_{c_ki}$和$\mu_{c_ki}$分别表示在类别$Y=c_k$下特征$X^{(i)}$对应的标准差和期望。&lt;/p&gt;&#xA;&lt;p&gt;在计算得到每个特征维度的条件概率后，再进行极大化后验概率计算&#xA;&lt;/p&gt;&#xA;$$&#xA;\begin{aligned}&#xA;\hat{y} &amp;= \arg\max_{c_k} \log{\left(P(Y=c_k) \prod_{i=0}^{n}P(X^{(i)} \mid P(Y=c_k)\right)}\\[2ex]&#xA;&amp;=\arg\max_{c_k} \log{\left[P(Y=c_k) \prod_{i=0}^{n}\frac{1}{\sqrt{2\pi \sigma^2_{c_ki}}}\exp\left(-\frac{(X^{(i)}-\mu_{c_ki})^2}{2\sigma^2_{c_ki}}\right)\right]}\\[2ex]&#xA;&amp;\Longrightarrow \arg\max_{c_k} \left[\log P(Y=c_k)+\sum_{i=0}^n\log{\left(\frac{1}{\sqrt{2\pi \sigma^2_{c_ki}}}\exp\left(-\frac{(X^{(i)}-\mu_{c_ki})^2}{2\sigma^2_{c_ki}}\right)\right)}\right]\\[2ex]&#xA;&amp;=\arg\max_{c_k}\left(\log P(Y=c_k)-\frac{1}{2}\sum_{i=0}^n\log{2\pi\sigma^2_{c_ki}-\frac{1}{2}\sum_{i=0}^n\frac{(X^{(i)}-\mu_{c_ki})^2}{\sigma^2_{c_ki}}}\right)&#xA;\end{aligned}\tag{7-37}&#xA;$$&lt;p&gt;这里需要注意的是，同上一节介绍的多项式朴素贝叶斯一样，在后验概率计算过程中同样进行取对数操作。&lt;/p&gt;&#xA;&lt;h2 id=&#34;753-计算示例&#34;&gt;7.5.3 计算示例&lt;a class=&#34;anchor&#34; href=&#34;#753-%e8%ae%a1%e7%ae%97%e7%a4%ba%e4%be%8b&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;假设现在有一个基于TFIDF方法表示文本数据，其一共包含有$X^{(1)},X^{(2)},X^{(3)}$ 这3个特征维度，每个维度表示词表中相应词的TFIDF权重，$Y$表示样本对应的所属类别，如表7-3所示。现需要预测$x=[0.5,0.12,0.218]$​这个样本的所属类别。&lt;/p&gt;&#xA;&lt;center&gt;表 7-3. 示例计算数据&lt;/center&gt;&lt;div align=center&gt;&lt;img width=&#34;500&#34; src=&#34;https://mlwithme.github.io/images/ml/240516161608.jpg&#34;/&gt; &lt;/div&gt;&#xA;&lt;p&gt;由表7-3易知，各个类别的先验概率为&#xA;&lt;/p&gt;&#xA;$$&#xA;\begin{aligned}&#xA;\log P(Y=0)&amp;=\log(\frac{2}{10})\approx-1.609\\[1ex] &#xA;\log P(Y=1)&amp;=\log(\frac{5}{10})\approx -0.693\\[1ex] &#xA;\log P(Y=2)&amp;=\log(\frac{3}{10})\approx-1.204&#xA;\end{aligned}\tag{7-38}&#xA;$$&lt;p&gt;&#xA;根据表7-3可知，当$Y=0$时特征$X^{(1)}$对应的参数期望和方差为&#xA;&lt;/p&gt;&#xA;$$&#xA;\begin{aligned}&#xA;\mu_{00} &amp; = \frac{0.3+0.6}{2}=0.45\\[2ex]&#xA;\sigma^2_{00}&amp;=\frac{(0.3-0.45)^2+(0.6-0.45)^2}{2}=0.0225&#xA;\end{aligned}\tag{7-39}&#xA;$$&lt;p&gt;&#xA;同理可得&#xA;&lt;/p&gt;</description>
			</item>
			<item>
				<title>引用</title>
				<link>https://mlwithme.github.io/ml/chapter07/715b8eaf245f45f1/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://mlwithme.github.io/ml/chapter07/715b8eaf245f45f1/</guid>
				<description>&lt;h1 id=&#34;引用&#34;&gt;引用&lt;a class=&#34;anchor&#34; href=&#34;#%e5%bc%95%e7%94%a8&#34;&gt;#&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;p&gt;[1]李航，统计机器学习，清华大学出版社&lt;/p&gt;&#xA;&lt;p&gt;[2]Scikit-learn: Machine Learning in Python, Pedregosa et al., JMLR 12, pp. 2825-2830, 2011.&lt;/p&gt;&#xA;&lt;p&gt;[3] &lt;a href=&#34;https://scikit-learn.org/stable/modules/naive_bayes.html#naive-bayes&#34;&gt;https://scikit-learn.org/stable/modules/naive_bayes.html#naive-bayes&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;[4] Rennie J D, Shih L, Teevan J, et al. Tackling the poor assumptions of naive bayes text classifiers[C] (ICML-03). 2003: 616-623.https://www.aaai.org/Papers/ICML/2003/ICML03-081.pdf&lt;/p&gt;&#xA;&lt;p&gt;[5] &lt;a href=&#34;https://nlp.stanford.edu/IR-book/html/htmledition/naive-bayes-text-classification-1.html&#34;&gt;https://nlp.stanford.edu/IR-book/html/htmledition/naive-bayes-text-classification-1.html&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;[6] 代码仓库：https://github.com/moon-hotel/MachineLearningWithMe&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
