贝叶斯分类(朴素贝叶斯)
理论
贝叶斯分类器的理论框架基于贝叶斯决策论(Bayesian decision theory),而贝叶斯决策论是概率框架下实施决策的基本方法。对分类任务来说,在所有相关概率都已知的理想情形下,贝叶斯决策论考虑如何基于这些概率和误判损失来选择最优的类别标记。
具体来说,若目标是最小化分类错误率,则我们要找的就是:对于每个样本 x,选择能使后验概率 P(C | x)最大的类别标记。 而基于贝叶斯公式来估计后验概率 P(C I x) 的主要用难在于:类条件概率 P(x I c) 是所有属性上的联合概率,难以从有限的训练样本直接
估计而得.为避开这个障碍,朴素贝叶斯分类器采用了"属性条件独立性假设":对已知类别,假设所有属性相互独立.换言之,假设每个属性独立地对分类结果发生影响.则有
对连续属性可考虑概率密度函数,假定p(xi|c)服从正态分布其参数分别是第C类样本在第i个属性上取值的均值和方差,则有
需注意,若某个属性值在训练集中没有与某个类同时出现过,则直接进行概率估计,再进行判别将出现问题.在估计概率值时通常要进行"平滑" (smoothing) ,常用"拉普拉斯修正:
代码实战
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()![请添加图片描述](https://img-blog.csdnimg.cn/c8eb5812d8114f2a9bcc18f96c71ce42.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bq35Li6,size_20,color_FFFFFF,t_70,g_se,x_16)
from sklearn.datasets import make_blobs
# make_blobs:为聚类产生数据集
# n_samples:样本点数,n_features:数据的维度,centers:产生数据的中心点,默认值3
# cluster_std:数据集的标准差,浮点数或者浮点数序列,默认值1.0,random_state:随机种子
X, y = make_blobs(n_samples = 100, n_features=2, centers=2, random_state=2, cluster_std=1.5)
plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='RdBu')
plt.show()
from sklearn.naive_bayes import GaussianNB
model = GaussianNB()
model.fit(X, y)
rng = np.random.RandomState(0)
X_test = [-6, -14] + [14, 18] * rng.rand(2000, 2)
y_pred = model.predict(X_test)
plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='RdBu')
lim = plt.axis()
plt.scatter(X_test[:, 0], X_test[:, 1], c=y_pred, s=20, cmap='RdBu', alpha=0.1)
plt.axis(lim)
plt.show()