• 朴素贝叶斯 分类算法数据集文本挖掘（Text Mining，从文字中获取信息）是一个比较宽泛的概念，这一技术在如今每天都有海量文本数据生成的时代越来越受到关注。目前，在机器学习模型的帮助下，包括情绪分析，文件分类...
• 朴素贝叶斯适用场景Before we begin with the Naive Bayes classifier and its algorithm, first let’s talk about Bayes’ theorem. 在开始朴素贝叶斯分类器及其算法之前，首先让我们谈一下贝叶斯定理 。 ...

朴素贝叶斯的适用场景

Before we begin with the Naive Bayes classifier and its algorithm, first let’s talk about Bayes’ theorem.
在开始朴素贝叶斯分类器及其算法之前，首先让我们谈一下贝叶斯定理 。

贝叶斯定理 (Bayes’ Theorem)
Bayes’ Theorem gives us the posterior probability of an event given given what is known as prior knowledge.
给定已知的先验知识，贝叶斯定理为我们提供了事件的后验概率。

Prior probability is nothing but the proportion of dependent (binary) variable in the data set. It is the closest guess you can make about a class, without any further information or you can say how probable is A before observing B.
先验概率不过是数据集中因变量(二进制)的比例。 这是您对一堂课的最接近的猜测，无需任何其他信息，或者您可以在观察B之前说出A的可能性。
Likelihood is the probability of classifying a given observation as one kind in presence of some other variable. In other words how probable is B when given that A is true or happened.
可能性是在存在某些其他变量的情况下将给定观察分类为一种的概率。 换句话说，当给定A为真或发生时，B有多大的可能性。
Marginal likelihood is, how probable is the new datapoint under all the possible variables.
边际可能性是，在所有可能的变量下，新数据点的可能性是多少。

Naive Bayes Classifier is a Supervised Machine Learning Algorithm. It is one of the simple yet effective algorithm. Naive Bayes algorithm classify the object or observation with the help of Bayes Theorem.
朴素贝叶斯分类器是一种监督式机器学习算法。 它是一种简单而有效的算法。 朴素贝叶斯算法借助贝叶斯定理对物体或观测进行分类。
Naive Bayes is a classification technique based on an assumption of independence between predictors which is known as Bayes’ theorem. In simple terms, a Naive Bayes classifier assumes that the presence of a particular feature in a class is unrelated to the presence of any other feature.
朴素贝叶斯是一种基于预测变量之间独立性的假设的分类技术，称为贝叶斯定理 。 简而言之，朴素贝叶斯分类器假定类中某个特定功能的存在与任何其他功能的存在无关。
The most common question that comes in our mind by the name of this algorithm.
该算法的名称是我们脑海中最常见的问题。
问：为什么朴素贝叶斯这么“朴素”？ (Q. Why is naive Bayes so ‘naive’ ?)
Naive Bayes is so ‘naive’ because it makes assumptions that are virtually impossible to see in real-life data and assumes that all the features are independent.
朴素贝叶斯之所以如此“朴素” ，是因为它做出了在现实生活中几乎看不到的假设，并且假设所有功能都是独立的。
朴素贝叶斯算法 (Naive Bayes Algorithm)
Let’s take an example and implement the Naive Bayes Classifier, here we have a dataset that has been given to us and we’ve got a scatterplot which represents it. We just have two columns and observation or data points are classified into two different categories in red and green. So the X-axis represents Age, while Y-axis represents Salary. The category of people who walks to their work is in red and in green is the category of people who drives to their work.
让我们以一个示例并实现朴素贝叶斯分类器为例，这里有一个数据集已经提供给我们，并且我们有一个散点图表示它。 我们只有两列，观察点或数据点分为红色和绿色两个不同类别。 因此，X轴表示年龄，而Y轴表示薪水。 上班的人的类别为红色，而绿色为上班的人的类别。

So now what happens if we make a new observation, a new data point into the set, how do we classify this new data point. We are going to classify the new datapoint by using Naive Bayes theorem to depict whether it belongs to the red or green point category, i.e., that new person walks or drives to work?
因此，现在如果我们进行新的观察，将新的数据点放入集合中，会发生什么情况，如何对新数据点进行分类。 我们将使用朴素贝叶斯定理(Naive Bayes theorem)描述新数据点，以描述它属于红点还是绿点类别，即，新人走路还是开车去上班？

We are going to take the Bayes theorem and apply it twice.
我们将采用贝叶斯定理并对其应用两次。
We are going to calculate the probability or you can say posterior probability of the event that the person walks to work according to the given feature of the new data point.
我们将计算概率，或者您可以说根据新数据点的给定特征，该人走路上班的事件的后验概率。
X in the function here which represents the feature of that data point. For example, that person’s age maybe is like 26 years old and the salary \$ 2900 per year. So these are the feature of the observation we are only working with two variables just for simplicity but in reality, there can be many many more features.
函数中的X代表该数据点的特征。 例如，该人的年龄可能约为26岁，年薪为2900美元。 因此，这些是观察的特征，为简单起见，我们仅使用两个变量，但实际上，可以有许多其他特征。

