Table of Contents
朴素贝叶斯的分类
在sklearn中,一共有3个朴素贝叶斯的分类算法,分别是GaussianNB,MultinomialNB和BernoulliNB
GaussianNB
GaussianNB就是先验为高斯分布(正态分布)的朴素贝叶斯,假设每个标签的数据都服从简单的正态分布。
P ( X j = x j ∣ Y = C k ) = 1 2 π σ k 2 e x p ( − ( x j − μ k ) 2 2 σ k 2 ) P(X_j=x_j|Y=C_k)=\frac{1}{\sqrt{2\pi\sigma^2_k}}exp\left(-\frac{(x_j-\mu_k)^2}{2\sigma^2_k}\right) P(Xj=xj∣Y=Ck)=2πσk21exp(−2σk2(xj−μk)2)
其中 C k C_k Ck为Y的第k类类别, μ k \mu_k μk和 σ k 2 \sigma^2_k σk2为需要从训练集估计的值
理解起来可能有点抽象,那我们从朴素贝叶斯的原理说起:
P ( 类 别 ∣ 特 征 ) = P ( 特 征 ∣ 类 别 ) P ( 类 别 ) P ( 特 征 ) P(类别|特征)=\frac{P(特征|类别)P(类别)}{P(特征)} P(类别∣特征)=P(特征)P(特征∣类别)P(类别)
我们需要计算在给定的特征下,每种类别的概率值的大小,即等号左边的P(类别|特征),选取其中概率最大的类别,即为最终的判断结果。
为了求的等号左边的P(类别|特征),我们需要计算等号右边的分式。
对于这个分式,每个类别在计算的时候,对应的分母都是一样的,而且我们只是想要比大小,所以只需要计算出每个类别的情况下,分子的大小
P(类别)计算很简单,就是这个类别的样本数/总样本数
P(特征|类别)的计算,我们之前采用的是数数的方法,数一下,在这个类别下,这个标签所占的比例是多少。这对于离散型的变量是比较容易的数的,但是对于连续性的变量来说,就不现实了。所以,对于连续性变量,我们可以通过高斯公式计算出P(特征|类别)
以鸢尾花数据集为例,理解GaussianNB
鸢尾花数据集给出了每朵花的特征,以及花的类别,下面来导入鸢尾花数据集
import numpy as np
import pandas as pd
dataSet = pd.read_csv('iris.txt',header=None)
dataSet.columns=['feature0','feature1','feature2','feature3','label']
dataSet.head(3)
feature0 | feature1 | feature2 | feature3 | label | |
---|---|---|---|---|---|
0 | 5.1 | 3.5 | 1.4 | 0.2 | Iris-setosa |
1 | 4.9 | 3.0 | 1.4 | 0.2 | Iris-setosa |
2 | 4.7 | 3.2 | 1.3 | 0.2 | Iris-setosa |
可以看出鸢尾花数据集一共有4个特征,最后一列是标签列
dataSet.iloc[:,-1].unique()
array(['Iris-setosa', 'Iris-versicolor', 'Iris-virginica'], dtype=object)
可以看出,鸢尾花数据集的标签一共是3种,代表三种鸢尾花
那么测试集就是给出一朵花的4个特征,判断是属于哪类鸢尾花
假如我们的测试集是test = [4.2 , 4.5 , 1.2 , 0.5]
如果我们想通过GaussianNB来判断结果的话,我们需要分别计算在给定特征的情况下,是每种标签的可能性,即:
- P(‘Iris-setosa’|[4.2 , 4.5 , 1.2 , 0.5])
- P(‘Iris-versicolor’|[4.2 , 4.5 , 1.2 , 0.5] )
- P(‘Iris-virginica’|[4.2 , 4.5 , 1.2 , 0.5] )
进一步展开的话
P ( ′ I r i s − s e t o s a ′ ∣ [ 4.2 , 4.5 , 1.2 , 0.5 ] ) = P ( [ 4.2 , 4.5 , 1.2 , 0.5 ] ∣ ′ I r i s − s e t o s a ′ ) P ( ′ I r i s − s e t o s a ′ ) P [ 4.2 , 4.5 , 1.2 , 0.5 ] P('Iris-setosa'|[4.2 , 4.5 , 1.2 , 0.5]) = \frac{P([4.2 , 4.5 , 1.2 , 0.5]|'Iris-setosa')P('Iris-setosa')}{P[4.2 , 4.5 , 1.2 , 0.5]} P(′Iris−setosa′∣[4.2,4.5,1.2,0.5])=P[4.2,4.5,1.2,0.5]P([4.2,4.5,1.2,0.5]∣′Iris−setosa′)P(′Iris−setosa′)
P ( ′ I r i s − v e r s i c o l o r ′ ∣ [ 4.2 , 4.5 , 1.2 , 0.5 ] ) = P ( [ 4.2 , 4.5 , 1.2 , 0.5 ] ∣ ′ I r i s − v e r s i c o l o r ′ ) P ( ′ I r i s − v e r s i c o l o r ′ ) P [ 4.2 , 4.5 , 1.2 , 0.5 ] P('Iris-versicolor'|[4.2 , 4.5 , 1.2 , 0.5]) = \frac{P([4.2 , 4.5 , 1.2 , 0.5]|'Iris-versicolor')P('Iris-versicolor')}{P[4.2 , 4.5 , 1.2 , 0.5]} P(′Iris−versicolor′∣[4.2,4.5,1.2,0.5])=