带你学习朴素贝叶斯分类器

Posted AIrange

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带你学习朴素贝叶斯分类器相关的知识,希望对你有一定的参考价值。


最近,90后和00后的区别一直是大家喜欢讨论的话题,今天带大家以这个话题为例来开始今天的学习。



比如下面这个数据,是8个人的信息,其中有4个90后,4个00后,他们主要通讯工具、主要视频软件、是否使用微博等问题上存在着差异。


带你学习朴素贝叶斯分类器


现在我们提出一个问题,如果一个人是90后或者00后,他的主要通讯工具是微信、主要视频软件是抖音、没有使用微博,那么我们猜测他是90后还是00后呢?

想要解决这个问题,可以用我们今天将要学习的算法。


本文内容:
1、朴素贝叶斯分类器如何解决问题
2、sklearn中的三种模型
3、实例应用


朴素贝叶斯分类器(Naive Bayes Classifier)


如果一个人是90后或者00后,他的主要通讯工具是微信、主要视频软件是抖音、没有使用微博,猜测他是90后还是00后。


显然这是一个二分类问题。


利用上面的8个数据,我们可以借用朴素贝叶斯分类的思想来解决这个问题。



带你学习朴素贝叶斯分类器

贝叶斯公式

带你学习朴素贝叶斯分类器


P(·):事件发生的概率。


P(B): 先验概率,是指根据以往经验和分析得到的概率。

例如,你投一个硬币,知道0.5概率正面朝上,0.5概率背面朝上。或者在不知道这个孩子任何特征的情况下,知道他是90后的概率是0.5,00后的概率是0.5。


P(A|B):条件概率,为当B事件发生的时候,A发生的概率。
也就是现在已知B发生,在这个基础上,A发生的概率。例如,你已知这个人是90后,他使用微信的概率是多少。


P(B|A):后验概率,是引入了新的信息后,对先验概率的修正。
例如,最开始由先验概率得到,这个孩子是90后和00后的概率都是0.5,现在因为知道他的一些特征,从而可以修正这个概率。


接下来我们看看贝叶斯公式如何用在机器学习的。


带你学习朴素贝叶斯分类器

朴素贝叶斯分类


带你学习朴素贝叶斯分类器


P(类别):客体属于此类别的概率。

P(特征):客体具有此特征的概率。


本题,我们想求解的问题是,一个人的主要通讯工具是微信、主要视频软件是抖音、没有使用微博,那么我们猜测他属于90后和00后的哪个类别。


也就是当这个人的特征1=微信,特征2=抖音,特征3=否的基础上,他是90后的概率是多少?他是00后的概率是多少?


带你学习朴素贝叶斯分类器


如果P1>P2,则判定他为90后,否则判定为00后。

用贝叶斯公式求解P1,P2:


带你学习朴素贝叶斯分类器

可以看到右边等式分母相同,所以我们只需求解分子然后比较分子大小即可。


首先,已知先验概率

带你学习朴素贝叶斯分类器

朴素贝叶斯,之所以称为朴素,是因为假定特征之间相互条件独立。也就是假设使用什么聊天工具、视频软件是否玩微博之间没有关系,之间的概率不会相互影响。


带你学习朴素贝叶斯分类器


P(特征1=微信,特征2=抖音,特征3=否|90后)=P(特征1=微信|90后)P(特征2=抖音|90后)P(特征3=否|90后)=1*1/4*1/4=0.0625


带你学习朴素贝叶斯分类器


P(特征1=微信,特征2=抖音,特征3=否|00后)=P(特征1=微信|00后)P(特征2=抖音|00后)P(特征3=否|00后)=1/4*3/4*1/2=0.09375


P(特征1=微信,特征2=抖音,特征3=否|90后)P(90后)=0.0625*0.5=0.03125


P(特征1=微信,特征2=抖音,特征3=否|00后)P(00后)=0.09375*0.5=0.046875


所以,可以得到 P2>P1,所以他是00后的可能性大一点,判断为00后。


理解完朴素贝叶斯分类的思想,我们来看看在sklearn的包中有哪些模型可供我们使用。