So in order to calculate the Posterior Probability, we are going to calculate the Prior Prabability i.e. P(Walk), which is the total number of walker divided by the total number of observations.
因此，为了计算后验概率，我们将计算先验概率，即P(Walk)，即步行者总数除以观察总数。
In the next step, we are going to calculate the marginal likelihood or the evidence. The first thing we are going to do is to select a radius and we’re going to draw a circle around the new observation or data point and then we are going to look at all the points that are inside the circle, Anybody who falls somewhere in that vicinity is going to be deemed similar to the new data point that we’re adding to our dataset.
在下一步中，我们将计算边际可能性或证据。 我们要做的第一件事是选择一个半径，然后围绕新观测值或数据点绘制一个圆，然后我们将查看圆内的所有点，任何落入某处的人该附近的区域将被视为与我们要添加到数据集中的新数据点相似 。
The Marginal Likelihood is the number of similar observations divided by the total number of observations.
边际可能性是相似观察数除以观察总数。

The likelihood is the randomly selected data point from the dataset from the red dots is somebody who exhibits features similar to the point that we are adding to our dataset or in other words, a randomly selected redpoint falls into the circle area. Now Likelihood and P(X|Walks) is the Likelihood that somebody who walks exhibits feature X.
可能性是从红点中从数据集中随机选择的数据点是某人，其特征类似于我们要添加到数据集中的点，换句话说，随机选择的红点落入了圆圈区域。 现在， 可能性和P(X | Walks)是行走的人展示的特征X的可能性。

Now we have calculate the Posterior Probability by using the value Prior probability, Marginal likelihood and the Likelihood and got the value of Posterior Probability as 0.75 i.e. 75% is the probability that new data point would be classified as a person who walks to the work and 25%(1–0.75) is the probability that a new data point would be classified as a person who drives to work as this is a binary classification. If this was not a binary classification, then we need to calculate for a person who drives, as we have calculated above for the person who walks to the work.
现在我们已经使用后验概率，边际可能性和似然性的值计算了后验概率，并且后验概率的值为0.75，即75％是新数据点将被归类为上班的人的概率，并且25％(1-0.75)是将新数据点归类为开车的人的概率，因为这是二进制分类。 如果这不是二进制分类，那么我们需要为开车的人计算，就像我们上面为走路的人计算的那样。

Now we will compare the probability of both the category and the new data point will fall under the category which has a greater probability than the other.
现在，我们将比较类别和新数据点都属于该类别的概率，该类别的概率要大于另一个类别。

So Finally, we classified the new data point,a person who walks to work as a redpoint.
因此，最后，我们将新数据点归类为一个步行上班的人。
This is how Naive Bayes Classifier Works.
这就是朴素贝叶斯分类器的工作方式。

Naive Bayes Classification Algorithm is highly efficient and not biased by the Outliers. Naive Bayes algorithm works on Non-Linear data problems and used when we want to rank our predictions by their Probability.
朴素贝叶斯分类算法非常高效，并且不受异常值的影响。 朴素贝叶斯算法可用于处理非线性数据问题，并在我们要根据其概率对预测进行排名时使用。

That’s all for the Naive Bayes Machine learning algorithm. Thank you.
朴素贝叶斯机器学习算法就这些了。 谢谢。

朴素贝叶斯算法在数据集上的实现 (Implementation of Naive Bayes Algorithm on a Dataset)
Dataset: Iris dataset
数据集：虹膜数据集
链接： https ： //github.com/InternityFoundation/MachineLearning_Navu4/blob/master/18th%20June%20 ：％ 20Support％20Vector％20Machine％20and％20Naive％ 20Bayes / Naive％20Bayes％20on％20Iris％20dataset％20.ipynb

翻译自: https://medium.com/swlh/naive-bayes-27c896012899

朴素贝叶斯的适用场景

展开全文
• 本文实例讲述了朴素贝叶斯算法的python实现方法。分享给大家供大家参考。具体实现方法如下： 朴素贝叶斯算法优缺点 优点：在数据较少的情况下依然有效，可以处理多类别问题 缺点：对输入数据的准备方式敏感 适用数据...
• 代码：Java语言 算法：朴素贝叶斯分类器（中文）适用于情感分析 涉及：条件概率，先验概率计算，中文分词器，停用词处理
• 朴素贝叶斯模型是一组非常简单快速的分类算法，通常适用于维度非常高的数据集。因为运行速度快，而且可调参数少，因此非常适合分类问题提供快速粗糙的基本方案。 一、贝叶斯分类 贝叶斯定理论： P（特征）：（测试...


文章目录
一、贝叶斯分类二、高斯朴素贝叶斯sklearn.naive_bayes--GaussianNB三、多项式朴素贝叶斯sklearn.naive_bayes --MultinomialNB四、朴素贝叶斯的应用场景

朴素贝叶斯模型是一组非常简单快速的分类算法，通常适用于维度非常高的数据集。因为运行速度快，而且可调参数少，因此非常适合分类问题提供快速粗糙的基本方案。

一、贝叶斯分类
贝叶斯定理论： P（特征）：（测试集中）某特征出现的概率 P (L）：（训练集中）L类标签所占比重，先验概率 P (特征 | L )：L类标签出现某特征的概率，似然函数（生成模型帮我们计算） P (L | 特征 )：具有某特征的样本属于L类标签的概率，后验概率
每种标签设置生成模型是贝叶斯分类器训练过程的主要部分。
“朴素”，如果对每种标签的生成模型进行非常简单的假设，就能找到每种类型生成模型的近似解，然后就可以使用贝叶斯分布。
二、高斯朴素贝叶斯sklearn.naive_bayes–GaussianNB
这个分类器假设每个标签的数据都服从简单的高斯分布。
训练集数据
from sklearn.datasets import make_blobs
X,y=make_blobs(n_samples=100,n_features=2, centers=2, random_state=2, cluster_std=1.5)
#选取了100个样本，2个特征，2个中心点

可视化
%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()

plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='RdBu')
#X轴第1个特征，y轴第2个特征，按照y分颜色


模型选择、生成和训练
from sklearn.naive_bayes import GaussianNB
model=GaussianNB()
model.fit(X,y)

测试集数据
import numpy as np
rng = np.random.RandomState(0)
Xnew = [-6, -14] + [14, 18] * rng.rand(2000, 2)

模型预测
ynew = model.predict(Xnew)

可视化
plt.scatter(Xnew[:, 0], Xnew[:, 1], c=ynew, s=20, cmap='RdBu', alpha=0.2)

这个结果就是使用训练集训练出来的高斯朴素贝叶斯模型形成的分类，边界是一条弯曲的线，通常，高斯朴素贝叶斯的边界是二次方曲线。 我们可以用predict_proba 方法计算样本属于某个标签的概率：
yprob=model.predict_proba(Xnew)
yprob[-8:].round(3)
>>>
array([[0.895, 0.105],
[1.   , 0.   ],
[1.   , 0.   ],
[1.   , 0.   ],
[1.   , 0.   ],
[1.   , 0.   ],
[0.   , 1.   ],
[0.153, 0.847]])

测试集的最后一个数据，属于其中一个标签的概率是P (L1 | 特征 )=0.153，属于另一个标签的概率是P (L2 | 特征 )=0.847
三、多项式朴素贝叶斯sklearn.naive_bayes --MultinomialNB
这个分类器假设特征是有一个简单多项式分布生成的。 多项分布可以描述各种类型样本出现次数的概率，因此多项式朴素贝叶斯非常适合用于描述出现次数或者出现次数比例的特征。
准备数据
from sklearn.datasets import fetch_20newsgroups
data=fetch_20newsgroups()
#data.target_names

该data为sklearn.utils.Bunch
data.keys()
>>>dict_keys(['data', 'filenames', 'target_names', 'target', 'DESCR', 'description'])

前4个key对应的value都是list。data.data的元素是文章字符串，data.taget是每篇文章对应的分类标签，data.target_names的元素是文章可以分成的20类别名称字符串。取训练集和测试集，标签（文章类别）只取4个。
创建管道（选择和初始化模型） 将TF-IDF向量化方法和多项式朴素贝叶斯分类器组合在一起。
from sklearn.feature_extraction.text import TfidfVectorizer#TF-IDF
from sklearn.naive_bayes import MultinomialNB#多项式朴素贝叶斯
from sklearn.pipeline import make_pipeline#管道
model = make_pipeline(TfidfVectorizer(), MultinomialNB())

TfidfVectorizer()传入一个字符串列表，就可以转化成矩阵
训练集训练模型、模型预测数据
model.fit(train.data, train.target)
labels = model.predict(test.data)

fit传入的参数都是列表，因为这两个参数分别适应TfidfVectorizer(), MultinomialNB() 这里训练集里的数据都被模型预测出所属标签
模型验证
将预测的标签和原来所属新闻类目标签用混淆矩阵对比
from sklearn.metrics import confusion_matrix
mat = confusion_matrix(test.target, labels)

画出热力图
sns.heatmap(mat.T, square=True, annot=True, fmt='d', cbar=False,cmap='binary',xticklabels=train.target_names, yticklabels=train.target_names)
plt.xlabel('true label')
plt.ylabel('predicted label')


预测任意数据 已经获得了一个模型，结合管道的predict()函数，自定义一个函数，用于预测任意一段字符串
def predict_category(s, train=train, model=model):
pred = model.predict([s])
return train.target_names[pred[0]]

传入一段字符串,反回所属文章类型
predict_category('discussing islam vs atheism')
>>> 'soc.religion.christian'

四、朴素贝叶斯的应用场景
由于朴素贝叶斯分类器对数据有严格的假设，因此它的训练效果通常比复杂模型的差。 优点： • 训练和预测的速度非常快。 • 直接使用概率预测。 • 通常很容易解释。 • 可调参数（如果有的话）非常少。 这些优点使得朴素贝叶斯分类器通常很适合作为分类的初始解。 适用场景： • 假设分布函数与数据匹配（实际中很少见）。 • 各种类型的区分度很高，模型复杂度不重要。 • 非常高维度的数据，模型复杂度不重要。
展开全文
• 朴素贝叶斯适用于数据集少的情景，而LR适用于大规模数据集 在估计条件概率P(X|Y)时出现概率为0的情况怎么办？ 简单来说：引入λ，当λ=1时称为拉普拉斯平滑。 生成模式和判别模式的区别： 生成模式：由数据学得联合...
github机器学习总结
什么是贝叶斯决策论？

回答：贝叶斯决策论是概率框架下实施决策的基本方法。要了解贝叶斯决策论，首先得先了解以下几个概念：先验概率、条件概率、后验概率、误判损失、条件风险、贝叶斯判别准则。

先验概率： 所谓先验概率，就是根据以往的经验或者现有数据的分析所得到的概率。如，随机扔一枚硬币，则p(正面) = p(反面) = 1/2，这是我们根据已知的知识所知道的信息，即p(正面) = 1/2为先验概率。

条件概率：是指事件A在另一事件B发生的条件下发送的概率。用数学符号表示为：P(B|A)，即B在A发生的条件下发生的概率。易见，条件概率是有因求果（知道原因推测结果）。

后验概率： 后验概率跟条件概率的表达形式有点相似。数学表达式为p(A|B), 即A在B发生的条件下发生的概率。以误喝牛奶的例子为例，现在知道了你今天拉肚子了（B），算一下你早上误喝了一瓶过期了的牛奶(A)的概率,即P（A|B），这就是后验概率，后验概率是有果求因（知道结果推出原因）

误判损失： 数学表达式：L(j|i)， 判别损失表示把一个标记为i类的样本误分类为j类所造成的损失。比如，当你去参加体检时，明明你各项指标都是正常的，但是医生却把你分为癌症病人，这就造成了误判损失，用数学表示为：L(癌症|正常)。

条件风险： 是指基于后验概率P(i|x)可获得将样本x分类为i所产生的期望损失，公式为：R(i|x) = ∑L(i|j)P(j|x)。（其实就是所有判别损失的加权和，而这个权就是样本判为j类的概率，样本本来应该含有P(j|x)的概率判为j类，但是却判为了i类，这就造成了错判损失，而将所有的错判损失与正确判断的概率的乘积相加，就能得到样本错判为i类的平均损失，即条件风险。）
举个栗子，假设把癌症病人判为正常人的误判损失是100，把正常人判为癌症病人的误判损失是10，把感冒病人判为癌症的误判损失是8，即L（正常|癌症）= 100， L（癌症|正常） = 10，L(癌症|感冒) = 8， 现在，我们经过计算知道有一个来体检的员工的后验概率分别为：p(正常|各项指标) = 0.2， p(感冒|各项指标) = 0.4, p（癌症|各项指标)=0.4。假如我们需要计算将这个员工判为癌症的条件风险，则：R（癌症|各项指标） = L（癌症|正常）* p(正常|各项指标) + L(癌症|感冒) * p(感冒|各项指标) = 5.2。

贝叶斯判别准则：是找到一个使条件风险达到最小的判别方法。即，将样本判为哪一类，所得到的条件风险R(i|x)（或者说平均判别损失）最小，那就将样本归为那个造成平均判别损失最小的类。 此时：h*(x) = argminR(i|x) 就称为 贝叶斯最优分类器。 总结：贝叶斯决策论是基于先验概率求解后验概率的方法，其核心是寻找一个判别准则使得条件风险达到最小。而在最小化分类错误率的目标下，贝叶斯最优分类器又可以转化为求后验概率达到最大的类别标记，即 h*（x) = argmaxP(i|x)。（此时，L(i|j) = 0, if i = j;L(i|j) = 1, otherwise)

为什么朴素贝叶斯被称为朴素的？

之所以被称为“朴素”，是因为它假定所有的特征在数据集中的作用是同样重要和独立的，正如我们所知，这个假设在现实世界中是很不真实的，因此，说是很“朴素的”。

你能说说朴素贝叶斯的工作流程是怎么样的吗？

回答：朴素贝叶斯的工作流程可以分为三个阶段进行，分别是准备阶段、分类器训练阶段和应用阶段。 准备阶段：这个阶段的任务是为朴素贝叶斯分类做必要的准备，主要工作是根据具体情况确定特征属性，并对每个特征属性进行适当划分，去除高度相关性的属性(如果两个属性具有高度相关性的话，那么该属性将会在模型中发挥了2次作用，会使得朴素贝叶斯所预测的结果向该属性所希望的方向偏离，导致分类出现偏差)，然后由人工对一部分待分类项进行分类，形成训练样本集合。这一阶段的输入是所有待分类数据，输出是特征属性和训练样本。(这一阶段是整个朴素贝叶斯分类中唯一需要人工完成的阶段，其质量对整个过程将有重要影响。) 分类器训练阶段：这个阶段的任务就是生成分类器，主要工作是计算每个类别在训练样本中的出现频率及每个特征属性划分对每个类别的条件概率估计，并将结果记录。其输入是特征属性和训练样本，输出是分类器。这一阶段是机械性阶段，根据前面讨论的公式可以由程序自动计算完成。 应用阶段：这个阶段的任务是使用分类器对待分类项进行分类，其输入是分类器和待分类项，输出是待分类项与类别的映射关系。这一阶段也是机械性阶段，由程序完成。

朴素贝叶斯的优点：

朴素贝叶斯模型发源于古典数学理论，有稳定的分类效率 对缺失数据不太敏感，算法也比较简单，常用于文本分类 分类准确度高，速度快 对小规模的数据表现很好，适合多分类任务，适合增量式训练，当数据量超出内存时，我们可以一批批的去增量训练(朴素贝叶斯在训练过程中只需要计算各个类的概率和各个属性的类条件概率，这些概率值可以快速地根据增量数据进行更新，无需重新全量计算)。。

朴素贝叶斯的缺点：

1 对训练数据的依赖性很强，如果训练数据误差较大，那么预测出来的效果就会不佳 2 理论上，朴素贝叶斯模型与其他分类方法相比具有最小的误差率，但是在实际中，因为朴素贝叶斯“朴素，”的特点，导致在属性个数比较多或者属性之间相关性较大时，分类效果不好 而在属性相关性较小时，朴素贝叶斯性能最为良好。 对输入数据的表达形式很敏感（离散、连续，值极大极小之类的） 对于这一点，有半朴素贝叶斯之类的算法通过考虑部分关联性适度改进。 3 需要知道先验概率，且先验概率很多时候是基于假设或者已有的训练数据所得的，这在某些时候可能会因为假设先验概率的原因出现分类决策上的错误。

“朴素”是朴素贝叶斯在进行预测时候的缺点，那么有这么一个明显的假设缺点在，为什么朴素贝叶斯的预测仍然可以取得较好的效果？

对于分类任务来说，只要各个条件概率之间的排序正确，那么就可以通过比较概率大小来进行分类，不需要知道精确的概率值(朴素贝叶斯分类的核心思想是找出后验概率最大的那个类，而不是求出其精确的概率) 如果属性之间的相互依赖对所有类别的影响相同，或者相互依赖关系可以互相抵消，那么属性条件独立性的假设在降低计算开销的同时不会对分类结果产生不良影响。 互相关性并能咩有我们想的那么强 在这篇文章【The Optimality of Naive Bayes】中，我们提出了一个新颖的解释对卓越的分类性能朴素贝叶斯。我们表明，从本质上讲，依赖性分布，即一个节点的局部依赖性如何均匀或不均匀地分布在每个类中，以及所有节点的局部依赖性如何协同工作，一致地（支持某个分类）或不一致地（相互抵消），起着至关重要的作用。因此，无论属性之间的依赖关系有多强，如果依赖关系在类中均匀分布，或者如果依赖关系相互抵消，则朴素贝叶斯仍然是最优的

朴素贝叶斯怎么处理离散值和连续值

在用朴素贝叶斯算法的时候，是不是要对相似的特征进行去除？」

不是的,我们是按条件概率的思想去计算的 我想确认一下，这里说的条件概率思想，意思是相似的特征对所有类别的影响都是一致的，所以在条件概率中对最终的分类不会有影响？

什么是拉普拉斯平滑法?

拉普拉斯平滑法是朴素贝叶斯中处理零概率问题的一种修正方式。在进行分类的时候，可能会出现某个属性在训练集中没有与某个类同时出现过的情况，如果直接基于朴素贝叶斯分类器的表达式进行计算的话就会出现零概率现象。为了避免其他属性所携带的信息被训练集中未出现过的属性值“抹去”，所以才使用拉普拉斯估计器进行修正。 具体的方法是：在分子上加1,对于先验概率，在分母上加上训练集中可能的类别数；对于条件概率，则在分母上加上第i个属性可能的取值数

朴素贝叶斯中有没有超参数可以调？

朴素贝叶斯是没有超参数可以调的，所以它**不需要调参，**朴素贝叶斯是根据训练集进行分类，分类出来的结果基本上就是确定了的，拉普拉斯估计器不是朴素贝叶斯中的参数，不能通过拉普拉斯估计器来对朴素贝叶斯调参。

朴素贝叶斯中有多少种模型？

朴素贝叶斯含有3种模型，分别是 高斯模型，对连续型数据进行处理； 多项式模型，对离散型数据进行处理，计算数据的条件概率(使用拉普拉斯估计器进行平滑的一个模型)； 伯努利模型，伯努利模型的取值特征是布尔型，即出现为ture,不出现为false,在进行文档分类时，就是一个单词有没有在一个文档中出现过。

你知道朴素贝叶斯有哪些应用吗？

