线性回归
一、理论部分
线性回归:在有限的数据中,通过调整参数,来拟合出一条直线,并以此直线(模型)来对未知的数据进行预测。
直线的一般形式:
y = w × x + b y = w \times x + b y=w×x+b
其中整个直线的状态由 w 和 b w和b w和b决定, w w w决定直线的斜率(也就是倾斜角度), b b b决定直线在Y轴上的截距(控制直线的上下平移,也称为偏置)。因此,我们只需要计算出 w w w和 b b b的值即可确定出一条具体的直线,接下来研究如何找到 w w w和 b b b。
专有名词
名词 | 释义 |
---|---|
训练集 | 用于训练模型的数据集 |
测试集 | 用于检验模型的质量的数据集 |
训练样本/训练点(Training Sample) | 训练集中的每一项数据 |
特征(Features) | 输入到模型中的数据,可以是数值、类别标签、图像像素值等。 |
标签(Label) | 模型需要预测的目标值。对于分类问题,标签通常是类别名称;对于回归问题,标签则是一个连续值。 |
1. 单变量线性回归
1)数据预处理
我们先研究单变量线性回归,所谓单变量线性回归是指只有一个自变量的一次函数,如: y = w ⋅ x + b y = w\cdot x +b y=w⋅x+b即为单变量直线,只具有一个输入变量 x x x。该直线可以表示在二维平面上(横轴为X,纵轴为Y)。
在拿到一组未划分的数据时,我们通常会将数据分为训练集与测试集,一个简单的划分方式是:取样本的前80%作为训练集,剩余20%作为测试集。
2)定义代价函数
假定我们已经求出来了 w w w和 b b b,那么我们就确定了一条直线,就可以使用该直线进行预测了,为了方便判断我们所预测出来的值y’与真实的值y之间的误差是多少,我们要定义*“一把尺子”*,用于衡量预测值 y ′ y' y′与真实值 y y y之间的误差。这里我们使用均方误差来定义代价函数:
J ( w , b ) = 1 2 m ∑ i = 1 m ( f w , b ( x ( i ) ) − y ( i ) ) 2 J(w,b) = \frac{1}{2m}\sum\limits_{i = 1}^m(f_{w,b}(x^{(i)}) - y^{(i)})^2 J(w,b)=2m1i=1∑m(fw,b(x(i))−y(i))2
公式拆解:
f w , b ( x ( i ) ) − y ( i ) f_{w,b}(x^{(i)}) - y^{(i)} fw,b(x(i))−y(i):其中 f w , b ( x ( i ) ) f_{w,b}(x^{(i)}) fw,b(x(i))代表了使用训练好的模型预测得到的值,而 y ( i ) y^{(i)} y(i)代表了每一个训练样本的真实结果,这两者的差值表示了模型预测得到的值与真实的值之间的误差。
为什么要将误差进行平方?
在所有样本集中,每一个误差可能为正数也可能为负数,进行求和的过程中会有一定概率抵消,这样做会导致在每一项的误差都很大时(如:-100,+90,-25,+30),进行求和之后得到一个小的值(-5),最终得出一个错误的判断。
1 2 m \frac{1}{2m} 2m1:代表了对所有数据误差之和取平均值(这个平均值从某种意义上来讲可以代表整个模型的误差),得到均方误差。
为什么要除以2?
因为在后面进行梯度下降的时候,求导会将指数2给划分到系数上,因为对于大量的数据而言,一个常数对模型的影响不大,为了求导公式的简介,这里提前除以2,以便之后的抵消。
知道了代价函数,只需要想办法将代价降低即可,代价越低,说明我们预测的值与真实的值越接近。
通过观察误差成本函数,可以看到误差成本函数是一个二次函数,即是一个凸函数,凸函数的一个性质是:极值点就是最值点,由于代价函数是一个开口向上的二次函数(可以将公式进行展开,能够直观的感受到平方项的系数是大于0的),因此该凸函数只具有最小值,我们只需要找到代价函数的极小值就得到了最小值。对于误差成本函数 J ( w , b ) J(w,b) J(w,b) , 其公式展开可以写为:
J ( w , b ) = 1 2 m ∑ i = 1 m ( ( w x ( i ) + b ) − y ( i ) ) 2 J(w,b) = \frac{1}{2m}\sum\limits_{i = 1}^m((wx^{(i)}+b) - y^{(i)})^2 J(w,b)=2m1i=1∑m((wx(i)+b)−y(i))2
J J J的大小取决于参数 w w w和 b b b,这可以通过梯度下降的方法进行求解,代价函数的形状大致如下:
3)梯度下降
梯度下降的思想,主要运行了求偏导的方法,这与生物学上的控制变量的方法很相似,如:在控制 b b b不变的情况下去更新 w w w(可视 b b b为常数),公式: w ′ = w − α ∂ J ( w ) ∂ w w' = w - \alpha \frac{\partial J(w)}{\partial w} w′=w−α∂w∂J(w) 表示依次更新了 w w w,其中 α \alpha α 代表了学习率 用于表示步长,也可以理解为下降的速度, ∂ J ( w ) ∂ w \frac{\partial J(w)}{\partial w} ∂w∂J(w) 表示对 w w w求偏导,得到的是 W − J W - J W−J(权重W与代价J的函数) 凸函数上的一个切线,用于表示函数值下降最快的方向,这两者的乘积表示向函数值下降最快的方向进行移动一个步长。这个距离需要依据数据集进行调整,如果 α \alpha α过大(步长过大),会导致 w w w直接越过最低点而到另一端的高点,以至于永远无法接近最小值,如果 α \alpha α过小(步长过小),会导致 w w w接近最小值时越来越慢,消耗计算成本。
学习率( α \alpha α)的调整方法:
先设置一个较小的 α \alpha α 如:0.001 。
然后每次增加10倍,最大为1。
确定某一值后,如:0.01。
再进行3倍的处理,如: 0.01 × 3 = 0.03 , 0.03 × 3 = 0.09 0.01 \times 3 = 0.03 , 0.03 \times 3 = 0.09 0.01×3=0.03,0.03×3=0.09 (这样做的目的是使收敛的速度更快)。
求解偏导数的过程(寻找梯度下降的方向):
-
求 ∂ J ( w ) ∂ w \frac{\partial J(w)}{\partial w} ∂w∂J(w) :
∂ J ( w ) ∂ w \frac{\partial J(w)}{\partial w} ∂w∂J(w) = ∂ ∂ w 1 2 m ∑ i = 1 m ( f w , b ( x ( i ) ) − y ( i ) ) 2 \frac{\partial}{\partial w}\frac{1}{2m}\sum\limits_{i = 1}^{m}(f_{w,b}(x^{(i)}) - y^{(i)})^2 ∂w∂2m1i=1∑m(fw,b(x(i))−y(i))2
= ∂ ∂ w 1 2 m ∑ i = 1 m w x ( i ) − y ( i ) ) 2 \frac{\partial}{\partial w}\frac{1}{2m}\sum\limits_{i = 1}^{m}w x^{(i)} - y^{(i)})^2 ∂w∂2m1i=1∑mwx(i)−y(i))2
= 1 2 m ∑ i