算法
线性回归(连续)
目标函数推导
预测值与误差:
y(i)=θTx(i)+εi
由中心极限定理可知,误差服从正态分布:
p(εi)=12π√σexp(−(εi)22σ2)
带入可得:
p(εi)=12π√σexp(−(y(i)−θTx(i))22σ2)
极大似然估计:
L(θ)=∏m112π√σexp(−(y(i)−θTx(i))22σ2)
取对数:
L(θ)=∑m1log12π√σexp(−(y(i)−θTx(i))22σ2)
拆分:
L(θ)=mlog12π√−12σ2∑m1(y(i)−θTx(i))2
最大化似然函数得到目标函数:
最小化:
∑m1(y(i)−θTx(i))2
也就是最小二乘法
目标函数求解
目标函数展开:
J(θ)=12(Xθ−Y)T(Xθ−Y))
对
θ
求导,令导数为0:
θ=(XTX)−1XTY
要令
(XTX)−1
求逆可执行,加入正则项(满秩的方阵可逆),最终解为:
θ=(XTX+λI)−1XTY
防止过拟合:
加入正则项目,有三种:
- L1-norm (LASSO回归) : λ∑|θi|
- L2-norm (Ridge岭回归): λ∑θ2i
- ElasticNet (混合前两种) : λ(p|θi|+(1−p)∑θ2i)
优缺点比较:
- L1:
- 优点:得到解满足稀疏性要求(因为在接近原点处正则项不会变小,L2会),有较高的求解速度。
- 缺点:准确性、稳定性、鲁棒性较差
- L2:
- 优点:准确性、稳定性、鲁棒性较高
- 缺点:求解速度较慢
- ElasticNet:
- 优点:可以同时考虑求解速度和稳定性
逻辑回归(二分类)
推导过程
预测和目标:
P(y|x;θ)=h(x)y(1−h(x))1−y
其中预测函数
h(x)=11+e−θTx
h(x)
对
θj
求偏导是
h(x)∗(1−h(x))∗xji
似然函数:
L(θ)=∏mih(xi)yi(1−h(xi))1−yi
取对数再对
θ
求偏导,将上式的
h(x)∗(1−h(x))∗xji
带入可以得到目标函数的偏导数:
∑mi(yi−h(xi))∗xji
所以函数的求解过程类似于梯度下降法:
θj=θj−α(yi−h(xi))xji
实现逻辑回归的代码:
θj=θj−α(yi−h(xi))xji
#alpha:步长,maxCycles:迭代次数,可以调整
def gradAscent(dataArray,labelArray,alpha,maxCycles):
dataMat=mat(dataArray) #size:m*n
labelMat=mat(labelArray) #size:m*1
m,n=shape(dataMat)
weigh=ones((n,1))
for i in range(maxCycles):
h=sigmoid(dataMat*weigh)
error=labelMat-h #size:m*1
weigh=weigh+alpha*dataMat.transpose()*error
return weigh
softmax回归(多分类)
解决多分类的问题,与逻辑回归类似
预测和目标的函数变为:
P(y=k|x;θ)=eθTkx∑Kl=1eθTlx
最后的跟新函数变为:
θj=θj−αI(yi=j)(1−p(yi=j|xi;θ))xi