知道(肯定得知道啊，不然不就白学了吗？) 朴素贝叶斯的应用最广的应该就是在文档分类、垃圾文本过滤(如垃圾邮件、垃圾信息等)、情感分析(微博、论坛上的积极、消极等情绪判别)这些方面，除此之外还有多分类实时预测、推荐系统(贝叶斯与协同过滤组合使用)、拼写矫正(当你输入一个错误单词时，可以通过文档库中出现的概率对你的输入进行矫正)等。

你觉得朴素贝叶斯对异常值敏不敏感？

朴素贝叶斯对异常值不敏感。所以在进行数据处理时，我们可以不去除异常值，因为保留异常值可以保持朴素贝叶斯算法的整体精度，而去除异常值则可能在进行预测的过程中由于失去部分异常值导致模型的泛化能力下降。

朴素贝叶斯是高方差还是低方差模型？

朴素贝叶斯是低方差模型。(误差 = 偏差 + 方差)对于复杂模型来说，由于复杂模型充分拟合了部分数据，使得它们的偏差变小，但由于对部分数据过分拟合，这就导致预测的方差会变大。因为朴素贝叶斯假设了各个属性之间是相互的，算是一个简单的模型。对于简单的模型来说，则恰恰相反，简单模型的偏差会更大，相对的，方差就会较小。(偏差是模型输出值与真实值的误差，也就是模型的精准度，方差是预测值与模型输出期望的的误差，即模型的稳定性，也就是数据的集中性的一个指标)

总结

朴素贝叶斯的假设条件是“属性条件独立性”，这一假设很简单很朴素，它给我们省去了很多复杂的计算步骤，大大减少了贝叶斯分类器的计算量。但是它也有缺点存在，对于它的修正有半朴素贝叶斯、贝叶斯网络等模型。

贝叶斯网络

贝叶斯网络(Bayesian network)，又称信念网络(Belief Network)，或有向无环图模型(directed acyclic graphical model)，是一种概率图模型，于1985年由Judea Pearl首先提出。它是一种模拟人类推理过程中因果关系的不确定性处理模型，其网络拓朴结构是一个有向无环图(DAG)。 总而言之，连接两个节点的箭头代表此两个随机变量是具有因果关系，或非条件独立。

P(A)就是一种先验概率.堵车还没有发生，根据以往的经验来判断堵车事件A发生的概率。 P(A|B)称之为A的后验概率，判断堵车事件A的发生是由交通事故B原因引起的概率。是“由果求因”。 P(B|A),类条件概率.这是有因求果。堵车时间发生，导致交通事故的概率 最大似然估计（Maximum likelihood estimation， MLE：最大似然估计 就是求在θ的定义域中，当似然函数取得最大值时θ的大小
极大似然估计MLE（频率派），最大后验概率估计MAP（贝叶斯派）之间的关系和区别，联系 https://zhuanlan.zhihu.com/p/40024110

半朴素贝叶斯

独依赖估计：每个其他属性最多只依赖于一个父属性，即：  转换为

如何确定父属性

TAN树则是在最大带权生成树算法的基础上，通过一下步骤获得（c）的树形结构： （1） 计算任意两个属性之间的条件互信息 （2）以属性为节点构造完全图，两节点之间的权值为互信息 （3） 构建此完全图的最大带权生成树，挑选根变量，将边设置为有向的； （4） 加入类别节点y，增加从y到每个属性xi的有向边； 通过条件互信息就刻画了属性之间的依赖关系，然后基于互信息计算属性之间的权值，从而实现半朴素贝叶斯网络的构建。

AODE

AODE是一种基于集成学习机制、更为强大的独依赖分类器。与SPODE确定超父属性的方法不同，AODE尝试将每个属性都作为超父属性来构建SPODE，然后将具有足够训练支撑的SPODE集成起来作为最终结果，即：

朴素贝叶斯与LR的区别？

简单来说：朴素贝叶斯是生成模型，根据已有样本进行贝叶斯估计学习出先验概率P(Y)和条件概率P(X|Y)，进而求出联合分布概率P(XY),最后利用贝叶斯定理求解P(Y|X)， 而LR是判别模型，根据极大化对数似然函数直接求出条件概率P(Y|X)； 朴素贝叶斯是基于很强的条件独立假设（在已知分类Y的条件下，各个特征变量取值是相互独立的）， 而LR则对此没有要求； 朴素贝叶斯适用于数据集少的情景，而LR适用于大规模数据集

在估计条件概率P(X|Y)时出现概率为0的情况怎么办？

简单来说：引入λ，当λ=1时称为拉普拉斯平滑。

生成模式和判别模式的区别：

生成模式：由数据学得联合概率分布，求出条件概率分布P(Y|X)的预测模型； 常见的生成模型有：朴素贝叶斯、隐马尔可夫模型、高斯混合模型、文档主题生成模型（LDA）、限制玻尔兹曼机 判别模式：由数据学得决策函数或条件概率分布作为预测模型 常见的判别模型有：K近邻、SVM、决策树、感知机、线性判别分析（LDA）、线性回归、传统的神经网络、逻辑斯蒂回归、boosting、条件随机场

