6.3 分类问题
分类问题的任务:
输入:N个独立同分布(i.i.d)的训练样本,
目标函数:
损失函数:
期望风险:
对于二分类问题,y仅有两个取值-1和1,则其目标为求解一个用于预测y,例如
理论上,对于使用或的所有样本,都应该有:
因此,一些方法会试图最小化分错的样本,即最小化:
其中,为错分样本的集合
一些常见的分布
伯努利分布
单个二进制变量的分布由单个连续参数控制:
二项式分布
给出N个服从伯努利分布的样本中观察到次的概率:
多项式分布
多项式分布是二次分布的推广,变量可以取K个状态,第K个状态被观测到了次的概率为:
多变量正态分布
对于,有
其中,为协方差矩阵的行列式,此分布的图像如下图所示:

6.3.1 Logistic 回归
Logistic回归属于判别式模型
Logistic回归使用Logistic函数估计后验概率:
上式中的即为Logistic函数,它是一个经典的Sigmoid函数
其图像为:
Logistic函数具有以下特性:
时,
时,
取值在0到1之间
一、使用最大似然估计求解Logistic回归
对于二分类问题,可以假设样本的输出服从伯努利分布(0-1分布),则对于和可以统一表达为:
则可以得到其似然函数和对数似然函数为:
梯度为:
则可以使用梯度下降法更新参数:
二、多类Logistic回归
思路是使用softmax函数取代logistic sigmoid:
而对于y,使用一个K维的独热表示的向量来代替,它满足:
同样的,对于样本的概率分布,采用广义伯努利分布表示:
这样就可以写出似然函数:
其中,为softmax函数:
那么,最优化问题就可以写成最小化对数似然函数:
上式中的即为交叉熵损失函数。
对于这个损失函数,采用梯度下降法更新,梯度为:
6.3.2 高斯判别分析(GDA)
GDA属于生成式模型
GDA使用多变量正态分布对进行建模:
则对数似然函数为:
使用MLE,估计各参数为:
GDA与LR的区别
GDA有很强的模型假设:当假设是正确时,处理数据的效率更高
LR假设很弱:对偏离假设的情况更具鲁棒性
实际中,LR更常用
在GDA中,特征向量x中的元素是连续的实数
若特征向量中元素是离散的:
6.3.3 朴素贝叶斯(NB)
NB属于生成式模型
假设给定y时,特征分量相互独立:
那么对于给定的训练数据,,对数似然为:
使用MLE,估计各参数为:
基于此,即可做出预测:
平滑
对于给定的训练集,利用最大似然估计可以估计变量取每个值的概率:
然而,如果训练集中某个类别的数据没有涵盖的第个取值的话,就无法估计相应的条件概率,从而导致模型可能会在测试集上产生误差
对此,可以使用Laplace平滑,在各个估计中加入平滑项:
NB与LR的区别
渐进比较
当模型假设正确:NB与LR产生相似的分类器
当模型假设不正确
LR不假设条件具有独立性,偏差较小
LR的表现优于NB
非渐进比较
参数估计的收敛性
NB:
LR:
本节绘图代码
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(0)
mean = np.array([0, 0])
cov = np.eye(2)
data = np.random.multivariate_normal(mean, cov, (2, 2))
x = np.linspace(-4, 4, 30)
y = np.linspace(-4, 4, 30)
X, Y = np.meshgrid(x, y)
Z = np.zeros_like(X)
for i in range(len(x)):
for j in range(len(y)):
point = np.array([x[i], y[j]])
Z[j, i] = np.exp(-0.5 * np.dot(np.dot((point - mean), np.linalg.inv(cov)), (point - mean).T))
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface (X, Y, Z, cmap='viridis', shade=False)
plt.show()
最后更新于
这有帮助吗?