1 线性回归
目标属性与已知属性(已知属性的变形或已知属性的组合)存在一种线性关系。
h
(
x
)
=
X
θ
h(x)= X\theta
h(x)=Xθ
X
=
[
1
x
1
1
x
2
1
…
x
n
−
1
1
x
n
1
1
x
1
2
x
2
2
…
x
n
−
1
2
x
n
2
1
x
1
3
x
2
3
…
x
n
−
1
3
x
n
3
…
…
…
…
…
…
…
…
…
…
…
…
]
m
×
(
n
+
1
)
θ
=
[
θ
0
θ
1
θ
2
…
θ
n
]
1
×
(
n
+
1
)
X=\begin{bmatrix} 1&x^1_1&x^1_2& \dots &x^1_{n-1}&x^1_{n}\\ 1&x^2_1&x^2_2&\dots&x^2_{n-1}&x^2_{n}\\ 1&x^3_1&x^3_2&\dots&x^3_{n-1}&x^3_{n}\\ \dots&\dots&\dots&\dots&\dots&\dots\\ \dots&\dots&\dots&\dots&\dots&\dots\\ \end{bmatrix} _{m\times (n+1)} \qquad \theta=\begin{bmatrix} \theta_0\\ \theta_1 \\ \theta_2\\ \dots\\ \theta_n\\ \end{bmatrix} _{1\times (n+1)}
X=⎣⎢⎢⎢⎢⎡111……x11x12x13……x21x22x23…………………xn−11xn−12xn−13……xn1xn2xn3……⎦⎥⎥⎥⎥⎤m×(n+1)θ=⎣⎢⎢⎢⎢⎡θ0θ1θ2…θn⎦⎥⎥⎥⎥⎤1×(n+1)
上标:m表示样本容量。下标:n表示特征数。
第一列是额外添加的
1.1 代价函数
采用 “均方误差” 来度量模型性能
J
(
θ
)
=
1
2
m
∑
i
=
1
m
(
h
(
x
(
i
)
)
−
y
(
i
)
)
2
J(\theta)=\frac{1}{2m} \sum_{i=1}^{m} \Big( h(x^{(i)})-y^{(i)} \Big) ^2
J(θ)=2m1i=1∑m(h(x(i))−y(i))2
J
J
J越小,表示预测值与实际值的差值越小。而
J
J
J为
θ
\theta
θ的函数,所以当
J
J
J最小时,
θ
\theta
θ的值就是模型的最优值。
1.2 梯度函数
要使以上代价函数最小,一种最常用的方法就是梯度下降法。
θ
j
:
=
θ
j
−
α
∂
∂
θ
j
J
(
θ
)
\theta_j :=\theta_j - \alpha \frac{\partial}{\partial\theta_j}J(\theta) \qquad
θj:=θj−α∂θj∂J(θ)
上式中
α
\alpha
α 表示学习率,并且要注意一点就是式中的
θ
\theta
θ 是同时更新的,就是说下一次得到的
θ
\theta
θ 完全是由这次
θ
\theta
θ 运算得到的(尤其是求导部分)。
对于线性回归来讲,该导数可以具体表示为
∂
∂
θ
j
J
(
θ
)
=
1
m
∑
i
=
1
m
(
h
(
x
(
i
)
)
−
y
(
i
)
)
x
j
(
i
)
\frac{\partial}{\partial\theta_j}J(\theta)=\frac{1}{m} \sum_{i=1}^{m}\Big( h(x^{(i)})-y^{(i)} \Big)x_j^{(i)}
∂θj∂J(θ)=m1i=1∑m(h(x(i))−y(i))xj(i)
1.2.1 特征缩放
如果特征之间的取值范围相差过大,这时就需要对特征进行缩放。通常采取的缩放形式如下:(
μ
\mu
μ可以取平均值,
s
s
s可以取标准差)
x
i
−
μ
s
\frac{x_i-\mu}{s} \qquad
sxi−μ
缩放的程度通常如下表所示:
可以接受的范围 | 不可接受的范围 |
---|---|
− 1 < x < 1 -1<x<1 −1<x<1 | − 100 < x < 100 -100<x<100 −100<x<100 |
0 < x < 3 0<x<3 0<x<3 | − 0.001 < x < 0.0001 -0.001<x<0.0001 −0.001<x<0.0001 |
− 2 < x < 0.5 -2<x<0.5 −2<x<0.5 | 50 < x < 1000 50<x<1000 50<x<1000 |
1.2.2 学习率
学习率
α
\alpha
α 太小,可能导致梯度下降算法收敛的非常慢;学习率
α
\alpha
α 太大,又可能导致梯度下降算法在某几次迭代时不下降,反而增加,甚至不能收敛。
为了选择出合适的学习率,可以画出
J
(
θ
)
J(\theta)
J(θ) 随迭代步数变化的曲线。一般是先用小值比如0.001试一下,再逐渐增大,当找到一个的可行的最小值和一个最大值,就取比最大值小一点的数值。
2 逻辑回归与分类
对于分类问题,输出变量都是离散值,一般而言都会用1、0来表示是、否。而预测的输出通常不会被约束在0、1这两个值上,所以就需要对输出应用一个函数,使值域变为(0,1),并以此来估计
y
=
1
y=1
y=1 的概率。这个函数就是sigmoid函数(或logistic函数):
g
(
z
)
=
1
1
+
e
−
z
g(z)=\frac{1}{1+e^{-z}}
g(z)=1+e−z1
这样预测的输出就变为:(这里用
θ
T
x
\theta^T x
θTx 来形成决策边界)
h
(
x
)
=
g
(
θ
T
x
)
=
1
1
+
e
−
θ
T
x
h(x)=g(\theta^T x)=\frac{1}{1+e^{-\theta^T x}}
h(x)=g(θTx)=1+e−θTx1
2.1 代价函数与梯度
所采用的代价函数就是:
J
(
θ
)
=
1
m
∑
i
=
1
m
C
o
s
t
(
h
(
x
(
i
)
)
,
y
(
i
)
)
=
1
m
[
∑
i
=
1
m
(
−
y
(
i
)
log
h
θ
(
x
(
i
)
)
−
(
1
−
y
(
i
)
)
log
(
1
−
h
θ
(
x
(
i
)
)
)
]
\begin{aligned} J(\theta) &= \frac{1}{m} \sum_{i=1}^{m} Cost\Big( h(x^{(i)})\, ,\, y^{(i)} \Big) \\ &=\frac{1}{m} \Big[ \sum_{i=1}^{m} \Big( -y^{(i)}\log h_{\theta} (x^{(i)})- (1-y^{(i)}) \log (1-h_{\theta}(x^{(i)} )\Big) \Big] \end{aligned}
J(θ)=m1i=1∑mCost(h(x(i)),y(i))=m1[i=1∑m(−y(i)loghθ(x(i))−(1−y(i))log(1−hθ(x(i)))]
这里最小化代价函数的方法还是采用梯度
θ
j
:
=
θ
j
−
α
∂
∂
θ
j
J
(
θ
)
:
=
θ
j
−
α
∑
i
=
1
m
(
h
(
x
(
i
)
)
−
y
(
i
)
)
x
j
(
i
)
\begin{aligned} \theta_j &:=\theta_j - \alpha \frac{\partial}{\partial\theta_j}J(\theta)\\ &:=\theta_j - \alpha \sum_{i=1}^{m}\Big( h(x^{(i)})-y^{(i)} \Big)x_j^{(i)} \end{aligned}
θj:=θj−α∂θj∂J(θ):=θj−αi=1∑m(h(x(i))−y(i))xj(i)
没错,和前面线性回归的梯度函数在形式上是一样的,唯一的不同点就是
h
(
x
)
\color{red}{h(x)}
h(x) 的不同。
2.2 多元分类
可以将其看作是多个二元分类问题。
例如,现在有一个含有3类的数据,如下图所示。
我们可以针对图中的每一类为其生成一个分类器
a
1
,
a
2
,
a
3
a_1,a_2,a_3
a1,a2,a3(
a
1
a_1
a1表示是三角的概率,以此类推)。然后将要测试的数据代入每个分类器,选择值最大的分类器类别作为预测的类别。
3 正则化
在以上的线性回归和逻辑回归中,数据的拟合通常会存在3种情况:
- 欠拟合,也称之为高偏差
- 刚好拟合
- 过拟合,也称之为高方差
针对过拟合问题,通常会采用以下2种思路进行解决:
- 通过人工的选择,减少变量的个数
- 正则化,在保留所有特征量的情况下,减少特征量的量级
3.1 线性回归的正则化
需要对其代价函数添加一个正则项:
J
(
θ
)
=
1
2
m
(
∑
i
=
1
m
(
h
(
x
(
i
)
)
−
y
(
i
)
)
2
+
λ
∑
j
=
1
n
θ
j
2
)
J(\theta)=\frac{1}{2m} \bigg( \sum_{i=1}^{m} \Big( h(x^{(i)})-y^{(i)} \Big) ^2+ \lambda \sum_{j=1}^{n}\theta^2_j \bigg)
J(θ)=2m1(i=1∑m(h(x(i))−y(i))2+λj=1∑nθj2)
λ
\color{red}\lambda
λ 就是正则化参数。注意:这里不需要
θ
0
\theta_0
θ0 正则化,因为其是一个常数项。
其梯度函数也要进行相应的变化:(注意需要将
θ
0
\theta_0
θ0 分离出来)
θ
0
:
=
θ
0
−
α
1
m
∑
i
=
1
m
(
h
(
x
(
i
)
)
−
y
(
i
)
)
x
0
(
i
)
θ
j
:
=
θ
j
−
α
[
1
m
∑
i
=
1
m
(
h
(
x
(
i
)
)
−
y
(
i
)
)
x
j
(
i
)
+
λ
m
θ
j
]
\theta_0 :=\theta_0 - \alpha \frac{1}{m} \sum_{i=1}^{m}\Big( h(x^{(i)})-y^{(i)} \Big)x_0^{(i)} \\ \theta_j :=\theta_j - \alpha \Big[ \frac{1}{m} \sum_{i=1}^{m}\Big( h(x^{(i)})-y^{(i)} \Big)x_j^{(i)}+ \frac{\lambda}{m}\theta_j \Big]
θ0:=θ0−αm1i=1∑m(h(x(i))−y(i))x0(i)θj:=θj−α[m1i=1∑m(h(x(i))−y(i))xj(i)+mλθj]
3.2 逻辑回归的正则化
逻辑回归的正则化与线性回归的类似,也是在代价函数的最后添加一个正则项:
J
(
θ
)
=
1
m
[
∑
i
=
1
m
(
−
y
(
i
)
log
h
θ
(
x
(
i
)
)
−
(
1
−
y
(
i
)
)
log
(
1
−
h
θ
(
x
(
i
)
)
)
]
+
λ
2
m
∑
j
=
1
n
θ
j
2
\begin{aligned} J(\theta) &= \frac{1}{m} \Big[ \sum_{i=1}^{m} \Big( -y^{(i)}\log h_{\theta} (x^{(i)})- (1-y^{(i)}) \log (1-h_{\theta}(x^{(i)} )\Big) \Big] +\frac{\lambda}{2m}\sum^{n} _{j=1}\theta^2_j \end{aligned}
J(θ)=m1[i=1∑m(−y(i)loghθ(x(i))−(1−y(i))log(1−hθ(x(i)))]+2mλj=1∑nθj2
同样的,这里也不需要对
θ
0
\theta_0
θ0 正则化,其梯度函数变为:
θ
0
:
=
θ
0
−
α
1
m
∑
i
=
1
m
(
h
(
x
(
i
)
)
−
y
(
i
)
)
x
0
(
i
)
θ
j
:
=
θ
j
−
α
[
1
m
∑
i
=
1
m
(
h
(
x
(
i
)
)
−
y
(
i
)
)
x
j
(
i
)
+
λ
m
θ
j
]
\theta_0 :=\theta_0 - \alpha \frac{1}{m} \sum_{i=1}^{m}\Big( h(x^{(i)})-y^{(i)} \Big)x_0^{(i)} \\ \theta_j :=\theta_j - \alpha \Big[ \frac{1}{m} \sum_{i=1}^{m}\Big( h(x^{(i)})-y^{(i)} \Big)x_j^{(i)}+ \frac{\lambda}{m}\theta_j \Big]
θ0:=θ0−αm1i=1∑m(h(x(i))−y(i))x0(i)θj:=θj−α[m1i=1∑m(h(x(i))−y(i))xj(i)+mλθj]
没错,这个梯度函数与线性回归梯度函数在形式上也是一样的,但要注意
h
(
x
)
\color{red}{h(x)}
h(x) 的不同。
tip:以上的梯度的下降都是在循环中完成的,具体的循环次数需要自己去设置。