展开全文
• 贝叶斯分类中，我们希望确定一个具有某些特征的样本属于某类标签的概率，通常记为 P (L | 特征 )。 贝叶斯定理告诉我们，可以直接用下面的公式计算这个概率： 假如需要确定两种标签，定义为 L1 和 L2，一种...
在贝叶斯分类中，我们希望确定一个具有某些特征的样本属于某类标签的概率，通常记为 P (L | 特征 )。 贝叶斯定理告诉我们，可以直接用下面的公式计算这个概率：  假如需要确定两种标签，定义为 L1 和 L2，一种方法就是计算这两个标签的后验概率的比值：  其中，P(L1)和P(L2)的值根据训练集中各个类别的数据所占比例，可以简单方便的获得。
现在需要一种模型，帮我们计算每个标签的 P ( 特征 | Li)。这种模型被称为生成模型，因为它可以训练出生成输入数据的假设随机过程（或称为概率分布）。
满足不同概率分布的数据，会使得模型的训练得到不同的结果。 “朴素贝叶斯”对每种标签的生成模型进行了简单的假设，假设数据满足某种特定的概率分布，且特征变量满足一些特定的关系（线性无关、相关）

导入库
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()

(1) 高斯朴素贝叶斯 假设每个标签的数据都服从简单的高斯分布。且变量无协方差（no covariance，指线性无关）。只要找出每个标签的所有样本点均值和标准差，再定义一个高 斯分布，就可以拟合模型了。
生成随机数据：
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)


多项式朴素贝叶斯
还有一种常用的假设是多项式朴素贝叶斯（multinomial naive Bayes），它假设特征是由一个简单多项式分布生成的。多项分布可以描述各种类型样本出现次数的概率，因此多项式朴素贝叶斯非常适合用于描述出现次数或者出现次数比例的特征。
这个理念和前面介绍的一样，只不过模型数据的分布不再是高斯分布，而是用多项式分布代替而已
案例： 文本分类 多项式朴素贝叶斯通常用于文本分类，其特征都是指待分类文本的单词出现次数或者频 次。 这里用 20 个网络新闻组语料库（20 Newsgroups corpus，约 20 000 篇新闻）的单词出现次数作为特征，演示如何用多项式朴素贝叶斯对这 些新闻组进行分类
下载数据并看看新闻组的名字：
from sklearn.datasets import fetch_20newsgroups

data = fetch_20newsgroups()
data.target_names

为了简化演示过程，只选择四类新闻，下载训练集和测试集：
categories = ['talk.religion.misc','soc.religion.christian','sci.space','comp.graphics']
train = fetch_20newsgroups(subset='train', categories=categories)
test = fetch_20newsgroups(subset='test', categories=categories)

print(train.data[5])

使用TF–IDF 向量化方法，将每个字符串的内容转换成数值向量，并使用多项式朴素贝叶斯分类器训练。 创建管道,训练数据，预测:
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.pipeline import make_pipeline

model = make_pipeline(TfidfVectorizer(), MultinomialNB())
model.fit(train.data,train.target)
labels = model.predict(test.data)

用混淆矩阵统计测试数据的真实标签与预测标签的结果:
from sklearn.metrics import confusion_matrix
mat = confusion_matrix(test.target, labels)
sns.heatmap(mat.T, square=True, annot=True, fmt='d', cbar=False,
xticklabels=train.target_names, yticklabels=train.target_names)
plt.xlabel('true label')
plt.ylabel('predicted label')

依据训练得到的模型，构建对任何字符串进行分类的分类器:
def predict_category(s, train=train, model=model):
pred = model.predict([s])
return train.target_names[pred[0]]

predict_category('sending a payload to the ISS')
#'sci.space'
predict_category('determining the screen resolution')
'comp.graphics'

