线性回归算法是使用线性方程对数据集进行拟合的算法,是一个非常常见的回归算法。
单变量线性回归算法
1.预测函数
针对数据集x和y,预测函数会根据输入特征x来计算输出值h(x)。其输入输出的函数关系如下:
h
θ
(
x
)
=
θ
0
+
θ
1
x
h_{\theta}(x)=\theta_{0}+\theta_{1} x
hθ(x)=θ0+θ1x这个方程表达的是一条直线。我们的任务是构造一个hθ函数,来映射数据集中的输入特征x和输出值y,使得预测函数hθ计算出来的值与真实值的整体误差最小。构造hθ函数的关键,就是找到合适的θ0,θ1的值,θ0,θ1称为模型参数。模型的求解过程,就是找出一组最合适的模型参数θ0,θ1,以便能最好地拟合数据集。
怎样来判断最好地拟合了数据集呢 ?
当拟合成本最小时,即找出了最好的拟合参数。
2.成本函数
单变量线性回归算法的成本函数是:
h
θ
(
x
)
=
θ
0
+
θ
1
x
J
(
θ
)
=
J
(
θ
0
,
θ
1
)
=
1
2
m
∑
i
=
1
m
(
h
(
x
(
i
)
)
−
y
(
i
)
)
2
h_{\theta}(x)=\theta_{0}+\theta_{1} xJ(\theta)=J\left(\theta_{0}, \theta_{1}\right)=\frac{1}{2 m} \sum_{i=1}^{m}\left(h\left(x^{(i)}\right)-y^{(i)}\right)^{2}
hθ(x)=θ0+θ1xJ(θ)=J(θ0,θ1)=2m1i=1∑m(h(x(i))−y(i))2其中h(x)-y是预测值和实际值的差,故成本就是预测值和实际值的差的平方的平均值,之所以除以2是为了计算方便。这个函数是均方差方程。有了成本函数,就可以精确地测量模型对训练样本拟合的好坏程度。
3.梯度下降算法
怎样求解模型参数θ0,θ1的值?
我们采用梯度下降法,算法如下:
初始化参数θ0和θ1
while(函数J收敛){
θ
j
=
θ
j
−
α
∂
∂
θ
j
J
(
θ
)
\theta_{j}=\theta_{j}-\alpha \frac{\partial}{\partial \theta_{j}} J(\theta)
θj=θj−α∂θj∂J(θ)}
α称为学习率,控制梯度下降的速度。它乘以成本函数对θj的偏导数,以这个结果作为移动的幅度,如果幅度太小,意味着要计算很多次才能到达目的地,如果幅度太大,可能会直接跨过目的地,从而无法收敛。
学习率是固定的,因为后面对代价函数的导数会越来越小。
为什么成本函数中要除以一个2?
多变量线性回归算法
1.预测函数
上文介绍的线性回归模型里只有一个输入特征,我们推广到更一般的情况,即多个输入特征。
f
w
,
b
(
x
)
=
w
1
x
1
+
w
2
x
2
+
⋯
+
w
n
x
n
+
b
f_{w, b}(x)=w_{1} x_{1}+w_{2} x_{2}+\cdots+w_{n} x_{n}+b
fw,b(x)=w1x1+w2x2+⋯+wnxn+b
向量形式的预测函数
1)代码简洁
2)Numpy库里的矩阵运算可提高效率
2.确认梯度下降是否收敛
根据梯度下降参数迭代公式,分别同时算出新的w的值。然后用新的w值得到新的预测函数f(x),再根据新的预测函数,代入成本函数就可以算出新的成本。拿新的成本和旧的成本进行比较,看成本是不是变得越来越小。如果两次成本之间的差距小于误差范围,即说明以及非常靠近最小成本了,就可以近似地认为我们找到了最小成本。如果两次成本之间的差距在误差范围之外,重复以上步骤继续计算下一组参数w,直到找到最优解。
3.模型优化
1)数据归一化
当线性回归模型有多个输入特征时,需要对数据进行归一化处理,比如,特征x1的范围在[1,4]之间,特征x2的范围在[1,2000]之间,这种情况下,可以让x1除以4来作为新特征x1,同时让x2除以2000来作为新特征x2,该过程称为特征缩放。可以用特征缩放来对训练样本进行归一化处理,处理后的特征值范围在[0,1]之间。
归一化处理的目的是让算法收敛得更快,提升模型拟合过程中的计算效率。进行归一化处理后,当有个新的样本需要计算预测值时,也需要先进行归一化处理,再通过模型来计算预测值,计算出来的预测值要再乘以归一化处理的系数,这样得到的数据才是真实的预测数据。
2)特征多项式
当线性回归模型太简单导致欠拟合时,我们可以增加特征多项式来让线性回归模型更好地拟合数据。比如有两个特征 X1,X2 ,可以增加两特征的乘积 X1X2 作为新特征 X3 。我们还可以增加 X1^作为另外一个新特征 X4 。