朴素贝叶斯分类器

本文概要

  • 为什么叫朴素贝叶斯?
  • 贝叶斯定理
  • 朴素贝叶斯分类器的工作
  • 朴素贝叶斯模型的类型
  • 朴素贝叶斯算法的Python实现
  • 朴素贝叶斯算法是一种监督学习算法,该算法是基于贝叶斯定理,并用于解决分类问题。
  • 它主要用于在包括高维训练数据集文本分类。
  • 朴素贝叶斯分类器是简单和最有效的分类算法,它有助于建立快速的机器学习模型,可以做出快速的预测之一。
  • 这是一个概率分类,它预测的对象的概率的基础上,该装置。
  • 朴素贝叶斯算法的一些最典型的例子是垃圾邮件过滤,青涩分析和分类的文章。
为什么叫朴素贝叶斯?朴素贝叶斯算法由两个词语朴素贝叶斯和,其可被描述为:
  • Naive:之所以称为Naive,是因为它假设某个特性的出现独立于其他特性的出现。例如,如果水果是根据颜色、形状和味道来识别的,那么红色、球形和甜的水果就是苹果。因此,每个特性都各自有助于识别它是否是苹果,而不依赖于其他特性。
  • 贝叶斯:之所以叫贝叶斯是因为它依赖于贝叶斯定理的原理。
贝叶斯定理
  • 贝叶斯定理也被称为贝叶斯法则或贝叶斯定律,这是用来确定与先前知识假设的概率。这取决于条件概率。
  • 对贝叶斯定理的公式给出如下:
朴素贝叶斯分类器

文章图片
哪里,
P(A | B)是后验概率:在观察到的事件B.假设A的概率
P(B | A)是可能性概率:所提供的证据的概率是一个假设的概率是真实的。
P(A)是先验概率:观察证据之前假设的概率。
P(B)是边缘概率:证据概率。
朴素贝叶斯分类器的工作朴素贝叶斯分类器的工作可以用下面的例子来理解:
假设我们有天气状况的数据集和相应的目标变量“播放”。因此,使用此数据集,我们需要决定是否应根据天气情况在某一天玩与否。因此,要解决这个问题,我们需要遵循以下步骤:
  1. 转换给定数据集为频率表。
  2. 通过查找的功能给出的概率产生似然表。
  3. 现在,使用贝叶斯定理来计算后验概率。
问题:如果天气晴朗,那么球员应该发挥或没有?
解决方法:要解决这个问题,首先考虑下面的数据集:
外表
0Rainy
1Sunny
2Overcast
3Overcast
4Sunny没有
5Rainy
6Sunny
7Overcast
8Rainy没有
9Sunny没有
10Sunny
11Rainy没有
12Overcast
13Overcast
对于天气状况的频率表:
WeatherYes没有
Overcast50
Rainy22
Sunny32
Total10
似然表气象条件:
WeatherNo
Overcast055/14= 0.35
多雨的224/14 = 0.29
Sunny235/14=0.35
All4/14 = 0.2910/14=0.71
应用Bayes原理:
P(是|晴朗)= P(阳光|是)* P(是)/ P(阳光)
P(阳光|是)= 3/10 = 0.3
P(晴天)= 0.35
P(是)= 0.71
所以P(是|阳光)= 0.3 * 0.71 / 0.35 = 0.60
【朴素贝叶斯分类器】P(无|阳光)= P(阳光|否)* P(否)/ P(阳光)
P(阳光| NO)= 2/4 = 0.5
P(否)= 0.29
P(晴天)= 0.35
所以P(无|晴朗)= 0.5 * 0.29 / 0.35 = 0.41
所以,我们可以从上述计算看出,P(是|阳光)> P(无|阳光)
因此,在一个阳光明媚的日子,玩家可以玩游戏。
朴素贝叶斯分类器的优点:
  • 朴素贝叶斯是的快速和容易ML算法来预测一类数据集之一。
  • 它可用于二进制和多级分类。
  • 相比于其他算法它在多类预测表现良好。
  • 它是文本分类问题的最流行的选择。
朴素贝叶斯分类器的缺点:
  • 朴素贝叶斯假设所有的功能是独立的或不相关的,所以它不能学特征之间的关系。
朴素贝叶斯分类器的应用:
  • 它是用于信用评分。
  • 它在医学数据分类使用。
  • 它可以实时预测中使用,因为朴素贝叶斯分类器是一个渴望学习。
  • 它是在文本分类使用诸如垃圾邮件过滤和情绪分析。
朴素贝叶斯模型的类型有三种类型的朴素贝叶斯模型,其给出如下:
  • 高斯:高斯模型假设特征服从正态分布。这意味着如果预测取连续值,而不是离散的,则模型假定这些值是从高斯分布进行采样。
  • 多项式:当数据是多项式分布多项式朴素贝叶斯分类器。它主要用于文档分类的问题,这意味着特定文档所属的类别,例如体育,政治,教育,等等。分类器使用的预测单词的频率。
  • 伯努利:伯努利分类的工作原理类似于多项分类,但预测变量是独立的布尔变量。例如,如果一个特定的单词存在或不存在中的文档。这种模式也是著名的文档分类的任务。
朴素贝叶斯算法的Python实现现在,我们将使用Python实现一个朴素贝叶斯算法。因此,对于这一点,我们将使用“用户 – 数据”的数据集,这是我们在其他分类模型已经使用。因此,我们可以轻松地比较与其他车型的朴素贝叶斯模型。
步骤来实现:
  • 数据前处理步骤
  • 装修朴素贝叶斯训练集
  • 预测测试结果
  • 结果的测试精度(混淆矩阵的创建)
  • 可视化测试集的结果。
