机器学习
线性回归
线性回归是机器学习中比较基本的一个算法。其基本思想大致可以理解为给定一个数据集,通过线性回归得到一条曲线,尽可能地去拟合这个数据集。如下图所示:
那么,如何得到这样一条拟合曲线呢?一个自然而然的想法是建立一个输入
x
x
x到输出
y
^
\hat{y}
y^的拟合函数,使得这个函数的输出
y
^
\hat{y}
y^能够尽可能地接近真实值
y
y
y。
通常,这个拟合函数可以被定义为:
h
θ
(
x
)
=
θ
0
+
θ
1
x
1
+
θ
2
x
2
+
⋯
+
θ
n
x
n
=
θ
T
x
h_{\theta}\left(x\right)=\theta_0+\theta_1x_1+\theta_2x_2+\dots+\theta_nx_n=\boldsymbol{\theta}^T\boldsymbol{x}
hθ(x)=θ0+θ1x1+θ2x2+⋯+θnxn=θTx
其中,
θ
=
[
θ
0
,
θ
1
,
…
,
θ
n
]
T
\boldsymbol{\theta}=\left[\theta_0,\theta_1,\dots,\theta_n\right]^T
θ=[θ0,θ1,…,θn]T,表示参数的集合(线性回归的目的就是找到一组合适的参数,去拟合给定的数据集),
x
=
[
x
0
,
x
1
,
…
,
x
n
]
T
\boldsymbol{x}=\left[x_0,x_1,\dots,x_n\right]^T
x=[x0,x1,…,xn]T表示数据的特征,并且通常
x
0
=
1
x_0=1
x0=1。例如,预测房价随房子面积变化的趋势,房子的面积,楼层,房间数等都可作为数据的特征,分别用
x
1
,
x
2
,
x
3
,
…
x_1,x_2,x_3,\dots
x1,x2,x3,…表示。
因此,我们的任务就是去寻找这一组合适的
θ
\boldsymbol{\theta}
θ去构建上述拟合函数。这样我们就可以引入机器学习中另外一个常见的名词:代价函数。其主要作用就是衡量拟合函数的输出
y
^
\hat{y}
y^和真实值
y
y
y之间的偏差(值越小,说明越接近真实值)。在线性回归中,代价函数的定义为:
J
(
θ
)
=
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
J\left(\boldsymbol{\theta}\right)=\frac{1}{m}\sum_{i=1}^m\left(h_\boldsymbol{\theta}\left(x^{\left(i\right)}\right)-y^{\left(i\right)}\right)^2
J(θ)=m1i=1∑m(hθ(x(i))−y(i))2
其中,
m
m
m表示训练集的数量,
x
(
i
)
x^{\left(i\right)}
x(i)的上标仅仅表示第
i
i
i个训练数据。为了找到
θ
\boldsymbol{\theta}
θ,目标就转换为了
m
i
n
θ
J
(
θ
)
\mathop{min}\limits_{\theta}J\left(\theta\right)
θminJ(θ)。
下一步就是如何求
m
i
n
θ
J
(
θ
)
\mathop{min}\limits_{\theta}J\left(\boldsymbol{\theta}\right)
θminJ(θ)。我们最熟悉的做法就是梯度下降了,具体做法为:
r
e
p
e
a
t
u
n
t
i
l
c
o
n
v
e
r
g
e
n
c
e
θ
j
≔
θ
j
−
α
∂
∂
θ
j
J
(
θ
)
repeat\ until\ convergence\ \theta_j\coloneqq\theta_j-\alpha\frac{\partial}{\partial\theta_j}J\left(\boldsymbol{\theta}\right)
repeat until convergence θj:=θj−α∂θj∂J(θ)
针对每一个具体的
θ
j
\theta_j
θj,其具体的更新公式为:
θ
0
≔
θ
0
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
⋅
x
0
(
i
)
θ
1
≔
θ
1
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
⋅
x
1
(
i
)
θ
2
≔
θ
2
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
⋅
x
2
(
i
)
…
θ
n
≔
θ
n
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
⋅
x
n
(
i
)
\theta_0\coloneqq\theta_0-\alpha\frac{1}{m}\sum_{i=1}^m\left(h_\theta\left(x^{\left(i\right)}\right)-y^{\left(i\right)}\right)\cdot x_0^{\left(i\right)}\\ \theta_1\coloneqq\theta_1-\alpha\frac{1}{m}\sum_{i=1}^m\left(h_\theta\left(x^{\left(i\right)}\right)-y^{\left(i\right)}\right)\cdot x_1^{\left(i\right)}\\ \theta_2\coloneqq\theta_2-\alpha\frac{1}{m}\sum_{i=1}^m\left(h_\theta\left(x^{\left(i\right)}\right)-y^{\left(i\right)}\right)\cdot x_2^{\left(i\right)}\\\dots\\ \theta_n\coloneqq\theta_n-\alpha\frac{1}{m}\sum_{i=1}^m\left(h_\theta\left(x^{\left(i\right)}\right)-y^{\left(i\right)}\right)\cdot x_n^{\left(i\right)}
θ0:=θ0−αm1i=1∑m(hθ(x(i))−y(i))⋅x0(i)θ1:=θ1−αm1i=1∑m(hθ(x(i))−y(i))⋅x1(i)θ2:=θ2−αm1i=1∑m(hθ(x(i))−y(i))⋅x2(i)…θn:=θn−αm1i=1∑m(hθ(x(i))−y(i))⋅xn(i)
重复上述过程,直到算法收敛。最终,我们就得到了一组合适的参数
θ
∗
=
[
θ
0
∗
,
θ
1
∗
,
…
,
θ
n
∗
]
T
\boldsymbol{\theta^*}=\left[\theta_0^*,\theta_1^*,\dots,\theta_n^*\right]^T
θ∗=[θ0∗,θ1∗,…,θn∗]T。
以上就是线性回归的全部流程,下面介绍logistic回归(也叫逻辑回归)。
logistic回归
logistic回归主要用于分类问题,其原理和线性回归大致相同。具体介绍如下: