最开始学习机器学习的时候,首先遇到的就是回归算法,回归算法里最最重要的就是最小二乘法,为什么损失函数要用平方和,而且还得是最小?仔细想想最小二乘法视乎很合理,但是合理在哪,怎么用数学方法来证明它合理。
J(θ)=12∑i=1m(hθ(x(i))−y(i))2
J(θ)=12∑i=1m(hθ(x(i))−y(i))2
在真实数据中,一个x值可能对应多个y值,因为实际y值可能是受多种因素影响,所以我们可以假设任意一个x对于的y的真实值服从正态分布。我们什么时候可以认为模型 hθ(x)hθ(x) 拟合出来的点最好?当然是 hθ(x)hθ(x) 取值概率最大的时候。
如上图,红蓝两条线来拟合绿色的这些数据点,明显红色的直线拟合效果更好一些。为什么?仔细看图中直线上红色x点,红色的x点正好是当前x值下,训练数据中出现概率最高的位置(之前我们已经假设每个位置y值符合高斯分布)。所以我们要求的就是使得拟合出的线(高纬度是超平面)上概率最大的 θθ,这个时候我们就可以用到极大似然估计。
接下来我们用极大似然来证明最小二乘法。假设误差 ε(i)(1≤i≤m)ε(i)(1≤i≤m)(就是上图中绿色数据点到红色x点的距离)是独立同分布的,服从均值为0,方差为某定值 σ2σ2的高斯分布,我们可以得到似然函数。
y(i)=θTx(i)+ϵ(i)p(ϵ(i))=12π−−√σe−(ϵ(i))22σ2p(y(i)|x(i);θ)=12π−−√σe(−(y(i)−θTx(i))22σ2)
y(i)=θTx(i)+ϵ(i)p(ϵ(i))=12πσe−(ϵ(i))22σ2p(y(i)|x(i);θ)=12πσe(−(y(i)−θTx(i))22σ2)
L(θ)=∏i=1mp(y(i)|x(i);θ)=∏i=1m12π−−√σe(−(y(i)−θTx(i))22σ2)
L(θ)=∏i=1mp(y(i)|x(i);θ)=∏i=1m12πσe(−(y(i)−θTx(i))22σ2)
对上面似然函数求对数得到对数似然函数 ℓ(θ)ℓ(θ)
ℓ(θ)=logL(θ)=log∏i=1m12π−−√σe(−(y(i)−θTx(i))22σ2)=∑i=1m12π−−√σe(−(y(i)−θTx(i))22σ2)=mlog12π−−√σ−1σ2⋅12∑i=1m(hθ(x(i))−y(i))2
ℓ(θ)=logL(θ)=log∏i=1m12πσe(−(y(i)−θTx(i))22σ2)=∑i=1m12πσe(−(y(i)−θTx(i))22σ2)=mlog12πσ−1σ2⋅12∑i=1m(hθ(x(i))−y(i))2
上式中, σσ 是定值,我们要使得上式最大,就得使 12∑mi=1(hθ(x(i))−y(i))212∑i=1m(hθ(x(i))−y(i))2最小,于是我们就得到了最小二乘。
J(θ)=12∑i=1m(hθ(x(i))−y(i))2
J(θ)=12∑i=1m(hθ(x(i))−y(i))2
其实通过这个公式我们可以求得关于 θθ的解析解,可以直接计算出 θθ,但我们一般不这么做,因为求解析解过程中需要求矩阵的逆,这是一个非常耗时的工作(时间复杂度 Θ(n3)Θ(n3)),另外矩阵也不一定可逆,一般都是用梯度下降。但我们还是看下如何求 θθ的解析解。
J(θ)=12∑i=1m(hθ(x(i))−y(i))2=12(Xθ−y)T(Xθ−y)
J(θ)=12∑i=1m(hθ(x(i))−y(i))2=12(Xθ−y)T(Xθ−y)
对 J(θ)J(θ)求一阶导得到梯度。
∇θJ(θ)=∇θ(12(Xθ−y)T(Xθ−y))=∇θ(12(θTXT−yT)(Xθ−y))=∇θ(12(θTXTXθ−θTXTy−yTXθ+yTy))=12(2XTXθ−XTy−(yTX)T)=XTXθ−XTy
∇θJ(θ)=∇θ(12(Xθ−y)T(Xθ−y))=∇θ(12(θTXT−yT)(Xθ−y))=∇θ(12(θTXTXθ−θTXTy−yTXθ+yTy))=12(2XTXθ−XTy−(yTX)T)=XTXθ−XTy
因为 J(θ)J(θ)是存在极小值的凸函数,什么时候取最小值呢?当然是梯度为0的时候。
XTXθ−XTy=0XTXθ=XTyθ=(XTX)−1XTy