朴素贝叶斯
介绍
朴素贝叶斯是一个使用贝叶斯定理进行建模的分类器。属于分类算法一列,它是基于贝叶斯定理和一个朴素的假设,即所有的特征都相互独立于其他给定的响应变量。而朴素贝叶斯还有一个假设就是每个特征同等重要。尽管这个假设看起开起来是有错的,但是实际效果却很好。朴素贝叶斯有多项式朴素贝叶斯、高斯朴素贝叶斯、伯努利朴素贝叶斯这几种类型,
原理
P(A)是观察到事件A的概率,P(B)是观察到事件B的概率。P(A|B)是观察到事件B的同时又观察到事件A的条件概率。
将公式换为平时分类的就会更容易识别
我们要求的就是P(类别|特征)的值,即在有这些特征下属于某类别的概率。
实现
scikit-learn实现
这里使用皮马印第安人糖尿病数据集做实验,数据集在这 数据集
import numpy as np
from sklearn.naive_bayes import GaussianNB # 导入sklearn的贝叶斯算法
from sklearn.model_selection import train_test_split
data = pd.read_csv('/home/h/Downloads/pima-indians-diabetes.data',header=None)
y = data[8]
X = data[[0,1,2,3,4,5,6,7]]
X_train,X_test,y_train,y_test = train_test_split(X,y,stratify=y,random_state=11)
nb = GaussianNB()
nb.fit(X_train,y_train)
print('准确率是:',nb.score(X_test,y_test))
# output
准确率是: 0.75
这里可以将朴素贝叶斯与逻辑回归做一个比较
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_breast_cancer
from sklearn.linear_model import LogisticRegression
from sklearn.naive_bayes import GaussianNB
from sklearn.model_selection import train_test_split
%matplotlib inline
data = pd.read_csv('/home/h/Downloads/pima-indians-diabetes.data',header=None)
y = data[8]
X = data[[0,1,2,3,4,5,6,7]]
X_train,X_test,y_train,y_test = train_test_split(X,y,stratify=y,random_state=11)
lr = LogisticRegression()
nb = GaussianNB()
lr_score = []
nb_score = []
train_sizes = range(10,len(X_train),10)
for train_size in train_sizes:
X_slice,_,y_slice,_ = train_test_split(X_train,y_train,train_size=train_size,stratify=y_train,random_state=11)
nb.fit(X_slice,y_slice)
nb_score.append(nb.score(X_test,y_test))
lr.fit(X_slice,y_slice)
lr_score.append(lr.score(X_test,y_test))
plt.plot(train_sizes,nb_score,label='native bayes')
plt.plot(train_sizes,lr_score,linestyle='--',label='logistic regression')
plt.xlabel('Number of training instances')
plt.ylabel('Test set accuracy')
plt.legend()
结果如图所示:
这里我们讲数据集分层并且不断增大,可以看到,在较少数据集的时候,朴素贝叶斯的准确率是要高于逻辑回归的,但是当数据集越来越大时,逻辑回归就会优于朴素贝叶斯。所以在进行分类任务的时候,可以根据数据集的大小进行分类算法的选择。
总结
朴素贝叶斯是一个基于概率论的分类方法,
优点:在小数据集上表现要优于其他分类算法、对缺失值不敏感、具有稳定的分类效率。
缺点:存在错误率、对数据的的准备方式敏感、假设特征不关联有瑕疵。
应用场景:欺诈检测、垃圾邮件过滤等