1)数据预处理步骤:
在这一步中,我们将预处理/准备数据,使我们可以在我们的代码有效地使用它。正如我们在数据预处理做的是类似的。这样做的代码下面给出:
Importing the libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd# Importing the dataset dataset = pd.read_csv('user_data.csv') x = dataset.iloc[:,[2,3]].values y = dataset.iloc[:,4].values# Splitting the dataset into the Training set and Test set from sklearn.model_selection import train_test_split x_train,x_test,y_train,y_test = train_test_split(x,y,test_size = 0.25,random_state = 0)# Feature Scaling from sklearn.preprocessing import StandardScaler sc = StandardScaler() x_train = sc.fit_transform(x_train) x_test = sc.transform(x_test)

在上面的代码中,我们使用“数据集= pd.read_csv(‘user_data.csv’)加载的数据集到我们的程序。装载的数据集被分成训练集和测试集,然后我们已缩放的特征变量。
DataSet的输出给出如下:
朴素贝叶斯分类器

文章图片
2)安装朴素贝叶斯训练集:
预处理步骤后,现在我们将适合的朴素贝叶斯模型训练集。下面是它的代码:
# Fitting Naive Bayes to the Training set from sklearn.naive_bayes import GaussianNB classifier = GaussianNB() classifier.fit(x_train,y_train)

在上面的代码中,我们使用了GaussianNB分类到它适合的训练数据集。我们还可以使用其它分类按我们的要求。
输出:
Out[6]: GaussianNB(priors=None,var_smoothing=1e-09)

3)测试集结果的预测:
现在,我们将预测的测试集的结果。对于这一点,我们将创建一个y_pred新的预测变量,将使用预测功能进行了预测。
# Predicting the Test set results y_pred = classifier.predict(x_test)

输出:
朴素贝叶斯分类器

文章图片
上述输出示出了用于预测矢量的结果y_pred和实数向量y_test。我们可以看到,一些断言是从真正的价值,这是不正确的预测不同。
4)创建混淆矩阵
现在,我们将检查使用混淆矩阵的朴素贝叶斯分类的准确性。下面是它的代码:
# Making the Confusion Matrix from sklearn.metrics import confusion_matrix cm = confusion_matrix(y_test,y_pred)

输出:
朴素贝叶斯分类器

文章图片
正如我们可以在上面混淆矩阵输出看到的,有7 + 3 = 10个不正确的预测,和65 + 25 = 90正确的预测。
5)可视化训练集的结果:
下一步,我们将使用朴素贝叶斯分类器的可视化训练集的结果。下面是它的代码:
# Visualising the Training set results from matplotlib.colors import ListedColormap x_set,y_set = x_train,y_train X1,X2 = nm.meshgrid(nm.arange(start = x_set[:,0].min() - 1,stop = x_set[:,0].max() + 1,step = 0.01),nm.arange(start = x_set[:,1].min() - 1,stop = x_set[:,1].max() + 1,step = 0.01)) mtp.contourf(X1,X2,classifier.predict(nm.array([X1.ravel(),X2.ravel()]).T).reshape(X1.shape),alpha = 0.75,cmap = ListedColormap(('purple','green'))) mtp.xlim(X1.min(),X1.max()) mtp.ylim(X2.min(),X2.max()) for i,j in enumerate(nm.unique(y_set)): mtp.scatter(x_set[y_set == j,0],x_set[y_set == j,1],c = ListedColormap(('purple','green'))(i),label = j) mtp.title('Naive Bayes (Training set)') mtp.xlabel('Age') mtp.ylabel('Estimated Salary') mtp.legend() mtp.show()

输出:
朴素贝叶斯分类器

文章图片
在上面的输出我们可以看到,朴素贝叶斯分类器与细界偏析的数据点。这是因为我们已经在代码中使用GaussianNB分类高斯曲线。
6)可视化的测试组的结果:
# Visualising the Test set results from matplotlib.colors import ListedColormap x_set,y_set = x_test,y_test X1,X2 = nm.meshgrid(nm.arange(start = x_set[:,0].min() - 1,stop = x_set[:,0].max() + 1,step = 0.01),nm.arange(start = x_set[:,1].min() - 1,stop = x_set[:,1].max() + 1,step = 0.01)) mtp.contourf(X1,X2,classifier.predict(nm.array([X1.ravel(),X2.ravel()]).T).reshape(X1.shape),alpha = 0.75,cmap = ListedColormap(('purple','green'))) mtp.xlim(X1.min(),X1.max()) mtp.ylim(X2.min(),X2.max()) for i,j in enumerate(nm.unique(y_set)): mtp.scatter(x_set[y_set == j,0],x_set[y_set == j,1],c = ListedColormap(('purple','green'))(i),label = j) mtp.title('Naive Bayes (test set)') mtp.xlabel('Age') mtp.ylabel('Estimated Salary') mtp.legend() mtp.show()

输出:
朴素贝叶斯分类器

文章图片
上述输出是用于测试组数据最终输出。正如我们所看到的分类创造了一个高斯曲线分割“购买”和“未购买”变量。还有我们在混淆矩阵计算了一些错误的预测。但它仍然是相当不错的分类。

    推荐阅读