分类问题的任务:
输入:N个独立同分布(i.i.d)的训练样本(xi,yi)∈X×C,i=1,2,…,N
目标函数:f∈F
损失函数:L(f;x,y)=I{f(x=y}
期望风险:∫I{f(x=y}dP(x,y)=P(f(x)=y)
对于二分类问题,y仅有两个取值-1和1,则其目标为求解一个w用于预测y,例如
f(x,w)=sgn(wTx)={1−1wTx>0wTx 理论上,对于使用y=−1或y=1的所有样本,都应该有:
wTxy>0 因此,一些方法会试图最小化分错的样本,即最小化:
E^p(w)=−i∈TM∑wTxiyi 其中,TM为错分样本的集合
一些常见的分布
伯努利分布
单个二进制变量x∈{0,1}的分布由单个连续参数β∈[0,1]控制:
P(x∣β)=βx(1−β)1−x 二项式分布
给出N个服从伯努利分布的样本中观察到m次x=1的概率:
P(m∣N,β)=(Nm)βm(1−β)N−m 多项式分布
多项式分布是二次分布的推广,变量可以取K个状态,第K个状态被观测到了mk次的概率为:
P(m1,…,mk∣N,β)=(Nm1,…,mk)k=1∏Kβkmk 多变量正态分布
对于x∼N(μ,Σ),有
p(x)=(2π)D∣Σ∣1exp(−21(x−μ)TΣ−1(x−μ)) 其中,∣Σ∣为协方差矩阵的行列式,此分布的图像如下图所示:
6.3.1 Logistic 回归
Logistic回归使用Logistic函数估计后验概率:
p(y=1∣x)=f(x,w)=g(wTx)=1+exp(−wTx)1 上式中的g(x)=1+e−z1即为Logistic函数,它是一个经典的Sigmoid函数
Logistic函数具有以下特性:
z→∞时,g(z)→1
z→−∞时,g(z)→0
g′(z)=g(z)(1−g(z))
一、使用最大似然估计求解Logistic回归
对于二分类问题,可以假设样本的输出服从伯努利分布(0-1分布),则对于y=0和y=1可以统一表达为:
P(y∣x,w)=(f(x,w))y(1−f(x,w))1−y 则可以得到其似然函数和对数似然函数为:
L(w)=i=1∏NP(yi∣xi,w)=i=1∏N(f(xi,w))yi(1−f(xi,w))1−yil(w)=logL(w)=i=1∑N(yilogf(xi,w)+(1−yi)log(1−f(xi,w))) 梯度为:
∂wj∂l(w)=(yi−f(xi,w))xji, ∀(xi,w) 则可以使用梯度下降法更新参数:
wj=wj+α(yi−f(xi,w))xji 二、多类Logistic回归
思路是使用softmax函数取代logistic sigmoid:
P(Ck∣w,x)=j=1∑Nexp(wjTx)exp(wkTx) 而对于y,使用一个K维的独热表示的向量来代替,它满足:
i=1∑KP(yi∣w,x)=1 同样的,对于样本的概率分布,采用广义伯努利分布表示:
P(y∣μ)=i=1∏Kμiyiμi=P(yi=1∣w,x) 这样就可以写出似然函数:
P(y1,y2,LyN∣w1,…,wK,x1,…,xN)=i=1∏Nk=1∏KP(Ck∣wk,xi)=i=1∏Nk=1∏Kμikyki 其中,μik为softmax函数:
μik=j=1∑Kexp(wjTxi)exp(wkTxi) 那么,最优化问题就可以写成最小化对数似然函数:
minE=min−lnP(y1,…,yN∣w1,…,wK,x1,…,xN)=min−i=1∑Nk=1∑Kykilnμik 上式中的E即为交叉熵损失函数。
对于这个损失函数,采用梯度下降法更新,梯度为:
∂wj∂E=i=1∑N(μij−yji)xi 6.3.2 高斯判别分析(GDA)
GDA使用多变量正态分布对p(x∣y)进行建模:
y(x∣y=0)(x∣y=1)∼Bernoulli(β)∼N(μ0,Σ0)∼N(μ1,Σ1) 则对数似然函数为:
L(β,μ0,μ1,Σ)=logi=1∏Np(xi,yi;β,μ0,μ1,Σ)=logi=1∏Np(yi;β)p(xi∣yi;β,μ0,μ1,Σ) 使用MLE,估计各参数为:
βμkΣ=N1i=1∑NI{yi=1}=i=1∑NI{yi=k}i=1∑NI{yi=k}xi=N1i=1∑N(xi−μyi)(xi−μyi)Tk={0,1} GDA与LR的区别
GDA有很强的模型假设:当假设是正确时,处理数据的效率更高
在GDA中,特征向量x中的元素是连续的实数
若特征向量中元素是离散的:p(x1,…,xD∣y)
6.3.3 朴素贝叶斯(NB)
假设给定y时,特征分量xj相互独立:
p(x1,…,xD∣y)=i=1∏Dp(xi∣y) 那么对于给定的训练数据(xi,yi),i=1,…,N,对数似然为:
L=i=1∑Nj=1∑D[logp(xji∣yi)+logp(yi)] 使用MLE,估计各参数为:
p(xj=1∣y=1)=i=1∑NI{yi=1}i=1∑NI{xji=1,yi=1}p(xj=1∣y=0)=i=1∑NI{yi=0}i=1∑NI{xji=1,yi=0}p(y=1)=Ni=1∑NI{yi=1} 基于此,即可做出预测:
p(y=1∣x)=p(x)p(x∣y=1)p(y=1)=j=1∏Dp(xj∣y=1)p(y=1)+j=1∏Dp(xj∣y=0)p(y=0)j=1∏Dp(xj∣y=1)p(y=1) 平滑
对于给定的训练集{x1,…,xN},利用最大似然估计可以估计变量x取每个值的概率:
p(x=j)=Ni=1∑NI{xi=j}, j=1,…,K 然而,如果训练集中某个类别的数据没有涵盖x的第m个取值的话,就无法估计相应的条件概率,从而导致模型可能会在测试集上产生误差
对此,可以使用Laplace平滑,在各个估计中加入平滑项:
p(x=j)=N+Ki=1∑NI{xi=j}+1, j=1,…,K NB与LR的区别
非渐进比较
参数估计的收敛性
NB:O(logN)
本节绘图代码
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()