机器学习算法之–线性回归算法
- 回归是监督学习的另一个重要问题
回归用于预测输入变量(自变量)和输出变量(因变量)之间的关系,特别是当输入变量的值发生变化时,输出变量的值随之发生的变化;- 回归模型正是表示从输入变量到输出变量之间映射的函数,回归问题的学习等价于函数拟合:选择一条函数曲线,使其很好的拟合已知数据且很好的预测未知数据
- 回归问题分为学习和预测两个过程:
首先,给定一个训练数据集,根据其构建一个模型;
对于新的输入,预测系统根据学习的模型确定相应的输出线性回归是使用线性方程对数据进行拟合的算法
一、算法原理
1.1、一个输入特征(单变量,x:输入,y:输出)
预测函数
h
θ
(
x
)
=
θ
0
+
θ
1
∗
x
h_\theta(x)=\theta_0+\theta_1*x
hθ(x)=θ0+θ1∗x
关键:选择合适的模型参数
θ
0
,
θ
1
\theta_0,\theta_1
θ0,θ1,也就是模型的求解过程。
成本函数
J ( θ ) = J ( θ 0 , θ 1 ) = 1 2 m ∑ i = 1 n ( h ( x i ) − y i ) 2 J(θ)=J(\theta_0, \theta_1)= \frac{1}{2m}\sum_{i=1}^n (h(x^i)-y^i)^2 J(θ)=J(θ0,θ1)=2m1i=1∑n(h(xi)−yi)2
梯度下降算法
求解 θ 0 , θ 1 \theta_0,\theta_1 θ0,θ1的值
原理:先随机选取一组
θ
0
,
θ
1
\theta_0,\theta_1
θ0,θ1,以及参数α(学习率)作为移动的步幅,计算
斜率
:
∂
J
∂
θ
j
θ
j
=
θ
j
−
α
∗
∂
J
∂
θ
j
斜率:\frac{\partial J}{\partial\theta_j}\\\theta_j=\theta_j-\alpha*\frac{\partial J}{\partial\theta_j}
斜率:∂θj∂Jθj=θj−α∗∂θj∂J
就可以让
θ
j
往
J
(
θ
)
变小的方向迈了一小步
\theta_j往J(\theta)变小的方向迈了一小步
θj往J(θ)变小的方向迈了一小步
注意:若 α \alpha α太小,需要更多次数才能到达最终目的;而太大可能会导致直接跨过,导致无法收敛
故不难推导出梯度下降算法公式:
{
θ
0
=
θ
0
−
α
m
∑
i
=
1
m
(
h
(
x
i
)
−
y
i
)
θ
1
=
θ
1
−
α
m
∑
i
=
1
m
(
(
h
(
x
i
)
−
y
i
)
x
i
)
\begin{cases} \theta_0= \theta_0-\frac{\alpha}{m}\sum_{i=1}^m (h(x^i)-y^i)\\ \\ \theta_1= \theta_1-\frac{\alpha}{m}\sum_{i=1}^m ((h(x^i)-y^i)x^i)\\ \end{cases}
⎩
⎨
⎧θ0=θ0−mα∑i=1m(h(xi)−yi)θ1=θ1−mα∑i=1m((h(xi)−yi)xi)
其中:
α是学习率
m是训练样本个数
h
(
x
(
i
)
)
−
y
(
i
)
h(x^{(i)})-y(i)
h(x(i))−y(i)是模型预测值和真实值之间的误差
需要注意的是:
针对
θ
0
和
θ
1
\theta_0和\theta_1
θ0和θ1分别求出了其迭代公式,在
θ
1
\theta_1
θ1的迭代公式里,累加器中还需要乘以
x
i
x_i
xi。
1.2、多变量线性回归(不止一个输入特征)
预测函数
h
θ
(
x
)
=
θ
0
+
θ
1
∗
x
1
+
θ
2
∗
x
2
+
.
.
.
.
.
.
+
+
θ
n
∗
x
n
=
∑
j
=
0
n
(
θ
j
∗
x
j
)
h_\theta(x)=\theta_0+\theta_1*x_1+\theta_2*x_2+......++\theta_n*x_n =\sum_{j=0}^n (\theta_j*x_j)
hθ(x)=θ0+θ1∗x1+θ2∗x2+......++θn∗xn=j=0∑n(θj∗xj)注:此处假设
x
0
=
1
x_0=1
x0=1成为模型偏置(bias)
理论上,预测函数有无穷多个,我们求解的目标就是找出一个最优的θ值。
还可将其重写为向量形式,以简化表达:
h
(
x
)
=
[
θ
0
,
.
.
.
θ
n
]
[
x
0
.
.
.
x
n
]
=
θ
T
x
h(x)=\begin{bmatrix} \theta_0,...\theta_n\end{bmatrix} \begin{bmatrix} x_0\\...\\x_n\end{bmatrix}=\theta^Tx
h(x)=[θ0,...θn]
x0...xn
=θTx
h
0
(
X
)
=
X
⋅
θ
h_0(X)=X·\theta
h0(X)=X⋅θ,其中向量形式预测样本:
X
=
[
x
0
(
1
)
x
1
(
1
)
.
.
.
x
n
(
1
)
.
.
.
.
.
.
.
.
.
.
.
.
x
0
(
m
)
x
1
(
m
)
.
.
.
x
n
(
m
)
]
X=\begin{bmatrix} x_0^{(1)}&x_1^{(1)}&...&x_n^{(1)} \\ ...&...&...&... \\ x_0^{(m)}&x_1^{(m)}&...&x_n^{(m)} \end{bmatrix}
X=
x0(1)...x0(m)x1(1)...x1(m).........xn(1)...xn(m)
表示m个样本,n个特征
成本函数
J
(
θ
)
=
1
2
m
∑
i
=
1
n
(
h
(
x
i
)
−
y
i
)
2
J(θ)= \frac{1}{2m}\sum_{i=1}^n (h(x^i)-y^i)^2
J(θ)=2m1i=1∑n(h(xi)−yi)2
其中,模型参数
θ
⃗
\vec{\theta}
θ为n+1维的向量,
h
(
x
i
)
−
y
i
h(x^i)-y^i
h(xi)−yi是预测值与实际值的差,可看到该形式与单变量线性回归算法类似。
其矩阵形式表达为
J
(
θ
)
=
1
2
m
(
X
θ
−
y
⃗
)
T
(
X
θ
−
y
⃗
)
J(θ)= \frac{1}{2m}(X\theta-\vec{y})^T(X\theta-\vec{y})
J(θ)=2m1(Xθ−y)T(Xθ−y)
其中X表示m(n+1)矩阵大小的训练样本;
y
⃗
\vec{y}
y表示训练样本输出
y
i
y^i
yi构成的向量
该公式的优势是:没有累加器,不需要循环,直接使用矩阵运算,就可以一次性计算出针对特定的参数θ下模型的拟合成本。
梯度下降算法
θ
j
−
α
m
∑
i
=
1
n
(
(
h
(
x
i
)
−
y
i
)
x
j
(
i
)
\theta_j- \frac{\alpha}{m}\sum_{i=1}^n ((h(x^i)-y^i)x_j^{(i)}
θj−mαi=1∑n((h(xi)−yi)xj(i)
下标j是参数的序号(0~n),α为学习率。
伪代码
- 确定学习率α:太大会导致成本函数无法收敛,太小计算太多,效率变低
- 定参数起始位置:比如选取比较靠近极点的位置
- 计算下一组值:迭代计算公式,根据新的预测函数,带入成本函数就可以算出新的成本。
- 确认成本函数是否收敛:拿新的成本和旧的成本进行比较,看成本是不是变得越来越小。如果两次成本之间的差异小于误差范围,就说明已经非常接近最小成本了,就可以近似地认为找到了最小成本。
- 若在误差之外,则重复计算下一组值,直到找到最优解为止
二、模型优化(增加多项式特征)
回归模型太简单时可能会导致欠拟合
- 可增加特征多项式(例如加入x1*x2,x1平方…)
- 数据归一化:该过程成为特征缩放,为了让算法收敛得更快;
归一化所得预测值再乘以归一化系数,便能得到真实值
以上就是关于线性回归的分享,若有不妥之处,欢迎各路大佬不吝赐教~
喜欢的伙伴记得点个赞关注一下吧~