展开全文
• 朴素贝叶斯适用于数据集少的情景，而LR适用于大规模数据集。 2、朴素贝叶斯“朴素”在哪里？ 简单来说：利用贝叶斯定理求解联合概率P(XY)时，需要计算条件概率P(X|Y)。在计算P(X|Y)时，朴素贝叶斯做了一个很强的条件...
• 在sklearn中，提供了若干种朴素贝叶斯的实现算法，不同的朴素贝叶斯算法，主要是对P(xi|y)的分布假设不同，进而采用不同的参数估计方式。我们能够发现，朴素贝叶斯算法，主要就是计算P(xi|y)，一旦P(xi|y)确定，最终...
• 贝叶斯决策理论的核心思想，即选择具有最高概率的决策。 背景：假定p1(x,y)表示点(x,y)属于类别1的概率，p2(x,y)表示点(x,y) 属于类别2的概率，那么对于一个新数据点(x,y),可以采用下面的规则来判断它的类别： 若...
• 0、思想： 　对于给定的待分类项x，通过学习到的模型计算后验概率分布，即：在此项出现的条件下各个目标类别出现的概率，将后验概率最大...1、朴素贝叶斯朴素在哪里？ 　简单来说：利用贝叶斯定理求解联合概率P(XY...
• 朴素贝叶斯分类贝叶斯定理和基础概率论朴素贝叶斯高斯朴素贝叶斯多项式朴素贝叶斯伯努利朴素贝叶斯几种朴素贝叶斯实战总结 贝叶斯定理和基础概率论 概率，其实在我们生活中十分常见，它是对未来事件发生可能性的表述...
• 贝叶斯原理 贝叶斯原理其实是用来求“逆向概率”的。所谓“逆向概率”是相对“正向概率”而言。就是从结果推出条件。贝叶斯原理建立在主观判断的基础上：在我们不了解所有客观事实的...输入变量就是特征，朴素贝叶斯
• 机器学习算法（二）: 朴素贝叶斯(Naive Bayes) 1. 实验室介绍 1.1 实验环境 1. python3.7 2. numpy >= '1.16.4' 3. sklearn >= '0.23.1' 1.2 朴素贝叶斯的介绍 朴素贝叶斯算法（Naive Bayes, NB) 是应用最为...
• 朴素贝叶斯算法实例,python3可运行,每行代码均有详细解释,适用初学贝叶斯者.
• 朴素贝叶斯是一种速度很快的分类算法，适用于数据特征维度很高的情况。它假设数据的特征之间相互独立，这也是“朴素”这一名称的由来，其数学基础是贝叶斯定理。 根据每个特征的数据分布的假设不同，有高斯朴素...
• 上一篇文章我向大家介绍了朴素贝叶斯工作的理论部分，需要看的小伙伴请移步：贝叶斯分类器，接下来，我们基于Sklearn机器学习库来使用以下具体的贝叶斯分类器算法。 1，sklearn中的贝叶斯分类器 Sklearn基于数据...
• （个人理解，有不对请提出来讨论，谢谢）朴素贝叶斯适用于给文章加标签这样的场景，假设有十万篇文章需要加标签，我们可以先对每篇文章进行分词，提取重复度高的关键词，然后生成关键词向量，如下表所示： ...
• 朴素贝叶斯算法简介 1.2 概率基础复习 1.概率定义 概率定义为一件事情发生的可能性 扔出一个硬币，结果头像朝上 P(X) : 取值在[0, 1] 2.案例：判断女神对你的喜欢情况 在讲这两个概率之前我们通过一个...
• 朴素贝叶斯中的朴素是指假设各个特征之间相互独立，不会互相影响，所以称为朴素贝叶斯。正是因为这个假设，使得算法的模型简单且容易理解，虽然牺牲了一点准确性，但是如果模型训练的好，也能得到不错的分类效果。 ...
• 转自木东居士的数据挖掘面试题之：朴素贝叶斯 1.什么是贝叶斯决策论？ 贝叶斯决策论是概率框架下实施决策的基本方法。要了解贝叶斯决策论，首先得先了解以下几个概念：先验概率、条件概率、后验概率、误判损失、...
• 朴素贝叶斯算法是一种有监督学习算法，用于解决分类问题。 “朴素”是因为整个形式化过程只做最原始、最简单的假设。 朴素贝叶斯的优缺点： 优点： – 在数据较少的情况下仍然有效，可以处理多类别问题。 – ...
• ## 朴素贝叶斯的应用

千次阅读 2018-01-07 20:27:07
本文主要讲述贝叶斯的实际应用，以及在使用贝叶的时候需要注意的地方。如果有错误支持还望指教。
• ## 机器学习之朴素贝叶斯算法详解

万次阅读 多人点赞 2018-07-05 19:39:13
朴素贝叶斯公式： P(A|B)=P(A)P(B|A)P(B)P(A|B)=P(A)P(B|A)P(B) P(A|B) = \frac{P(A)P(B|A)}{P(B)} 一、概率基础知识： 条件概率是指事件A在另外一个事件B已经发生条件下的发生概率。 条件概率表示为： P(A|B)...
• 在开始朴素贝叶斯的学习之前，先弄清楚几个概念：先验概率： 事件发生前的预判概率。可以是基于历史数据的统计，可以由背景常识得出，也可以是人的主观观点给出。一般都是单独事件概率，如P(x),P(y)。后验概率：...
• 朴素贝叶斯实现分类Naive Bayes classification is one of the most simple and popular algorithms in data mining or machine learning (Listed in the top 10 popular algorithms by CRC Press Reference [1])....
• 什么是贝叶斯 例如：一座别墅在过去的 20 年里一共发生过 2 次被盗，别墅的主人有一条狗，狗平均每周晚上叫 3 次，在盗贼入侵时狗叫的概率被估计为 0.9， 问题是：在狗叫的时候发生入侵的概率是多少？ 我们假设 A...
• 文章目录1 朴素贝叶斯简介2 条件概率与全概率公式3 贝叶斯推断4 引例5 朴素贝叶斯算法分类(1) GaussianNB(2) MultinomialNB(3) BernoulliNB6 朴素贝叶斯算法优缺点7 实验参考资料 1 朴素贝叶斯简介 贝叶斯分类算法...

...