可以看到上面的例子用到的离散型特征,那么连续型特征朴素贝叶斯可以处理吗?

别担心,这里有很多模型可供我们使用。



带你学习朴素贝叶斯分类器

朴素贝叶斯的三种模型


不同的朴素贝叶斯分类器的主要区别在于它们对分布的假设:

带你学习朴素贝叶斯分类器

是xi出现在一个属于y类的样本中的概率。

多项式模型


sklearn.naive_bayes.MultinomialNB(alpha=1.0,fit_prior=True,class_prior=None)

适用于具有离散特征的分类(例如,用于文本分类的字数统计)。


带你学习朴素贝叶斯分类器

Nyi为特征i在训练集T上的y类样本出现的次数,Ny是y类样本的总数。其中α为平滑值(平滑值α≥0是为了解决学习数据集中不存在的具有特征i的样本,进一步防止了计算中的零概率),n为类别个数。


高斯模型


sklearn.naive_bayes.GaussianNB(priors=None, var_smoothing=1e-09)

适用于具有连续型特征的分类。


带你学习朴素贝叶斯分类器

这里将概率密度视为高斯概率密度分布。

其中的参数σ 和μ 通过在训练集上进行最大似然估计来得到。

将xi代入,即可求出特征i出现在一个属于y类的样本中的概率。


伯努利模型


sklearn.naive_bayes.BernoulliNB(alpha=1.0,binarize=0.0,fit_prior=True,  class_prior=None)


带你学习朴素贝叶斯分类器


像MultinomialNB一样,此分类器适用于离散数据。区别在于,虽然MultinomialNB可处理出现次数,但BernoulliNB是为二进制/布尔型特征而设计的。


接下来我们来用实例调用模型。


带你学习朴素贝叶斯分类器

实例

导入包


1import numpy as np
2import matplotlib.pyplot as plt
3import pandas as pd


查看数据


1dataset.head()


带你学习朴素贝叶斯分类器


本例通过用户的年龄和预估薪水来预测用户购买汽车的意愿,为二分类问题。


数据预处理


 1dataset[['age','estimatedsalary']]=dataset[['age','estimatedsalary']].astype(int)
2#设置特征和标签
3X = dataset.iloc[:, [01]].values
4y = dataset.iloc[:, 3].values
5#划分训练集和测试集
6from sklearn.model_selection import train_test_split
7X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0)
8#特征标准化
9from sklearn.preprocessing import StandardScaler
10sc = StandardScaler()
11X_train = sc.fit_transform(X_train)
12X_test = sc.fit_transform(X_test)


调用模型


因为是连续型特征,所以这里调用GaussianNB分类器


1from sklearn.naive_bayes import GaussianNB
2Gaus_classifier = GaussianNB()
3Gaus_classifier.fit(X_train, y_train)


预测


1y_pred = Gaus_classifier.predict(X_test)


查看混淆矩阵


1from sklearn.metrics import confusion_matrix
2cm = confusion_matrix(y_test, y_pred)
3cm


带你学习朴素贝叶斯分类器


现实生活中朴素贝叶斯算法应用广泛,其中比较常用的就是文本分类,对NLP感兴趣的同学可以多多学习哦。



参考文档

https://scikit-learn.org/stable/modules/naive_bayes.html
https://zhuanlan.zhihu.com/p/26262151


精彩内容回顾:




编辑:Sunam




在疫情防控依旧严峻的形势下,全国高校延期开学,高校师生停课不停学。AI靶场将向全国高校、教师、学生免费提供实战化数据分析环境及多样化优质课程等资源。



抗击疫情
我们一直都在
武汉加油!
中国加油!




以上是关于带你学习朴素贝叶斯分类器的主要内容,如果未能解决你的问题,请参考以下文章

学习带你搞懂朴素贝叶斯分类算法

机器学习:贝叶斯分类器——高斯朴素贝叶斯分类器代码实现

带你搞懂朴素贝叶斯分类算法

机器学习基础——带你实战朴素贝叶斯模型文本分类

轻松带你搞懂朴素贝叶斯分类算法

NBC朴素贝叶斯分类器 ————机器学习实战 python代码