监督学习----线性回归 Linear Regression
声明:本博客是学习 Easy_ray 作者的博客做的笔记 https://blog.csdn.net/c369624808/article/details/78383814
线性回归(Linear Regression)
监督学习里面分为两类问题,回归和分类。
最经典的回归问题的例子就是房价预测,还是那个数据:
房子尺寸/平方米 | 房子价格/万 |
---|---|
100 | 120 |
80 | 92 |
120 | 143 |
75 | 87 |
60 | 60 |
43 | 50 |
。。。 | 。。。 |
散点图表示:
线性回归的方法就是预测一个模型,然后通过手头这组数据对模型进行训练,不断地去修正模型参数,最终得到一个最优的训练模型,然后输入一个房子尺寸值,得到对应的预测价格。
线性回归流程图:
图解:
Traning Set ----> 数据集
Learning Algorithm ----> 构建的预测模型
通过散点图的观察,房子大小和房价的关系,可以用简单的一元一次方程去尝试拟合数据集:
h
θ
(
x
)
=
θ
0
+
θ
1
⋅
x
h_{θ}(x)=θ_{0}+θ_{1}⋅x
hθ(x)=θ0+θ1⋅x
公式就相当于我们预测的模型,
h
θ
(
x
)
h_{θ}(x)
hθ(x) 输出的就是房价,
x
x
x 代表房子大小。
θ
0
θ_{0}
θ0和
θ
1
θ_{1}
θ1是模型里面的修正参数。
现实中,影响房价的可不止是房子的大小
x
0
x_{0}
x0 哦,还有房子所处的位置
x
1
x_{1}
x1 ,房子的朝向
x
2
x_{2}
x2 ,…,
x
n
x_{n}
xn , n个因素共同影响房子的价格
假设
x
0
=
1
x_{0}=1
x0=1 ,则我们可以把一元一次方程扩展出来:
h
θ
(
x
)
=
θ
0
⋅
x
0
+
θ
1
⋅
x
1
+
θ
2
⋅
x
2
+
.
.
.
+
θ
n
⋅
x
n
=
Σ
i
=
0
n
θ
i
⋅
x
i
=
y
^
h_{θ}(x)=θ_{0}·x_{0}+θ_{1}⋅x_{1}+θ_{2}⋅x_{2}+...+θ_{n}⋅x_{n}=\Sigma_{i=0}^n θ_{i}⋅x_{i}=\widehat y
hθ(x)=θ0⋅x0+θ1⋅x1+θ2⋅x2+...+θn⋅xn=Σi=0nθi⋅xi=y
y
^
\widehat y
y
是预测后输出的值,并不是真实的。
代价函数
在线性回归里,目的就是让我们的预测模型更加能准确的拟合现有数据,让误差变小。
怎么样我们预测的
y
^
\widehat y
y
和真实值 y 的误差最小呢?
有个叫代价函数 Cost Function的东西, 这个函数用来描述我们预测的值和真实值的接近程度,很重要额哈。
由此可见,代价函数越小,那么预测值也会更加准确。
介绍下代价函数:
J ( θ ) = 1 2 ⋅ m Σ i = 0 n ( h θ ( x i ) − y i ) 2 = 1 2 ⋅ m Σ i = 0 n ( y ^ − y i ) 2 J(θ)=\frac{1}{2·m}\Sigma_{i=0}^n(h_{θ}(x^i)-y^i)^2=\frac{1}{2·m}\Sigma_{i=0}^n(\widehat{y}-y^i)^2 J(θ)=2⋅m1Σi=0n(hθ(xi)−yi)2=2⋅m1Σi=0n(y −yi)2
J
(
θ
)
J(θ)
J(θ)----代价函数,
m
m
m----多少组参数,
h
θ
(
x
i
)
h_{θ}(x^i)
hθ(xi)和
y
^
\widehat{y}
y
含义相同即预测和真实之间的误差。为了求代价函数最小值,已知m为正,则只需求
Σ
i
=
0
n
(
y
^
−
y
i
)
2
\Sigma_{i=0}^n(\widehat{y}-y^i)^2
Σi=0n(y
−yi)2的最小值即可。
静观其数学公式,可悟出:每一组的预测值和真实值求差值的平方,然后求和,再求平均数,最终代价函数即为平均数。为了让
J
(
θ
)
J(θ)
J(θ)取得最小值也就是我们的模型最优,就必须求得代价函数
J
(
θ
)
J(θ)
J(θ)最小的参数
θ
0
到
θ
n
θ_{0}到θ_{n}
θ0到θn的取值。
怎么求呢?拿本草稿本算一下吧,看了博主的博客,觉得说的真好,引出下文哈哈哈哈。下面就来做求出线性回归的特征值的方法:梯度下降法Gradient Descent
梯度下降Gradient Descent
博主举得例子很好玩,梯度下降其实就是你下山的一种选择,你的每一步都在计划怎么走最合适。用时最少,路途最短。
红色区域即是山顶,蓝色区域即是你要到达的地方。
再次提醒一下,目的是求
θ
θ
θ,使得代价函数
J
(
θ
)
J(θ)
J(θ)的最小值。
对
θ
θ
θ取一个随机初始值,然后不断地迭代改变
θ
θ
θ的值,来使
J
(
θ
)
J(θ)
J(θ)变小。
梯度下降法思想(
设
定
初
始
值
θ
0
设定初始值θ_{0}
设定初始值θ0):
θ
j
:
=
θ
j
−
α
⋅
∂
∂
θ
j
⋅
J
(
θ
)
θ_{j}:=θ_{j}-α·\frac{∂}{∂θ_{j}}·J(θ)
θj:=θj−α⋅∂θj∂⋅J(θ)
其实这里我有点不明白----
梯度的方向由
J
(
θ
)
对
θ
J(θ)对θ
J(θ)对θ的偏导数决定,将
J
(
θ
)
J(θ)
J(θ)代入得到总的更新公式
j 代表第 j 个特征值(房子大小、朝向),i 代表第几组输入的数据(包含所有特征值的数据)
θ
j
:
=
θ
j
−
α
⋅
(
h
θ
(
x
i
)
−
y
i
)
⋅
x
j
i
θ_{j}:=θ_{j}-α·(h_{θ}(x^i)-y^i)·x_{j}^i
θj:=θj−α⋅(hθ(xi)−yi)⋅xji
若有m组数据,则:
θ
j
:
=
θ
j
−
Σ
i
=
1
m
α
⋅
(
h
θ
(
x
i
)
−
y
i
)
⋅
x
j
i
θ_{j}:=θ_{j}-\Sigma_{i=1}^mα·(h_{θ}(x^i)-y^i)·x_{j}^i
θj:=θj−Σi=1mα⋅(hθ(xi)−yi)⋅xji
最终通过不断迭代 θ j θ_{j} θj的值,找到代价函数最小的解。
通过以上的推导,每次迭代都需要遍历所有的抑制数据,当已知数据很大的时候,会影响效率,增加预测模型拟合的时间消耗,这种就叫批量梯度下降法(Batch Gradient Descent)
为了降低效率,另外一种拟合的方法叫做增量梯度下降法(Incremental Gradient Descent)
一段伪代码:
Repeat
{
for i = 0 to m
{
θ
j
:
=
θ
j
−
Σ
i
=
1
m
α
⋅
(
h
θ
(
x
i
)
−
y
i
)
⋅
x
j
i
θ_{j}:=θ_{j}-\Sigma_{i=1}^mα·(h_{θ}(x^i)-y^i)·x_{j}^i
θj:=θj−Σi=1mα⋅(hθ(xi)−yi)⋅xji
}
}
通过上述代码可以看出,第一次时使用第一组数据,第二次时在第一组数据结果的基础上进行迭代,即每次都仅使用一组数据在前n组数据的基础上进行迭代更新,不需要遍历所有的数据,速度大增。但是该算法可能会无法收敛到最小值,但最终会接近最小值。因为,该算法每次仅使用一组数据,所以拟合曲线可能会有所波动。
从左往右依次迭代,第一次的时候只有两组数据,拟合一条曲线出来,然后有了第三组数据后又根据前两组的拟合结果进行调整,然后不断的调整拟合的曲线,最终达到收敛。较大的数据量时使用增量梯度下降法的效率还是比批量梯度下降高很多的。