大致思想
机器学习中的线性回归算法最基本的思想:根据数据集(feature+label)模拟出一条近似的曲线,使得每个点的落点都在曲线上或者是曲线的周围不远的地方。
实现方法
1.回归模型
首先设该线性回归函数为 y = ∑ i p r o p e r t y w i x + b y=\sum ^{property}_{i}w_{i}x+b y=∑ipropertywix+b (w是权重,b是偏置值,x是输入的数据,y表示预测值)。
2.损失函数
损失函数表示预测的值和lable值的差距,这里取平方和的意义在于“放大”预测值和真实值的差距(这里的放大有两种含义:差距大于1平方后会放大差距,差距小于1平方后会缩小差距)。
损失函数: L o s s l a b l e = 1 2 n u m ∑ n = 1 n u m ( y ^ n − y n ) 2 Loss_{lable}=\dfrac{1}{2num}\sum ^{num}_{n=1}\left( \widehat{y}_{n}-y_{n}\right) ^{2} Losslable=2num1∑n=1num(y n−yn)2
其中num表示数据的规模, y ^ n \widehat{y}_{n} y n表示真是值, y n y_{n} yn表示预测值。这里用欧式距离计算的损失值是平均损失,乘1/2为了的后面求导将系数变为1方便计算
关于过拟合问题:
为了防止过拟合我们应该加入regulation项,因为b是个常数,只需要考虑w就好了。
通常regulation项这么定义: L o s s r e g u l a t i o n = 1 2 ∑ i = 1 p r o p e r t y w i 2 Loss_{regulation}=\dfrac{1}{2}\sum ^{property}_{i=1}w^{2}_{i} Lossregulation=21∑i=1propertywi2
综上损失函数:
L o s s = L o s s l a b l e + L o s s r e g u l a t i o n = 1 2 [ 1 n u m ∑ n = 1 n u m ( y ^ n − y n ) 2 + β ∑ i = 1 p r o p e r t y w i 2 ] Loss=Loss_{lable}+Loss_{regulation}=\dfrac{1}{2}\left[ \dfrac{1}{num}\sum ^{num}_{n=1}\left ( \widehat{y}_{n}-y_{n}\right) ^{2}+\beta \sum ^{property}_{i=1}w_{i}^{2}\right] Loss=Losslable+Lossregulation=21[num1∑n=1num(y n−yn)2+β∑i=1propertywi2]( β \beta β为正则系数)
3.梯度更新
我们的目标就是使得Loss尽可能的减小,所以所要优化的参数就是权重w和偏置值b,所以我们要求得Loss在w和b上的偏微分。
∂ L o s s ∂ w i = 1 n u m ∑ n = 1 n u m ( y ^ n − ∑ i = 1 p r o p e r t y w i x i − b ) ( − x i ) + β ∑ i = 1 p r o p e r t y w i \dfrac{\partial Loss}{\partial w_{i}}=\dfrac{1}{num}\sum ^{{num}}_{n=1}\left( \widehat{y}_{n}-\sum ^{property}_{i=1}w_{i}x_{i}-b\right) \left( -x_{i}\right) +\beta \sum ^{property}_{i=1}w_{i} ∂wi∂Loss=num1∑n=1num(y n−∑i=1propertywixi−b)(−xi)+β∑i=1propertywi
∂ L o s s ∂ b = 1 n u m ∑ n = 1 n u m ( y ^ n − ∑ i = 1 p r o p e r t y w i x i − b ) ( − 1 ) \dfrac{\partial Loss}{\partial b}=\dfrac{1}{num}\sum ^{{num}}_{n=1}\left( \widehat{y}_{n}-\sum ^{property}_{i=1}w_{i}x_{i}-b\right) \left( -1\right) ∂b∂Loss=num1∑n=1num(y n−∑i=1propertywixi−b)(−1)
进行梯度更新:
w n e w i = w i − η w ∂ L o s s ∂ ω i w_{newi}=w_{i}-\eta _{w}\dfrac{\partial Loss}{\partial \omega _{i}} wnewi=wi−ηw∂ωi∂Loss
w n e w b = b − η b ∂ L o s s ∂ b w_{newb}=b-\eta _{b}\dfrac{\partial Loss}{\partial b} wnewb=b−ηb∂b∂Loss
其中 η w \eta _{w} ηw为权重w的学习率, η b \eta _{b} ηb是偏置值b的学习率。
3.学习率的更新:
这里我们使用比较经典的adagrad(中心思想:刚开始我们更新的时候要让 ∂ L o s s ∂ w i \dfrac{\partial Loss}{\partial w_{i}} ∂wi∂Loss的值比重较大进而其更新的幅度就较大,当更新一定的次数之后,曲线就越来越接近理想曲线,这时我们希望更新的幅度变小,这样才更容易拟合曲线。我们就要每次训练不断的减小学习率的值)
学习率更新公式: η n = η n − 1 ∑ i = 1 n − 1 g r a d i 2 ‾ \eta _{n}=\dfrac{\eta _{n-1}}{\sqrt{\overline{\sum ^{n-1}_{i=1}grad^{2}_{i}}}} ηn=∑i=1n−1gradi2ηn−1