算法
线性回归(连续)
目标函数推导
预测值与误差:
由中心极限定理可知,误差服从正态分布:
带入可得:
极大似然估计:
取对数:
拆分:
最大化似然函数得到目标函数:
最小化:
目标函数求解
目标函数展开:
对
要令
防止过拟合:
加入正则项目,有三种:
- L1-norm (LASSO回归) :
λ∑|θi| - L2-norm (Ridge岭回归):
λ∑θ2i - ElasticNet (混合前两种) :
λ(p|θi|+(1−p)∑θ2i)
优缺点比较:
- L1:
- 优点:得到解满足稀疏性要求(因为在接近原点处正则项不会变小,L2会),有较高的求解速度。
- 缺点:准确性、稳定性、鲁棒性较差
- L2:
- 优点:准确性、稳定性、鲁棒性较高
- 缺点:求解速度较慢
- ElasticNet:
- 优点:可以同时考虑求解速度和稳定性
逻辑回归(二分类)
推导过程
预测和目标:
其中预测函数
似然函数:
取对数再对
所以函数的求解过程类似于梯度下降法:
实现逻辑回归的代码:
#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回归(多分类)
解决多分类的问题,与逻辑回归类似
预测和目标的函数变为:
最后的跟新函数变为: