目录
1 介绍
1-3 监督学习
- 包括线性回归和逻辑回归
1-4 无监督学习
- 无监督学习不需要给数据打上标签,也就是不需要人告诉机器一部分正确答案是什么
2 单变量线性回归
2-2 代价函数
- Hypothesis即假定函数,是线性回归时机器推测出来的对已经给定的一堆离散点进行拟合之后的函数
- θ0和θ1是待求的参数,求出这两个参数后,就能得出一条直线进行拟合
- Cost Function即代价函数,是对数据集中每个点与假定函数进行作差再平方再相加后求得的平均值再乘 1 2 \frac{1}{2} 21得到的,乘 1 2 \frac{1}{2} 21只是为了之后求导方便,式中m为数据集中数据个数共有m个, x ( i ) x^{(i)} x(i)指的是数据集第i行的x的值, y ( i ) y^{(i)} y(i)指的是数据集第i行的y的值,y即为需要通过机器学习推测的值
- 目标是求代价函数的最小值(并求出此时θ0和θ1的值),因为在代价函数的值最小时,假定函数距离各离散点的距离最近
由于有两个参数θ0和θ1,所以得出的代价函数图形是一个如上图所示的3D曲面图
3D曲面图也可以用上图的等高线图表示
2-5 Batch 梯度下降算法
梯度下降算法用于如上图的函数:在图上取一个点,向四周寻找最快的下山方向,并迈出一步,重复执行上述步骤,就可以找到代价函数的最小值(上图仅用于解释梯度下降算法,线性回归的代价函数永远是一个凸函数,只会存在一个全局最优解,不会像上图一样出现局部最优解和全局最优解)
在这里:=
是赋值符号,=
是两边等价的意思
如上图,θ0和θ1需要同步更新来实现梯度下降,α是学习率,α越大,相当于下山的步子越大,下山就越快
如上图,θ1从右侧较大时开始逐渐向左侧递减,α是常数不改变,代价函数的导数项(这个导数项其实是偏导数)会随着代价函数逐渐降低而变小(因为斜率变小了),在到达最小值时,导数会变为0
将梯度下降式子里的导数项求出后得到上面的式子
4 多变量线性回归
4-1 多特征
- 用n来表示数据集中特征的数量,这里有4个特征
- y表示输出量
- 用 x ( i ) x^{(i)} x(i)来表示第i行的数据(输入量)
- 用 x j ( i ) x^{(i)}_j xj(i)来表示第i行的第j个特征
上图是新的假定函数
- x 1 , x 2 , x 3 … … x_1,x_2,x_3…… x1,x2,x3……是多个特征
- 可以假定一个 x 0 ( i ) = 1 x^{(i)}_0=1 x0(i)=1,这样x和θ就可以写成两个列向量,假定函数就可以写作 θ T x θ^Tx θTx,即求两个矩阵的内积
4-2 多元梯度下降法
- 如上图,从 θ 1 θ_1 θ1到 θ n θ_n θn同步更新,同时特征 x x x需要对应
4-3 多元梯度下降法I——特征缩放
缩放
- 这里假设只有两个特征值,特征 x 1 x_1 x1的取值范围是0-2000,特征 x 2 x_2 x2的取值范围是1-5,之后作出的代价函数的等高线图会是一个又高又瘦的椭圆,在进行梯度下降算法时,可能会反复震荡导致收敛太慢,如上图左侧
- 将特征 x 1 x_1 x1和 x 2 x_2 x2缩放,使这两个特征值的范围都在0-1,这样产生的代价函数的图像会变成向上图右侧一样的圆形,这样就会更快地收敛
- 一般会让特征值处于 [ − 1 , 1 ] [-1,1] [−1,1]范围内,如果比较接近 ± 1 \pm1 ±1也可以直接计算,不需要进行特征缩放
- 如果特征值过小,如 [ − 0.0001 , 0.0001 ] [-0.0001,0.0001] [−0.0001,0.0001]也需要进行缩放
归一化
- 如特征 x 1 x_1 x1的平均值为1000,范围为 ( 0 , 2000 ] (0,2000] (0,2000],则可以将 x 1 x_1 x1化为 x 1 = s i z e − 1000 2000 x_1=\frac{size-1000}{2000} x1=2000size−1000(在这里的例子里 x 1 x_1 x1是房屋的面积)
- 公式为 x 1 = x 1 − μ 1 s 1 x_1=\frac{x_1-μ_1}{s_1} x1=s1x1−μ1, s 1 s_1 s1为特征 x 1 x_1 x1原来的范围大小( m a x − m i n max-min max−min), μ 1 μ_1 μ1为特征 x 1 x_1 x1原来的平均值
4-4 多元梯度下降法演练I——学习率α
上图左侧纵坐标为计算得出的代价函数的值,横坐标为进行梯度下降算法的次数,次数增加后,代价函数会越来越接近最小值,逐渐收敛
- 如果图像为上图左侧的两种,说明学习率过大,导致像上图右侧一样的变化发散
- 只要学习率足够小,一定会是收敛的(即进行梯度下降算法的次数越多,代价函数一定会越来越接近最小值)
- 学习率过小会导致收敛速度变慢
取学习率时,通常是每隔大约三倍取,如 0.001 , 0.003 , 0.01 , 0.03.0.1 , 0.3 , 1 0.001,0.003,0.01,0.03.0.1,0.3,1 0.001,0.003,0.01,0.03.0.1,0.3,1
4-5 特征和多项式回归
- 用多次的函数来拟合,依然使用之前的一次式,但让 x 1 = s i z e x_1=size x1=size, x 2 = s i z e 2 x_2=size^2 x2=size2, x 3 = s i z e 3 x_3=size^3 x3=size3
- 或者也可以令假定函数是 h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 = θ 0 + θ 1 ( s i z e ) + θ 2 s i z e h_θ(x)=θ_0+θ_1x_1+θ_2x_2=θ_0+θ_1(size)+θ_2\sqrt{size} hθ(x)=θ0+θ1x1+θ2x2=θ0+θ1(size)+θ2size
4-6 正规方程(Normal Equation)(区别于迭代方法的直接解法)
(最小二乘法)
θ
=
(
X
T
X
)
−
1
X
T
y
θ=(X^TX)^{-1}X^Ty
θ=(XTX)−1XTy
- 使用这个式子不需要进行特征缩放
- X X X为 m × n m×n m×n的矩阵, m m m为数据数量(training examples), n n n为特征个数
上图是梯度下降算法和正规方程的优缺点
- 在特征数量 n n n大于10000左右时,开始考虑不使用正规方程而使用梯度下降算法
6 逻辑回归
6-1 逻辑分类算法
- 用于输出量 y y y是离散值如0/1的情况
- 不宜用线性回归进行机器学习
6-2 假设表示
- 在逻辑分类中,将假定函数改为 h θ ( x ) = g ( θ T x ) h_θ(x)=g(θ^Tx) hθ(x)=g(θTx),假定函数函数的值即为输出真(1)的概率
- 函数 g ( z ) g(z) g(z)称作Sigmoid函数或Logistic函数,其表达式为 1 1 + e − z \frac{1}{1+e^{-z}} 1+e−z1
- 综上,逻辑分类中的假定函数为 1 1 + e − θ T x \frac{1}{1+e^{-θ^Tx}} 1+e−θTx1
6-3 决策边界
- predict “y=1” if h θ ( x ) ≥ 0.5 h_θ(x)\ge0.5 hθ(x)≥0.5
- predict “y=0” if h θ ( x ) < 0.5 h_θ(x)<0.5 hθ(x)<0.5
- 在上图右上角
g
(
z
)
=
1
1
+
e
−
z
g(z)=\frac{1}{1+e^{-z}}
g(z)=1+e−z1函数的图像中,用
g
(
z
)
g(z)
g(z)来表示假定函数,要计算何时
g
(
z
)
>
0.5
g(z)>0.5
g(z)>0.5,只要计算何时
z
≥
0
z\ge0
z≥0,即计算何时
θ
T
x
>
0
θ^Tx>0
θTx>0
- 计算得出的决策边界可以是直线
- 决策边界也可以是圆形的
6-4 代价函数
之前的线性表示的代价函数为:
J
(
θ
)
=
1
m
∑
i
=
1
m
1
2
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
J(θ)=\frac{1}{m}\sum_{i=1}^m\frac{1}{2}(h_θ(x^{(i)})-y^{(i)})^2
J(θ)=m1i=1∑m21(hθ(x(i))−y(i))2
将
1
2
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
\frac{1}{2}(h_θ(x^{(i)})-y^{(i)})^2
21(hθ(x(i))−y(i))2表示为
C
o
s
t
(
h
θ
(
x
(
i
)
)
,
y
(
i
)
)
Cost(h_θ(x^{(i)}),y^{(i)})
Cost(hθ(x(i)),y(i))
去掉
(
i
)
(i)
(i)之后简写为
J
(
θ
)
=
1
2
m
∑
i
=
1
m
C
o
s
t
(
h
θ
(
x
)
,
y
)
J(θ)=\frac{1}{2m}\sum_{i=1}^mCost(h_θ(x),y)
J(θ)=2m1i=1∑mCost(hθ(x),y)
- 由于在逻辑回归上继续使用这个代价函数会导致输出的代价函数不是凸函数,不能使用梯度下降算法输出全局最小值
- 所以在逻辑回归中将代价函数中的
C
o
s
t
(
h
θ
(
x
)
,
y
)
Cost(h_θ(x),y)
Cost(hθ(x),y)改为如下
C o s t ( h θ ( x ) , y ) = { − l o g ( h θ ( x ) ) if y=1 − l o g ( 1 − h θ ( x ) ) if y=0 Cost(h_θ(x),y)= \begin{cases} -log(h_θ(x))& \text{if y=1}\\ -log(1-h_θ(x))& \text{if y=0} \end{cases} Cost(hθ(x),y)={−log(hθ(x))−log(1−hθ(x))if y=1if y=0
- C o s t ( h θ ( x ) , y ) Cost(h_θ(x),y) Cost(hθ(x),y)中第一个函数的图像如上图
- 输出量 y = 1 y=1 y=1时,若假定函数 h θ ( x ) = 1 h_θ(x)=1 hθ(x)=1,那么 C o s t ( h θ ( x ) , y ) Cost(h_θ(x),y) Cost(hθ(x),y)输出值将会趋向于0,即代价函数趋向于0,使得这点对假定函数的惩罚为0,几乎不改变结果
- 输出量 y = 1 y=1 y=1时,若假定函数 h θ ( x ) → 0 h_θ(x)\rightarrow0 hθ(x)→0,那么 C o s t ( h θ ( x ) , y ) Cost(h_θ(x),y) Cost(hθ(x),y)输出值将会趋向于 + ∞ +\infty +∞,即代价函数趋向于 + ∞ +\infty +∞,使得这点对假定函数的惩罚为 + ∞ +\infty +∞,极大地改变结果,使假定函数在这点处的输出结果迅速回到正确的值上来
- C o s t ( h θ ( x ) , y ) Cost(h_θ(x),y) Cost(hθ(x),y)中第二个函数的图像如上图
6-4 简化代价函数与梯度下降
由于 y = 0 y=0 y=0 or 1 1 1恒成立( y = 0 y=0 y=0 or 1 1 1 always),所以可以将 C o s t ( h θ ( x ) , y ) Cost(h_θ(x),y) Cost(hθ(x),y)简化为一个式子
C
o
s
t
(
h
θ
(
x
)
,
y
)
=
−
y
l
o
g
(
h
θ
(
x
)
)
−
(
1
−
y
)
l
o
g
(
1
−
h
θ
(
x
)
)
Cost(h_θ(x),y)=-ylog(h_θ(x))-(1-y)log(1-h_θ(x))
Cost(hθ(x),y)=−ylog(hθ(x))−(1−y)log(1−hθ(x))
最后得出的用于逻辑回归的代价函数为:
J
(
θ
)
=
1
m
∑
i
=
1
m
C
o
s
t
(
h
θ
(
x
(
i
)
)
,
y
(
i
)
)
J(θ)=\frac{1}{m}\sum_{i=1}^mCost(h_θ(x^{(i)}),y^{(i)})
J(θ)=m1i=1∑mCost(hθ(x(i)),y(i))
J
(
θ
)
=
−
1
m
[
∑
i
=
1
m
y
(
i
)
l
o
g
(
h
θ
(
x
(
i
)
)
)
+
(
1
−
y
(
i
)
)
l
o
g
(
1
−
h
θ
(
x
(
i
)
)
)
]
J(θ)=-\frac{1}{m}\left[\sum_{i=1}^my^{(i)}log(h_θ(x^{(i)}))+(1-y^{(i)})log(1-h_θ(x^{(i)}))\right]
J(θ)=−m1[i=1∑my(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))]
在梯度下降中不断循环(for j=1,2,…,n)的式子为:
θ
j
:
=
θ
j
−
α
∂
∂
θ
j
J
(
θ
)
θ_j:=θ_j-α\frac{\partial}{\partial θ_j}J(θ)
θj:=θj−α∂θj∂J(θ)
θ
j
:
=
θ
j
−
α
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
j
(
i
)
θ_j:=θ_j-α\sum_{i=1}^m(h_θ(x^{(i)})-y^{(i)})x_j^{(i)}
θj:=θj−αi=1∑m(hθ(x(i))−y(i))xj(i)
6-5 高级优化
6-7 多元分类:一对多
- 共有三个分类:三角形、叉、正方形
- 先计算三角形:将三角形认为是正样本,其他认为是负样本,可以计算出一条直线划分三角形和其他图形,如上图右上角第一幅坐标系
- 其他图形同理
7 正则化
7-1 过拟合问题
- 上图左侧坐标系为欠拟合,用一条直线不能很好的表示这个数据集,偏差很大
- 上图中间为合适的拟合
- 上图右侧为过度拟合,拟合的曲线波动很大,假定函数中的变量过多,虽然代价函数非常接近0,但不能泛化到其他数据集中
- 上图为在逻辑回归中的欠拟合、合适的拟合、过度拟合
解决过拟合:
1.减少特征数量
2.正则化
7-2 (正则化更改)代价函数
使用正则化更改代价函数
- 直接使用上图右侧的假定函数及其代价函数会导致过拟合
- 在不去掉 θ 3 θ_3 θ3和 θ 4 θ_4 θ4的前提下,可以在代价函数上加上对于 θ 3 θ_3 θ3和 θ 4 θ_4 θ4的惩罚项: 1000 θ 3 2 + 1000 θ 3 2 1000θ_3^2+1000θ_3^2 1000θ32+1000θ32,(1000只是随便一个比较大的数),加上惩罚项之后的代价函数在运算中会让参数 θ 3 θ_3 θ3和 θ 4 θ_4 θ4变得尽可能小,让 θ 3 θ_3 θ3和 θ 4 θ_4 θ4对假定函数的图像影响变小,这样就可以在保留 θ 3 θ_3 θ3和 θ 4 θ_4 θ4参数的情况下不产生过拟合。
加上惩罚项后的假定函数变为:
J
(
θ
)
=
1
2
m
[
∑
i
=
1
m
C
o
s
t
(
h
θ
(
x
(
i
)
)
,
y
(
i
)
)
+
1000
θ
3
2
+
1000
θ
3
2
]
J(θ)=\frac{1}{2m} \left[ \sum_{i=1}^mCost(h_θ(x^{(i)}),y^{(i)})+1000θ_3^2+1000θ_3^2 \right]
J(θ)=2m1[i=1∑mCost(hθ(x(i)),y(i))+1000θ32+1000θ32]
由于我们一般不知道哪一项会导致过拟合,所以在代价函数中加入正则化项
加入后的代价函数为:
J
(
θ
)
=
1
2
m
[
∑
i
=
1
m
C
o
s
t
(
h
θ
(
x
(
i
)
)
,
y
(
i
)
)
+
λ
∑
j
=
1
n
θ
j
2
]
J(θ)=\frac{1}{2m} \left[ \sum_{i=1}^mCost(h_θ(x^{(i)}),y^{(i)})+λ\sum_{j=1}^{n}θ_j^2 \right]
J(θ)=2m1[i=1∑mCost(hθ(x(i)),y(i))+λj=1∑nθj2]
λ
λ
λ为正则化参数,一般不对
θ
0
θ_0
θ0增加惩罚项,所以
j
j
j从
1
1
1开始
7-3 线性回归的正则化
- 正则化后的梯度下降循环项如上图,由于在代价函数中没有添加对
θ
0
θ_0
θ0的惩罚项,所以对
θ
0
θ_0
θ0的更新分开表示
- 对于 j = 1 , 2 , 3 , . . . , n j=1,2,3,...,n j=1,2,3,...,n的梯度下降项也可化简为上图的式子
- 可以得到 1 − α λ m 1-α\frac{λ}{m} 1−αmλ是一个小于1但非常接近1的数
使用正则化后得到的正规方程为:
- 这里只要 λ > 0 λ>0 λ>0,那么括号内计算得出的矩阵一定可逆
- 而在原来没有用正则化得出的正规矩阵 θ = ( X T X ) − 1 X T y θ=(X^TX)^{-1}X^Ty θ=(XTX)−1XTy中,如果 m < n m<n m<n(m为样本数,n为特征数),那么括号内矩阵不可逆(是奇异矩阵),所以正则化也可以应用于样本数小于特征数时的情况,让括号内矩阵可逆
7-4 逻辑回归的正则化
正则化后逻辑回归的代价函数改为:
J
(
θ
)
=
−
1
m
[
∑
i
=
1
m
y
(
i
)
l
o
g
(
h
θ
(
x
(
i
)
)
)
+
(
1
−
y
(
i
)
)
l
o
g
(
1
−
h
θ
(
x
(
i
)
)
)
]
+
λ
2
m
∑
j
=
1
n
θ
j
2
J(θ)=-\frac{1}{m}\left[\sum_{i=1}^my^{(i)}log(h_θ(x^{(i)}))+(1-y^{(i)})log(1-h_θ(x^{(i)}))\right]+\frac{λ}{2m}\sum_{j=1}^{n}θ_j^2
J(θ)=−m1[i=1∑my(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))]+2mλj=1∑nθj2
正则化后的梯度下降循环项如上图
8 神经网络的表示
8-1 非线性假设
对于一幅图像来说,如果取出每个像素点的灰度值或其他特征表示方法来作为一个数据样本的话,数据集将会非常庞大,如果运用之前的回归算法来计算,将会产生非常大的计算成本
8-2 神经元与大脑
8-3 前向传播-模型展示I
- 上图指一个带有Sigmoid激活函数的人工神经元,在神经网络术语中,
g
(
z
)
=
1
1
+
e
−
θ
T
X
g(z)=\frac{1}{1+e^{-θ^TX}}
g(z)=1+e−θTX1称作激活函数
- 神经网络指的其实是一组神经网络的集合,第一层(Layer 1)称为输入层(Input Layer),第二层(Layer 2)称为隐藏层(Hidden Layer),第三层(Layer 3)称为输出层(Output Layer)
- 用 a i ( j ) a_i^{(j)} ai(j)来表示第 j j j层的第 i i i个神经元的激活项(“activation” of unit i i i in layer j j j),所谓激活项是指由一个具体的神经元计算并输出的值
- 用
Θ
(
j
)
\Theta^{(j)}
Θ(j)表示从第
j
j
j层到第
j
+
1
j+1
j+1层的权重矩阵(参数矩阵),就是之前的
θ
\theta
θ矩阵(之前的
θ
\theta
θ既可以叫做参数
p
a
r
a
m
e
t
e
r
s
parameters
parameters也可以叫做权重
w
e
i
g
h
t
s
weights
weights)
- a 1 ( 2 ) a_1^{(2)} a1(2)、 a 2 ( 2 ) a_2^{(2)} a2(2)和 a 3 ( 2 ) a_3^{(2)} a3(2)的计算公式在上图中已写出
- 其中 Θ ( 1 ) \Theta^{(1)} Θ(1)是一个 3 × 4 3×4 3×4的矩阵
- 如果神经网络在第 j j j层有 s j s_j sj个单元,在第 j + 1 j+1 j+1层有 s j + 1 s_{j+1} sj+1个单元,那么 Θ ( j ) \Theta^{(j)} Θ(j)是一个 s j + 1 × ( s j + 1 ) s_{j+1}×(s_j+1) sj+1×(sj+1)的矩阵
8-4 前向传播-模型展示II
前向传播的矢量化实现:
- 把上面式子中的 Θ 10 ( 1 ) + Θ 11 ( 1 ) + Θ 12 ( 1 ) + Θ 13 ( 1 ) \Theta^{(1)}_{10}+\Theta^{(1)}_{11}+\Theta^{(1)}_{12}+\Theta^{(1)}_{13} Θ10(1)+Θ11(1)+Θ12(1)+Θ13(1)表示为 z 1 ( 2 ) z_1^{(2)} z1(2)
- 则 a 1 ( 2 ) = g ( z 1 ( 2 ) ) a_1^{(2)}=g(z_1^{(2)}) a1(2)=g(z1(2))
- 扩展到全域,第二层的激活值 a ( 2 ) = g ( z ( 2 ) ) a^{(2)}=g(z^{(2)}) a(2)=g(z(2)),其中 z ( 2 ) = Θ ( 1 ) a ( 1 ) z^{(2)}=\Theta^{(1)}a^{(1)} z(2)=Θ(1)a(1),另外需要添加偏置项 a 0 ( 2 ) = 1 a^{(2)}_0=1 a0(2)=1
8-5 例子与理解I
8-6 例子与理解II
上图为计算
x
1
x_1
x1 XNOR
x
2
x_2
x2的神经网络
第一层到第二层先计算
x
1
x_1
x1 AND
x
2
x_2
x2得到
a
1
(
2
)
a_1^{(2)}
a1(2),计算(NOT
x
1
x_1
x1) AND (NOT
x
2
x_2
x2)得到
a
2
(
2
)
a_2^{(2)}
a2(2)
再以
a
1
(
2
)
a_1^{(2)}
a1(2)和
a
2
(
2
)
a_2^{(2)}
a2(2)为
x
1
x_1
x1和
x
2
x_2
x2计算
x
1
x_1
x1 OR
x
2
x_2
x2得出的结果即为
x
1
x_1
x1 XNOR
x
2
x_2
x2
8-7 多元分类
这里有四种输出:pedestrian、car、motorcycle、truck
所以共有四个输出单元
输出的
y
(
i
)
y^{(i)}
y(i)为一个4维矩阵,可能是:
[
1
0
0
0
]
或
[
0
1
0
0
]
或
[
0
0
1
0
]
或
[
0
0
0
1
]
中
的
其
中
一
个
\begin{bmatrix} 1\\ 0\\ 0\\ 0\\ \end{bmatrix}或 \begin{bmatrix} 0\\ 1\\ 0\\ 0\\ \end{bmatrix}或 \begin{bmatrix} 0\\ 0\\ 1\\ 0\\ \end{bmatrix}或 \begin{bmatrix} 0\\ 0\\ 0\\ 1\\ \end{bmatrix}中的其中一个
⎣⎢⎢⎡1000⎦⎥⎥⎤或⎣⎢⎢⎡0100⎦⎥⎥⎤或⎣⎢⎢⎡0010⎦⎥⎥⎤或⎣⎢⎢⎡0001⎦⎥⎥⎤中的其中一个
分别表示pedestrian或car或motorcycle或truck
9 神经网络:Learning
9-1 应用于神经网络的代价函数
- 用 L L L表示神经网络的总层数(Layers)
- 用 s l s_l sl表示第 l l l层单元(神经元)的数量(不包括偏置单元)
- h Θ ( x ) ∈ R K h_\Theta(x)\in\mathbb{R}^K hΘ(x)∈RK( h Θ ( x ) h_\Theta(x) hΘ(x)为 K K K维向量,即神经网络输出层共有 K K K个神经元,即有 K K K个输出)
- ( h Θ ( x ) ) i = i t h o u t p u t (h_\Theta(x))_i=i^{th} output (hΘ(x))i=ithoutput( ( h Θ ( x ) ) i (h_\Theta(x))_i (hΘ(x))i表示第 i i i个输出)
应用于神经网络的代价函数为:
J ( Θ ) = − 1 m [ ∑ i = 1 m ∑ k = 1 K y ( i ) l o g ( h Θ ( x ( i ) ) ) k + ( 1 − y k ( i ) ) l o g ( 1 − ( h Θ ( x ( i ) ) ) k ) ] + λ 2 m ∑ l = 1 L − 1 ∑ i = 1 s l ∑ j = 1 s l + 1 ( Θ j i ( l ) ) 2 J(\Theta)=-\frac{1}{m}\left[\sum_{i=1}^m\sum_{k=1}^Ky^{(i)}log(h_\Theta(x^{(i)}))_k+(1-y_k^{(i)})log(1-(h_\Theta(x^{(i)}))_k)\right] +\frac{λ}{2m}\sum_{l=1}^{L-1}\sum_{i=1}^{s_l}\sum_{j=1}^{s_{l+1}}(\Theta_{ji}^{(l)})^2 J(Θ)=−m1[i=1∑mk=1∑Ky(i)log(hΘ(x(i)))k+(1−yk(i))log(1−(hΘ(x(i)))k)]+2mλl=1∑L−1i=1∑slj=1∑sl+1(Θji(l))2
- 第二项中的 ∑ i = 1 s l ∑ j = 1 s l + 1 \sum_{i=1}^{s_l}\sum_{j=1}^{s_{l+1}} ∑i=1sl∑j=1sl+1指的是将 s l + 1 s_{l+1} sl+1行 s l s_l sl列的矩阵 Θ j i ( l ) \Theta_{ji}^{(l)} Θji(l)中的每一个元素相加起来
- 第二项中的 ∑ l = 1 L − 1 \sum_{l=1}^{L-1} ∑l=1L−1指的是将输入层和隐藏层的矩阵都求和
9-2 反向传播算法
-
δ
j
(
l
)
\delta_j^{(l)}
δj(l)定义为第
l
l
l层第
j
j
j个神经元的偏差(“error”)
以上图的四层的神经网络为例 - δ j ( 4 ) = a j ( 4 ) − y j \delta_j^{(4)}=a_j^{(4)}-y_j δj(4)=aj(4)−yj( y j y_j yj指第 j j j个输出在数据集中的值, a j ( 4 ) a_j^{(4)} aj(4)指神经网络的第 j j j个输出, a j ( 4 ) a_j^{(4)} aj(4)也可表示为 ( h Θ ( x ) ) j (h_\Theta(x))_j (hΘ(x))j)
- 用向量方法表示上式可表示为 δ ( 4 ) = a ( 4 ) − y \delta^{(4)}=a^{(4)}-y δ(4)=a(4)−y,也可表示为 δ ( 4 ) = h Θ ( x ) − y \delta^{(4)}=h_\Theta(x)-y δ(4)=hΘ(x)−y
-
δ
(
3
)
=
(
Θ
(
3
)
)
T
δ
(
4
)
⋅
g
′
(
z
(
3
)
)
\delta^{(3)}=(\Theta^{(3)})^T\delta^{(4)}\cdot g^{\prime}(z^{(3)})
δ(3)=(Θ(3))Tδ(4)⋅g′(z(3))
其中 g ′ ( z ( 3 ) ) = a ( 3 ) ⋅ ( 1 − a ( 3 ) ) g^{\prime}(z^{(3)})=a^{(3)}\cdot (1-a^{(3)}) g′(z(3))=a(3)⋅(1−a(3)) -
δ
(
2
)
=
(
Θ
(
2
)
)
T
δ
(
3
)
⋅
g
′
(
z
(
2
)
)
\delta^{(2)}=(\Theta^{(2)})^T\delta^{(3)}\cdot g^{\prime}(z^{(2)})
δ(2)=(Θ(2))Tδ(3)⋅g′(z(2))
其中 g ′ ( z ( 2 ) ) = a ( 2 ) ⋅ ( 1 − a ( 2 ) ) g^{\prime}(z^{(2)})=a^{(2)}\cdot (1-a^{(2)}) g′(z(2))=a(2)⋅(1−a(2))
点乘结果是一个数,叉乘结果是一个向量
-
∂
∂
Θ
i
j
(
l
)
J
(
Θ
)
=
a
j
(
l
)
δ
i
(
l
+
1
)
\frac{\partial}{\partial \Theta_{ij}^{(l)}}J(\Theta)=a_j^{(l)}\delta_i^{(l+1)}
∂Θij(l)∂J(Θ)=aj(l)δi(l+1)
这里忽略了正则化项,即认为 λ = 0 \lambda=0 λ=0
- 上图是反向传播算法的流程,最后可以得到 ∂ ∂ Θ i j ( l ) J ( Θ ) = D i j ( l ) \frac{\partial}{\partial \Theta_{ij}^{(l)}}J(\Theta)=D^{(l)}_{ij} ∂Θij(l)∂J(Θ)=Dij(l),然后进行梯度下降算法
9-3 理解反向传播
以上图的神经网络为例
- δ 2 ( 2 ) = Θ 12 ( 2 ) δ 1 ( 3 ) + Θ 22 ( 2 ) δ 2 ( 3 ) \delta_2^{(2)}=\Theta_{12}^{(2)}\delta_1^{(3)}+\Theta_{22}^{(2)}\delta_2^{(3)} δ2(2)=Θ12(2)δ1(3)+Θ22(2)δ2(3)
- δ 2 ( 3 ) = Θ 12 ( 3 ) δ 1 ( 4 ) \delta_2^{(3)}=\Theta_{12}^{(3)}\delta_1^{(4)} δ2(3)=Θ12(3)δ1(4)
9-4 展开参数
9-5 梯度检测
要估计代价函数
J
(
Θ
)
J(\Theta)
J(Θ)上点
(
θ
,
J
(
Θ
)
)
(\theta,J(\Theta))
(θ,J(Θ))处的导数值,可以运用
d
d
θ
J
(
θ
)
≈
J
(
θ
+
ε
)
−
J
(
θ
−
ε
)
2
ε
(
ε
=
1
0
−
4
为
宜
)
\frac{\mathrm{d} }{\mathrm{d} \theta}J(\theta)\approx\frac{J(\theta+\varepsilon)-J(\theta-\varepsilon)}{2\varepsilon}(\varepsilon=10^{-4}为宜)
dθdJ(θ)≈2εJ(θ+ε)−J(θ−ε)(ε=10−4为宜)求得导数
扩展到向量中,如上图
- θ \theta θ是一个 n n n维向量,是矩阵 Θ ( 1 ) , Θ ( 2 ) , Θ ( 3 ) , . . . \Theta^{(1)},\Theta^{(2)},\Theta^{(3)},... Θ(1),Θ(2),Θ(3),...的展开
- 可以估计 ∂ ∂ θ n J ( θ ) \frac{\partial}{\partial \theta_{n}}J(\theta) ∂θn∂J(θ)的值
将估计得到的偏导数值与反向传播得到的偏导数值比较,如果两个值非常近,就可以验证计算是正确的
一旦确定反向传播算法计算出的值是正确的,就应该关掉梯度检验算法
9-6 随机初始化
如果在程序开始时令
Θ
\Theta
Θ中所有元素均为0,会导致多个神经元计算相同的特征,导致冗余,这成为对称权重问题
所以在初始化时要令
Θ
i
j
(
l
)
\Theta^{(l)}_{ij}
Θij(l)等于
[
−
ϵ
,
ϵ
]
[-\epsilon,\epsilon]
[−ϵ,ϵ]中的一个随机值
9-7 回顾总结
训练一个神经网络:
1.随机一个初始权重
2.执行前向传播算法,得到对所有
x
(
i
)
x^{(i)}
x(i)的
h
Θ
(
x
(
i
)
)
h_\Theta(x^{(i)})
hΘ(x(i))
3.计算代价函数
J
(
Θ
)
J(\Theta)
J(Θ)
4.执行反向传播算法,计算
∂
∂
Θ
j
k
(
l
)
J
(
Θ
)
\frac{\partial}{\partial\Theta_{jk}^{(l)}}J(\Theta)
∂Θjk(l)∂J(Θ)
(get
a
(
l
)
a^{(l)}
a(l) and
δ
(
l
)
\delta^{(l)}
δ(l) for
l
=
2
,
.
.
.
,
L
l=2,...,L
l=2,...,L)
5.通过梯度检验算法得到估计的
J
(
Θ
)
J(\Theta)
J(Θ)的偏导数值,将估计得到的偏导数值与反向传播得到的偏导数值比较,如果两个值非常近,就可以验证反向传播算法的计算结果是正确的;验证完后,关闭梯段检验算法(disable gradient checking code)
6.运用梯度下降算法或其他更高级的优化方法,结合反向传播计算结果,得到使
J
(
Θ
)
J(\Theta)
J(Θ)最小时的参数
Θ
\Theta
Θ的值
10 应用机器学习的建议
10-1 决定下一步做什么
10-2 评估假设函数
随机选择数据集中的70%作为训练集,30%作为测试集,将数据集分为两个部分
- 首先根据训练集计算出参数 Θ \Theta Θ
- 把参数
Θ
\Theta
Θ代入测试集计算代价函数的值(这里是线性回归的代价函数,逻辑回归的代价函数同理):
J t e s t ( θ ) = 1 2 m t e s t ∑ i = 1 m t e s t ( h θ ( x t e s t ( i ) ) − y t e s t ( i ) ) 2 J_{test}(θ)=\frac{1}{2m_{test}}\sum_{i=1}^{m_{test}}(h_θ(x^{(i)}_{test})-y^{(i)}_{test})^2 Jtest(θ)=2mtest1i=1∑mtest(hθ(xtest(i))−ytest(i))2
逻辑分类中有另一种形式的测试度量,称作错误分类或0/1错误分类,计算过程如上图
10-3 模型选择和训练、验证、测试集
随机选择数据集中的60%作为训练集(Training Set),20%作为交叉验证集(验证集,Cross Validation Set,cv),20%作为测试集(Test Set),将数据集分为三个部分
上图,计算训练误差、验证误差和测试误差
用
d
d
d来表示假定函数的多项式的最高次幂
- 先用训练集求每一个假定函数的代价函数 J ( Θ ) J(\Theta) J(Θ)取到最小值时 Θ \Theta Θ的值,再把这个求得的 Θ \Theta Θ代入交叉验证集求得 J c v ( Θ ) J_{cv}(\Theta) Jcv(Θ),对每一个假定函数进行以上步骤的计算,得到 d = 1 , . . . , 10 d=1,...,10 d=1,...,10的10个代价函数的值,取最小的那个,这里假定是 d = 4 d=4 d=4,再使用 d = 4 d=4 d=4时的 Θ \Theta Θ代入测试集得到泛化误差
10-4 判断偏差与方差
上图坐标系
y
y
y轴为误差,
x
x
x轴为
d
d
d(多项式最高次幂)的大小
以上图为例,
- 当 d d d过小时,出现欠拟合(underfit),偏差(bias)过大,此时的训练集误差 J t r a i n ( Θ ) J_{train}(\Theta) Jtrain(Θ)很大,并且 J c v ( Θ ) ≈ J t r a i n ( Θ ) J_{cv}(\Theta)\approx J_{train}(\Theta) Jcv(Θ)≈Jtrain(Θ)
- 当 d d d过大时,出现过拟合(overfit),方差(variance)过大,此时的训练集误差 J t r a i n ( Θ ) J_{train}(\Theta) Jtrain(Θ)很小,并且 J c v ( Θ ) > > J t r a i n ( Θ ) J_{cv}(\Theta)>> J_{train}(\Theta) Jcv(Θ)>>Jtrain(Θ)
10-5 正则化和偏差、方差
勘误:正则化项里面
∑
\sum
∑上面的m应该改为n
- 若正则化参数 λ \lambda λ过大,会导致欠拟合,高偏差,并且参数 θ 1 ≈ 0 , θ 2 ≈ 0 , . . . \theta_1\approx 0,\theta_2\approx 0,... θ1≈0,θ2≈0,...,假定函数的结果 h θ ( x ) ≈ θ 0 h_{\theta}(x)\approx \theta_0 hθ(x)≈θ0,如上图最左侧坐标系
- 若正则化参数
λ
\lambda
λ过小,会导致过拟合,高方差,如上图最右侧坐标系
使用不带正则化项的 J t r a i n ( Θ ) 、 J c v ( Θ ) 、 J t e s t ( Θ ) J_{train}(\Theta)、J_{cv}(\Theta)、J_{test}(\Theta) Jtrain(Θ)、Jcv(Θ)、Jtest(Θ)
J ( Θ ) J(\Theta) J(Θ)取下图中的带正则化项的代价函数
- 首先取多种 λ \lambda λ的情况,这里从0,0.01开始,下一个 λ \lambda λ是上一个的两倍,一直取到 λ = 10.24 \lambda=10.24 λ=10.24,由于此时小数部分对结果影响不大,所以也可以直接取 λ = 10 \lambda=10 λ=10
- 将每一种情况的 λ \lambda λ代入带正则化项的代价函数 J ( Θ ) J(\Theta) J(Θ)中,这里共能得到12个不同的 Θ \Theta Θ值
- 再把这12个 Θ \Theta Θ代入到交叉验证集代价函数 J c v ( Θ ) J_{cv}(\Theta) Jcv(Θ)中,注意这里的 J c v ( Θ ) J_{cv}(\Theta) Jcv(Θ)是不带正则化项的,最后得到12个不同的 J c v ( Θ ) J_{cv}(\Theta) Jcv(Θ)值
- 取最小的那个
J
c
v
(
Θ
)
J_{cv}(\Theta)
Jcv(Θ)值对应的
λ
\lambda
λ(这里认为第5个
λ
\lambda
λ是最合适的)代入到测试集的代价函数
J
t
e
s
t
(
Θ
)
J_{test}(\Theta)
Jtest(Θ)中,计算泛化误差,注意这里的
J
t
e
s
t
(
Θ
)
J_{test}(\Theta)
Jtest(Θ)也是不带正则化项的
10-6 学习曲线
如上图是高偏差/欠拟合的情形
此时增加数据集数量对于误差的缩小没有明显帮助
如上图是高方差/过拟合的情形
此时交叉验证集的曲线和训练集的曲线中间相差较大,所以增加数据集数量对于减小误差是有帮助的
10-7 决定接下来做什么
解决高偏差或高方差的一些方法如下图:
如上图
- 在一个小型的神经网络中,容易出现欠拟合现象,但它的好处是计算量较小
- 在一个大型的神经网络中,容易出现过拟合现象,可以通过正则化来避免,它的好处是效果较好,但是计算量较大
11 机器学习系统设计
11-1 确定执行的优先级:以垃圾邮件分类为例
11-2 误差分析
- 不要在编写程序时进行过早的优化,在编写完整个系统后再根据学习曲线优化系统;先编写一个简单粗暴的算法,再根据输出的结果改进算法
- 误差分析:观察被错误分类的数据有何共同的特征(以垃圾邮件分类为例,查看被错误分类的垃圾邮件有何共同的特征)或以数值方式表示误差
- 推荐在交叉验证集上做误差分析
11-3 不对称性分类的误差评估
偏斜类问题:一个数据集中的一类数据样本比另外一类的样本少的多(比如1占样本的0.5%,而0占样本的99.5%)
在偏斜类问题中(比如患癌症占样本的0.5%,而不患癌症占样本的99.5%),假设一个算法达到了99.5%的预测准确率,这时已经只有0.5%的误差,但是如果始终预测不患癌症也有99.5%的准确率,误差也只有0.5%,这时需要用到不同的误差度量值
其中一种叫做查准率和召回率(precision recall)
- 左侧表格上方为实际的,表格左侧为预测的,1代表患癌,0代表不患癌
- 如果预测为1,实际为1,则是真阳性(True positive)
- 如果预测为1,实际为0,则是假阳性(False positive)
- 如果预测为0,实际为1,则是假阴性(False negtive)
- 如果预测为0,实际为0,则是真阴性(True negtive)
查 准 率 = 预 测 为 真 并 且 实 际 为 真 的 数 量 预 测 为 真 的 数 量 = T r u e p o s i t i v e T r u e p o s i t i v e + F a l s e p o s i t i v e 查准率=\frac{预测为真并且实际为真的数量}{预测为真的数量}=\frac{True\ positive}{True\ positive+False\ positive} 查准率=预测为真的数量预测为真并且实际为真的数量=True positive+False positiveTrue positive
召 回 率 = 预 测 为 真 并 且 实 际 为 真 的 数 量 实 际 为 真 的 数 量 = T r u e p o s i t i v e T r u e p o s i t i v e + F a l s e n e g t i v e 召回率=\frac{预测为真并且实际为真的数量}{实际为真的数量}=\frac{True\ positive}{True\ positive+False\ negtive} 召回率=实际为真的数量预测为真并且实际为真的数量=True positive+False negtiveTrue positive
两者均是越高越好
11-4 查准率和召回率的平衡
本来在超过50%概率时预测为1(即患癌),在低于50%时预测为0(即不患癌)
现在如果要在超过70%患癌可能性时才预测为患癌的话,会得到一个高查准率但低召回率的模型
如果要在超过30%患癌可能性时就预测患癌,会得到一个高召回率但低查准率的模型
- 高查准率:能不揪出来的就不揪出来
- 高召回率:能揪出来的都揪出来
通过计算查准率和召回率的平均值不能直接评估一个算法的好坏
通过
F
值
(
F
1
值
)
=
2
P
R
P
+
R
F值(F_1值)=2\frac{PR}{P+R}
F值(F1值)=2P+RPR能更好地评估一个算法的好坏(P为查准率,R为召回率)
11-5 机器学习数据
在有一个非常庞大的训练集的前提下,即使有很多的参数(训练集数量>>参数数量),也能很好地拟合数据集,不会产生过拟合现象
12 支持向量机(SVM)
12-1 优化目标
- 上图左侧坐标系为 y = 1 y=1 y=1时代价函数的图像,支持向量机时画出粉色的曲线,命名为 C o s t 1 ( z ) Cost_1(z) Cost1(z),下标指 y y y的值为 1 1 1
- 同样的,右侧坐标系为 y = 0 y=0 y=0时代价函数的图像,支持向量机时画出粉色的曲线,命名为 C o s t 0 ( z ) Cost_0(z) Cost0(z),下标指 y y y的值为 0 0 0
在逻辑回归中,代价函数为:
J
(
θ
)
=
−
1
m
[
∑
i
=
1
m
y
(
i
)
l
o
g
(
h
θ
(
x
(
i
)
)
)
+
(
1
−
y
(
i
)
)
l
o
g
(
1
−
h
θ
(
x
(
i
)
)
)
]
+
λ
2
m
∑
j
=
1
n
θ
j
2
J(θ)=-\frac{1}{m}\left[\sum_{i=1}^my^{(i)}log(h_θ(x^{(i)}))+(1-y^{(i)})log(1-h_θ(x^{(i)}))\right]+\frac{λ}{2m}\sum_{j=1}^{n}θ_j^2
J(θ)=−m1[i=1∑my(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))]+2mλj=1∑nθj2
要支持向量机,先将上式里的负号放到求和里面去,然后把
1
m
\frac{1}{m}
m1去掉(
1
m
\frac{1}{m}
m1是一个常数,虽然去掉它会改变代价函数的值,但是仍然能求得一样的最小值对应的
θ
\theta
θ),之后得到的代价函数为:
J
(
θ
)
=
∑
i
=
1
m
[
y
(
i
)
(
−
l
o
g
(
h
θ
(
x
(
i
)
)
)
)
+
(
1
−
y
(
i
)
)
(
−
l
o
g
(
1
−
h
θ
(
x
(
i
)
)
)
)
]
+
λ
2
∑
j
=
1
n
θ
j
2
J(θ)=\sum_{i=1}^m\left[y^{(i)}\left (-log(h_θ(x^{(i)}))\right )+(1-y^{(i)})\left(-log(1-h_θ(x^{(i)}))\right)\right]+\frac{λ}{2}\sum_{j=1}^{n}θ_j^2
J(θ)=i=1∑m[y(i)(−log(hθ(x(i))))+(1−y(i))(−log(1−hθ(x(i))))]+2λj=1∑nθj2
把上式中的
(
−
l
o
g
(
h
θ
(
x
(
i
)
)
)
)
\left (-log(h_θ(x^{(i)}))\right )
(−log(hθ(x(i))))替换为
C
o
s
t
1
(
θ
T
x
(
i
)
)
Cost_1(\theta^Tx^{(i)})
Cost1(θTx(i)),把
(
−
l
o
g
(
1
−
h
θ
(
x
(
i
)
)
)
)
\left(-log(1-h_θ(x^{(i)}))\right)
(−log(1−hθ(x(i))))替换为
C
o
s
t
0
(
θ
T
x
(
i
)
)
Cost_0(\theta^Tx^{(i)})
Cost0(θTx(i)),得到代价函数:
J
(
θ
)
=
∑
i
=
1
m
[
y
(
i
)
C
o
s
t
1
(
θ
T
x
(
i
)
)
+
(
1
−
y
(
i
)
)
C
o
s
t
0
(
θ
T
x
(
i
)
)
]
+
λ
2
∑
j
=
1
n
θ
j
2
J(θ)=\sum_{i=1}^m\left[y^{(i)}Cost_1(\theta^Tx^{(i)})+(1-y^{(i)})Cost_0(\theta^Tx^{(i)})\right]+\frac{λ}{2}\sum_{j=1}^{n}θ_j^2
J(θ)=i=1∑m[y(i)Cost1(θTx(i))+(1−y(i))Cost0(θTx(i))]+2λj=1∑nθj2
在支持向量机中,不再使用正则化参数
λ
\lambda
λ,改为使用参数
C
C
C,更改后的支持向量机的代价函数为:
J
(
θ
)
=
C
∑
i
=
1
m
[
y
(
i
)
C
o
s
t
1
(
θ
T
x
(
i
)
)
+
(
1
−
y
(
i
)
)
C
o
s
t
0
(
θ
T
x
(
i
)
)
]
+
1
2
∑
j
=
1
n
θ
j
2
J(θ)=C\sum_{i=1}^m\left[y^{(i)}Cost_1(\theta^Tx^{(i)})+(1-y^{(i)})Cost_0(\theta^Tx^{(i)})\right]+\frac{1}{2}\sum_{j=1}^{n}θ_j^2
J(θ)=Ci=1∑m[y(i)Cost1(θTx(i))+(1−y(i))Cost0(θTx(i))]+21j=1∑nθj2
- 支持向量机中不会预测 y = 1 / 0 y=1/0 y=1/0的概率,如果 θ T x ( i ) ≥ 0 \theta^Tx^{(i)}\ge0 θTx(i)≥0,假定函数输出1,反之输出0
12-2 大间距的理解
支持向量机又被称为大间距分类器
更改支持向量机中的判断边界,让
θ
T
x
(
i
)
≥
1
\theta^Tx^{(i)}\ge1
θTx(i)≥1时才输出1,
θ
T
x
(
i
)
≤
−
1
\theta^Tx^{(i)}\le-1
θTx(i)≤−1时才输出0,这样两个结果之间就有一个安全间距
使用一般的逻辑回归算法可能会生成上图中粉色和绿色的直线来分割两类样本,而使用支持向量机会生成图中黑色的直线,图中两条蓝线中间的区域称为间距,支持向量机会尽可能的将两种样本以最大的间距分隔开,可以看出,支持向量机后可以有更好地鲁棒性
如上图,先假设没有左侧的那一个负样本,用一个很大的
C
C
C可以生成上图中黑色直线,但如果有左侧的那一个负样本,由于
C
C
C很大,支持向量机为保证两类样本间有最大的间距,会生成上图中粉色的直线,但如果
C
C
C没有那么大,则即使有左侧的那一个负样本,依然会生成黑色直线
- C C C就相当于之前的 1 λ \frac{1}{\lambda} λ1,虽然两者确实不一样,但呈现出来的效果差不多
12-3 支持向量机的数学原理
12-4 核函数I
如图的样本,如果假定函数
≥
0
\ge0
≥0,就预测
y
=
1
y=1
y=1,其他情况预测
y
=
0
y=0
y=0,
在上图中的假定函数中,设
f
1
=
x
1
,
f
2
=
x
2
,
f
3
=
x
1
x
2
,
f
4
=
x
1
2
,
.
.
.
f_1=x_1,f_2=x_2,f_3=x_1x_2,f_4=x_1^2,...
f1=x1,f2=x2,f3=x1x2,f4=x12,...
假定函数变为
h
θ
(
x
)
=
θ
0
+
θ
1
f
1
+
θ
2
f
2
+
.
.
.
h_\theta(x)=\theta_0+\theta_1 f_1+\theta_2 f_2+...
hθ(x)=θ0+θ1f1+θ2f2+...
以上方法与下文方法无关,与核函数无关
然而,除了对原有的特征进行组合以外,有没有更好的方法来构造𝑓1, 𝑓2, 𝑓3?我们可以利用核函数来计算出新的特征。
在坐标系中取3个样本标记矩阵
l
(
1
)
、
l
(
2
)
、
l
(
3
)
l^{(1)}、l^{(2)}、l^{(3)}
l(1)、l(2)、l(3)
x
x
x是一个给定的训练实例,假设有两个特征值,那么
x
=
[
x
1
,
x
2
]
x=[x_1,x_2]
x=[x1,x2]
令
f
1
=
s
i
m
i
l
a
r
i
t
y
(
x
,
l
(
1
)
)
=
e
x
p
(
−
∥
x
−
l
(
1
)
∥
2
2
σ
2
)
f_1=similarity\left(x,l^{(1)}\right)=exp\left(-\frac{\Vert x-l^{(1)} \Vert ^2}{2\sigma^2}\right)
f1=similarity(x,l(1))=exp(−2σ2∥x−l(1)∥2)
f
2
=
s
i
m
i
l
a
r
i
t
y
(
x
,
l
(
2
)
)
=
e
x
p
(
−
∥
x
−
l
(
2
)
∥
2
2
σ
2
)
f_2=similarity\left(x,l^{(2)}\right)=exp\left(-\frac{\Vert x-l^{(2)} \Vert^2 }{2\sigma^2}\right)
f2=similarity(x,l(2))=exp(−2σ2∥x−l(2)∥2)
f
3
=
.
.
.
.
.
.
f_3=......
f3=......
.
.
.
.
.
.
......
......
- s i m i l a r i t y ( x , l ( i ) ) similarity\left(x,l^{(i)}\right) similarity(x,l(i))称为相似度量函数/核函数
- s i m i l a r i t y ( x , l ( i ) ) similarity\left(x,l^{(i)}\right) similarity(x,l(i))也可写为 k ( x , l ( i ) ) k\left(x,l^{(i)}\right) k(x,l(i))
- e x p ( x ) exp(x) exp(x)表示 e x e^x ex,这里称为高斯核函数
- σ 2 \sigma^2 σ2是高斯核函数的参数
核函数运算时可化为:
f
1
=
s
i
m
i
l
a
r
i
t
y
(
x
,
l
(
1
)
)
=
e
x
p
(
−
∥
x
−
l
(
1
)
∥
2
2
σ
2
)
=
e
x
p
(
−
∑
j
=
1
n
(
x
j
−
l
j
(
1
)
)
2
2
σ
2
)
f_1=similarity\left(x,l^{(1)}\right)=exp\left(-\frac{\Vert x-l^{(1)} \Vert ^2}{2\sigma^2}\right)=exp\left(-\frac{\sum_{j=1}^n(x_j-l_j^{(1)} )^2}{2\sigma^2}\right)
f1=similarity(x,l(1))=exp(−2σ2∥x−l(1)∥2)=exp(−2σ2∑j=1n(xj−lj(1))2)
如果
x
x
x非常接近标记
l
(
1
)
l^{(1)}
l(1),那么
f
1
≈
e
x
p
(
−
0
2
2
σ
2
)
≈
1
f_1\approx exp(-\frac{0^2}{2\sigma^2})\approx1
f1≈exp(−2σ202)≈1
如果
x
x
x远离标记
l
(
1
)
l^{(1)}
l(1),那么
f
1
≈
e
x
p
(
−
(
l
a
r
g
e
n
u
m
b
e
r
)
2
2
σ
2
)
≈
0
f_1\approx exp(-\frac{(large\ number)^2}{2\sigma^2})\approx0
f1≈exp(−2σ2(large number)2)≈0
上图,如果
σ
2
\sigma^2
σ2变大,那么
f
i
f_i
fi的下降速度会变慢(斜率降低)
如上图,取一点
x
x
x,已经通过支持向量机计算得出
θ
0
、
θ
1
、
.
.
.
\theta_0、\theta_1、...
θ0、θ1、...的值如上图,然后可以按照核函数计算出
f
0
、
f
1
、
.
.
.
f_0、f_1、...
f0、f1、...的值如上图,将
θ
\theta
θ和
f
f
f的值代入假定函数得到
0.5
≥
0
0.5\ge0
0.5≥0,所以预测
y
=
1
y=1
y=1
如上图,再取另外的点
x
x
x,假设:最后得到靠近
l
(
1
)
和
l
(
2
)
l^{(1)}和l^{(2)}
l(1)和l(2)的点会预测为1,而远离
l
(
1
)
和
l
(
2
)
l^{(1)}和l^{(2)}
l(1)和l(2)的点会预测为0,那么最后可以拟合出一条如图中红色的曲线,曲线内预测为1,曲线外预测为0
12-5 核函数II
如何选择地标?
我们通常是根据训练集的数量选择地标的数量,即如果训练集中有𝑚个实例,则我们选
取𝑚个地标,并且令:𝑙(1) = 𝑥(1), 𝑙(2) = 𝑥(2), . . . . . , 𝑙(𝑚) = 𝑥(𝑚)。这样做的好处在于:现在我们
得到的新特征是建立在原有特征与训练集中所有其他特征之间距离的基础之上的,即:
由
f
1
(
i
)
=
s
i
m
i
l
a
r
i
t
y
(
x
(
i
)
,
l
(
1
)
)
f_1^{(i)}=similarity\left(x^{(i)},l^{(1)}\right)
f1(i)=similarity(x(i),l(1))
f
2
(
i
)
=
s
i
m
i
l
a
r
i
t
y
(
x
(
i
)
,
l
(
2
)
)
f_2^{(i)}=similarity\left(x^{(i)},l^{(2)}\right)
f2(i)=similarity(x(i),l(2))
.
.
.
...
...
f
m
(
i
)
=
s
i
m
i
l
a
r
i
t
y
(
x
(
i
)
,
l
(
m
)
)
f_m^{(i)}=similarity\left(x^{(i)},l^{(m)}\right)
fm(i)=similarity(x(i),l(m))
将
f
f
f写为特征向量形式得到
f
(
i
)
=
[
f
0
(
i
)
=
1
f
1
(
i
)
f
2
(
i
)
.
.
.
f
m
(
i
)
]
f^{(i)}= \begin{bmatrix} f_0^{(i)}=1\\ f_1^{(i)}\\ f_2^{(i)}\\ ...\\ f_m^{(i)} \end{bmatrix}
f(i)=⎣⎢⎢⎢⎢⎢⎡f0(i)=1f1(i)f2(i)...fm(i)⎦⎥⎥⎥⎥⎥⎤
f
(
i
)
f^{(i)}
f(i)是一个
m
+
1
m+1
m+1维矩阵,因为除了
m
m
m个样本外,还加入了一个偏置项
f
0
(
i
)
=
1
f_0^{(i)}=1
f0(i)=1
矩阵
f
(
i
)
f^{(i)}
f(i)的含义是(第
i
i
i个样本里的所有特征)与(从1到m的每一个样本里的所有特征)进行核函数运算,一共m个运算结果排列在矩阵里,再加上第0个的
f
0
(
i
)
=
1
f_0^{(i)}=1
f0(i)=1
用
f
(
i
)
f^{(i)}
f(i)替换带
x
x
x项,得到代价函数为:
C
∑
i
=
1
m
[
y
(
i
)
C
o
s
t
1
(
θ
T
f
(
i
)
)
+
(
1
−
y
(
i
)
)
C
o
s
t
0
(
θ
T
f
(
i
)
)
]
+
1
2
∑
j
=
1
n
=
m
θ
j
2
C\sum_{i=1}^m\left[y^{(i)}Cost_1(\theta^Tf^{(i)})+(1-y^{(i)})Cost_0(\theta^Tf^{(i)})\right]+\frac{1}{2}\sum_{j=1}^{n=m}θ_j^2
Ci=1∑m[y(i)Cost1(θTf(i))+(1−y(i))Cost0(θTf(i))]+21j=1∑n=mθj2
- 关于正则化项中 n = m n=m n=m的解释: θ ( i ) \theta_{(i)} θ(i)是对应于矩阵 f ( i ) f^{(i)} f(i)的权重,由于一共有 i = 1 , 2 , . . . , m i=1,2,...,m i=1,2,...,m共m个 f ( i ) f^{(i)} f(i)对应着m个 θ \theta θ,所以假定函数中一共有m项,即有m个 θ \theta θ,而之前已经规定了权重 θ \theta θ的个数用n来表示,所以这里有 n = m n=m n=m 注意这里已经忽略了 θ 0 \theta_0 θ0,不对其进行正则化
正则化项在具体实施中,求和部分可写为
∑
j
=
1
n
=
m
θ
j
2
=
θ
T
θ
\sum_{j=1}^{n=m}θ_j^2=\theta^T\theta
∑j=1n=mθj2=θTθ,并且在计算时用
θ
T
M
θ
\theta^TM\theta
θTMθ代替
θ
T
θ
\theta^T\theta
θTθ,矩阵
M
M
M是根据我们选择的核函数而不同的一个矩阵,这样做可以提高计算效率,修改后的代价函数为:
C
∑
i
=
1
m
[
y
(
i
)
C
o
s
t
1
(
θ
T
f
(
i
)
)
+
(
1
−
y
(
i
)
)
C
o
s
t
0
(
θ
T
f
(
i
)
)
]
+
1
2
θ
T
M
θ
C\sum_{i=1}^m\left[y^{(i)}Cost_1(\theta^Tf^{(i)})+(1-y^{(i)})Cost_0(\theta^Tf^{(i)})\right]+\frac{1}{2}\theta^TM\theta
Ci=1∑m[y(i)Cost1(θTf(i))+(1−y(i))Cost0(θTf(i))]+21θTMθ
理论上讲,我们也可以在逻辑回归中使用核函数,但是上面使用 𝑀来简化计算的方法不适用于逻辑回归,因此计算将非常耗费时间。
在此,我们不介绍最小化支持向量机的代价函数的方法,你可以使用现有的软件包(如
liblinear,libsvm 等)。在使用这些软件包最小化我们的代价函数之前,我们通常需要编写核
函数,并且如果我们使用高斯核函数,那么在使用之前进行特征缩放是非常必要的。
另外,支持向量机也可以不使用核函数,不使用核函数又称为线性核函数(linear kernel),
当我们不采用非常复杂的函数,或者我们的训练集特征非常多而实例非常少的时候,可以采
用这种不带核函数的支持向量机。
下面是支持向量机的两个参数𝐶和𝜎的影响:
𝐶 = 1/𝜆
𝐶 较大时,相当于𝜆较小,可能会导致过拟合,高方差;
𝐶 较小时,相当于𝜆较大,可能会导致低拟合,高偏差;
𝜎较大时,可能会导致低方差,高偏差;
𝜎较小时,可能会导致低偏差,高方差。
来自https://www.cnblogs.com/sl0309/p/10499278.html
上图是两个参数对结果的影响
12-6 使用支持向量机(SVM)
- 使用SVM软件库来计算 θ \theta θ的值
- 我们需要选择C的值
- 我们需要选择核函数
- 线性内核函数:不选择核函数,直接使用线性拟合,可以在特征数量n很大,而样本数量m很小的情况下使用
- 高斯核函数:可以在样本数量m很大,特征数量n很小的情况下使用,能够拟合出非线性边界
使用非线性核函数时,需要将特征值归一化
核函数需要满足默塞尔定理Mercer’s theorem
13 聚类算法
13-1 无监督学习
无监督学习的数据集是一堆不带标签的数据,他们没有
y
y
y的值,只有
x
x
x的值
13-2 K均值(K-means)算法
K均值算法的第一步(簇分配):确定两个聚类中心(图中蓝色叉和红色叉),遍历每一个样本(图中绿点),判断离哪个聚类中心更近,将样本分为两个簇,分完之后如下图
K均值算法的第二步(移动聚类中心):计算每一簇中所有点的均值,并将聚类中心移动到该均值处,移动后如下图
然后再重复第一步判断每一个样本离哪个聚类中心近,并改变他的颜色(分类),改变后再重复第二步。
这样不断重复,得到最终结果
这样就可以说K均值已经聚合了
输入一个
K
K
K表示想要将数据分为几类,输入不带标签的训练集
设训练集是一个n维向量(按照惯例不考虑
x
0
=
1
x_0=1
x0=1这一项)
如上图
用
K
K
K表示想要将数据分为
K
K
K类
用
μ
k
\mu_k
μk表示第
k
k
k个聚类中心的位置(他是一个向量/矩阵),随机初始化获得
用
c
(
i
)
c^{(i)}
c(i)表示样本中第
i
i
i个点距离最近的那个聚类中心的下标,即第
i
i
i个样本距离第
c
(
i
)
c^{(i)}
c(i)个聚类中心最近,即第
i
i
i个样本属于第
c
(
i
)
c^{(i)}
c(i)个聚类中心,求法如上图中蓝色笔迹
求完上述值后,计算每一个聚类中心包含的点的均值,赋值给对应的
μ
k
\mu_k
μk,此时已经得到新的聚类中心的位置
如果有一个没有点的聚类中心,一般直接移除,这样最后会得到K-1类;但如果确实是需要分为K类,那么就将那个没有点的聚类中心重新随机初始化
如上图,有时K均值算法也运用于不能很明显的分类的数据集,如收集了很多人的身高、体重作为数据集,可以看出这些数据基本是连续的,要将其分为S、M、L三类,用聚类算法,也能分为三类。聚类算法也可用于市场的分割
13-3 优化目标
μ
c
(
i
)
\mu_{c^{(i)}}
μc(i)表示第
i
i
i个样本所属聚类中心的位置
K均值聚类算法的代价函数(优化目标函数)为
J
(
c
(
1
)
,
.
.
.
,
c
(
m
)
,
μ
1
,
.
.
.
,
μ
K
)
=
1
m
∑
i
=
1
m
∥
x
(
i
)
−
μ
c
(
i
)
∥
2
J(c^{(1)},...,c^{(m)},\mu_1,...,\mu_K)=\frac{1}{m}\sum_{i=1}^m\Vert x^{(i)}-\mu_{c^{(i)}}\Vert^2
J(c(1),...,c(m),μ1,...,μK)=m1i=1∑m∥x(i)−μc(i)∥2
表示的是每一个样本的位置与它所属的聚类中心位置作差,取范数,再平方,所有共m个样本加起来再求平均数
这个代价函数有时也称为失真代价函数(the distortion cost function)或K均值算法的失真
13-4 随机初始化(K均值聚类算法)
- 从训练集中随机挑选
K
K
K个样本,让第一到第K的聚类中心等于刚刚随机出来的
K
K
K个样本
如上图,由于是随机挑选的聚类中心,所以结果可能是全局最优(如上图上面的坐标系),也可能落在局部最优上(如上图下面两个坐标系)
所以,采用多次随机初始化的方法寻找全局最优
如上图,多次随机初始化的方法为:
运行50-1000次K均值聚类算法,可以得到许多不同的代价函数的值,取最小的那个就是最优的聚类
如果K=2到10,那么多次随机初始化可以明显改进聚类算法效果,如果大于10,多次运行可能不会有特别明显的改善
13-5 如何选择聚类数量K
一般是手动选择
- 如上图,运用肘部法则,坐标系x轴为聚类数量K,坐标系y轴为代价函数的值,绘制曲线后,如左侧的坐标系,能看到曲线在K=3处由很高的斜率转为了很低的斜率,这一点认为是“肘部”,选择K=3是合适的,但也有可能曲线是如右边坐标系的图像,不能明确地找出合适的聚类数量
或者另外一种方法,根据下游目的来手动选择聚类数量
14 降维
14-1 目标I:数据压缩
如上图,将数据从二维压缩为一维,以表示同一个物体的长度为例,
x
1
x_1
x1为用厘米表示,
x
2
x_2
x2为用英尺表示,由于四舍五入产生的误差,坐标系中的样本坐标没有完全练成一条直线,对其进行线性拟合,得到一条直线,让这些点投影在另一条坐标轴
z
z
z上,这样,可以用一个一维的数字
z
(
i
)
z^{(i)}
z(i)来表示原来的一个二维向量
x
(
i
)
x^{(i)}
x(i)
如上图,将数据从三维压缩为二维,(在实际应用中可能是将10000维的数据压缩为1000维),空间中所有的点几乎都在一个平面的周围,将所有的点投射到这个平面上,用
z
1
z_1
z1和
z
2
z_2
z2来表示平面的两个坐标轴,这样就把一个三维空间压缩为二维平面,原来的数据用一个二维向量
z
(
i
)
z^{(i)}
z(i)即可表示,
z
(
i
)
z^{(i)}
z(i)中有两个特征
z
1
(
i
)
z_1^{(i)}
z1(i)和
z
2
(
i
)
z_2^{(i)}
z2(i)
降维后的数据可以提高学习算法的运算效率并且节省磁盘存储空间
14-2 目标II:可视化
一般取k=2 or k=3来可视化数据集
14-3 主成分分析方法(PCA)
有这样的一个数据集,这个数据集含有二维实数空间内的样本,假设我想对数据进行降维,从二维降到一维,也就是说,我需要找到 一条直线,将数据投影到这条直线上
上图中红线是一个不错的选择,因为每个点投影到直线上的距离(蓝线)都很短
所以,PCA就是寻找一个低维的东西(在这个例子中是一条直线),让数据投射在上面时的距离的平和最小,这个距离被称为投影误差
在使用PCA钱,需要先进行均值归一化和特征规范化,使得特征
x
1
x_1
x1和
x
2
x_2
x2均值为0,数值在可比较的范围之内
由二维到一维时,找到一个向量即可,三维到二维时,需要找到2个向量组成一个平面,更高维时,需要找到k个向量,让样本投影到这k个向量展开的线性子空间上
上图解释了PCA与线性回归的不同:
- 线性回归是左侧的坐标系,他对一条条竖直的(与y轴平行的)蓝线求和,因为线性回归计算出的误差是指预测的y值与实际y值之间的差
- PCA是右侧的坐标系,他对一条条垂直于降维后的直线(在这里是直线)的蓝线求和,因为PCA计算的是实际的点与降维后直线的距离,实际的点是投影上去的
14-4 主成分分析算法(PCA)
首先进行数据预处理,进行均值标准化,可能要进行特征缩放
均值标准化:
- 按照上图先求出某个特征在所有样本中的平均值 μ j \mu_{j} μj,公式为 μ j = 1 m ∑ i = 1 m x j ( i ) \mu_{j}=\frac{1}{m} \sum_{i=1}^{m} x_{j}^{(i)} μj=m1∑i=1mxj(i)
- 然后把每一个旧的
x
j
(
i
)
x_{j}^{(i)}
xj(i)替换成
x
j
−
μ
j
x_{j}-\mu_{j}
xj−μj,这样每一个特征的均值都为0
先计算 Σ \Sigma Σ矩阵(协方差),计算公式为: Σ = 1 m ∑ i = 1 n ( x ( i ) ) ( x ( i ) ) T \Sigma=\frac{1}{m} \sum_{i=1}^{n}\left(x^{(i)}\right)\left(x^{(i)}\right)^{T} Σ=m1∑i=1n(x(i))(x(i))T,表示为矩阵形式为 Σ = 1 m X T X \Sigma=\frac{1}{m} X^TX Σ=m1XTX
然后用软件库调用svd算法得到矩阵 U U U, U U U是一个n×n的矩阵,这里的n=m,因为共有n=m个样本数量,取矩阵 U U U的前k列就是要降维成的k维空间里的k个向量(空间是几维就需要几个向量来表示这个空间,如三维降二维时需要两个向量来表示二维空间)
如上图,把刚刚取出的k个列向量组成的矩阵命名为 U r e d u c e U_{reduce} Ureduce,则得到的低维(k维)的数据集 z ( i ) = U r e d u c e T x ( i ) z^{(i)}=U_{reduce}^Tx^{(i)} z(i)=UreduceTx(i),该数据集是一个k维向量
14-5 压缩重现(解压缩)
之前进行了这样的运算:
z
=
U
r
e
d
u
c
e
T
x
z=U_{reduce}^Tx
z=UreduceTx
其中
z
z
z是新得到的一维向量,
x
x
x是原来的二维向量,
U
r
e
d
u
c
e
T
U_{reduce}^T
UreduceT是通过svd算法得出的
现在要恢复二维,进行这样的运算:
x
a
p
p
o
x
=
U
r
e
d
u
e
e
z
x_{appox }=U_{ reduee } z
xappox=Uredueez
14-6 选择主成分数量
上图中分子的式子称为平均平方映射误差,分母称为数据的总变差(它的意思是 “平均来看 我的训练样本 距离零向量多远? 平均来看 我的训练样本距离原点多远?),分数计算的结果为降维后的新数据与原数据的差距有多大
比如假设结果
≤
0.01
\le0.01
≤0.01,则可以说有1%的差异,这个数字比较典型的取值为0.01、0.05、0.10甚至也可能是0.15
上图左侧是计算合适的k值的方法,这里假设与原数据有小于等于1%的误差
可以直接调用svd算法,其中输出的
S
S
S矩阵是一个对角阵
用公式
1
−
∑
i
=
1
k
s
i
i
∑
i
=
1
n
s
i
i
⩽
0.01
1-\frac{\sum_{i=1}^{k} s_{i i}}{\sum_{i=1}^{n} s_{i i}} \leqslant 0.01
1−∑i=1nsii∑i=1ksii⩽0.01,直接判断这个公式是否成立即可,找到让这个公式成立的k的值就是合适的k的取值,或者用
∑
i
=
1
k
s
i
i
∑
i
=
1
n
s
i
i
⩾
0.99
\frac{\sum_{i=1}^{k} s_{i i}}{\sum_{i=1}^{n} s_{ii}} \geqslant 0.99
∑i=1nsii∑i=1ksii⩾0.99来判断也是一样的
- 即使要手动选择k值,计算出差异值也可以帮助向别人解释你实现的 PCA 的性能 的一个好方法 ,熟悉 PCA 的人们 就可以通过它 来更好地理解 你用来代表原始数据的 100维数据 近似得有多好 因为有99%的差异性被保留了
14-7 应用PCA的建议
在使用监督学习时,也可以运用PCA来增加运算效率
- 先将 x ( 1 ) , x ( 2 ) , … , x ( m ) x^{(1)}, x^{(2)}, \ldots, x^{(m)} x(1),x(2),…,x(m)从原来的样本中抽出,运用PCA算法将其降维得到 z ( 1 ) , z ( 2 ) , … , z ( m ) z^{(1)}, z^{(2)}, \ldots, z^{(m)} z(1),z(2),…,z(m),然后把降维后的 z ( 1 ) , z ( 2 ) , … , z ( m ) z^{(1)}, z^{(2)}, \ldots, z^{(m)} z(1),z(2),…,z(m)替换到原来的样本中,与y一一对应,然后进行监督学习的算法
- 注意:PCA只能在训练集中使用,不能用于交叉验证集和测试集,从训练集得到了 x x x到 z z z的对应关系后,可将这个对应关系应用到交叉验证集和测试集
- 不要用PCA来防止过拟合,更好的方法是用正则化
- PCA是在丢失一定精度的境况下提高运算效率,它在降维时没有与y相关
- 在使用PCA之前首先尝试使用原数据进行运算,只有在运算速度过慢、占用内存太大、占用磁盘太大、原数据无法成功计算时才使用PCA
15 异常检测
15-1 问题动机
以飞机发动机的异常检测为例,
x
1
x_1
x1和
x
2
x_2
x2分别表示发动机的两个特征,先有一堆数据集表示正常的发动机(如上图红色叉),可以认为越靠近圆圈中间越正常,现在有一个新的发动机
x
t
e
s
t
x_{test}
xtest,将他放进坐标系中比较,越靠近中心表示
p
(
x
test
)
p\left(x_{\text {test }}\right)
p(xtest )越大,设定一个阈值
ε
\varepsilon
ε,如果
p
(
x
test
)
⩾
ε
p\left(x_{\text {test }}\right) \geqslant \varepsilon
p(xtest )⩾ε则表示该新发动机正常,如果
p
(
x
test
)
<
ε
p\left(x_{\text {test }}\right) < \varepsilon
p(xtest )<ε则表示发动机异常
异常检测常被用来进行用户的欺诈监测(检测异常的用户)
15-2 高斯分布(正态分布)
- x ∼ N ( μ , σ 2 ) x \sim \mathcal{N}\left(\mu, \sigma^{2}\right) x∼N(μ,σ2)
- x x x是实数, ∼ \sim ∼表示以…分布, N \mathcal{N} N表示按正态分布, μ \mu μ表示均值, σ 2 \sigma^{2} σ2表示方差
- 如上图正态分布曲线(是一条钟形曲线),纵轴表示取到的概率, μ \mu μ决定曲线中心的位置,标准差 σ \sigma σ决定曲线的宽度
高斯分布曲线的公式:
p
(
x
;
μ
,
σ
2
)
=
1
2
π
σ
exp
(
−
(
x
−
μ
)
2
2
σ
2
)
p\left(x ; \mu, \sigma^{2}\right) =\frac{1}{\sqrt{2 \pi} \sigma} \exp \left(-\frac{(x-\mu)^{2}}{2 \sigma^{2}}\right)
p(x;μ,σ2)=2πσ1exp(−2σ2(x−μ)2)
- 高斯分布曲线的积分=1(即上图红色阴影部分面积)
如上图,现有一个无标签数据集,可以看出数据集在中间概率大,两侧概率小,假设满足正态分布,进行参数估计
假设数据集满足正态分布:
x
(
i
)
∼
N
(
μ
,
σ
2
)
x^{(i)} \sim \mathcal{N}\left(\mu, \sigma^{2}\right)
x(i)∼N(μ,σ2)
参数估计公式为:
μ
=
1
m
∑
i
=
1
m
x
(
i
)
\mu=\frac{1}{m} \sum_{i=1}^{m} x^{(i)}
μ=m1i=1∑mx(i)
σ
2
=
1
m
∑
i
=
1
m
(
x
(
i
)
−
μ
)
2
\sigma^{2}=\frac{1}{m} \sum_{i=1}^{m}\left(x^{(i)}-\mu\right)^{2}
σ2=m1i=1∑m(x(i)−μ)2
求方差的公式中
1
m
\frac{1}{m}
m1也可能是
1
m
−
1
\frac{1}{m-1}
m−11,在机器学习中,这两种公式差距不大
15-3 算法
密度估计问题
p
(
x
)
p(x)
p(x)表示特征
x
x
x出现的概率
假设所有特征均满足正态分布
给出概率
p
(
x
)
=
p
(
x
1
;
μ
1
,
σ
1
2
)
p
(
x
2
;
μ
2
,
σ
2
2
)
p
(
x
3
;
μ
3
,
σ
3
2
)
⋯
p
(
x
n
;
μ
n
,
σ
n
2
)
=
∏
j
=
1
n
p
(
x
j
;
μ
j
,
σ
j
2
)
\begin{array}{l} p(x)\\ =p\left(x_{1} ; \mu_{1}, \sigma_{1}^{2}\right) p\left(x_{2} ; \mu_{2}, \sigma_{2}^{2}\right) p\left(x_{3} ; \mu_{3}, \sigma_{3}^{2}\right) \cdots p\left(x_{n} ; \mu_{n}, \sigma_{n}^{2}\right) \\ =\prod_{j=1}^{n} p\left(x_{j} ; \mu_{j}, \sigma_{j}^{2}\right) \end{array}
p(x)=p(x1;μ1,σ12)p(x2;μ2,σ22)p(x3;μ3,σ32)⋯p(xn;μn,σn2)=∏j=1np(xj;μj,σj2)
异常检测算法的流程如上图
15-4 开发和评估异常检测系统
假设有一个带标签的数据集,选取出正常的样本去掉标签作为训练集,得出异常检测算法,然后用交叉验证集(带标签)来验证,用测试集(带标签)来测试
上图是以发动机检测为例的训练集、交叉验证集和测试集的分法
由于数据集中的数据可能非常倾斜,所以可能需要计算F值来判断算法的效果,或者用F值来决定怎样的
ε
\varepsilon
ε是合适的
15-5 异常检测vs监督学习
异常检测算法通常用于:
- 有很少数量的正样本(这里以异常的飞机发动机为例),有很大数量的负样本(这里以正常的飞机发动机为例)
- 学习算法很难从极少数数量的正样本中学习出飞机发动机的异常之处,但能根据负样本学习出正态分布曲线
- 未来的异常发动机出现的异常特征难以预测,可能与当前的正样本中的异常特征完全不同
监督学习算法通常用于:
- 有很大数量的正样本和负样本
- 有足够的的正样本数量来让学习算法找到特征,并且未来出现的正样本的特征与目前已有的样本的特征相似
样本数量与某类情况出现概率没关系(即使一类情况出现概率为99%,另一类概率为1%),只要同时有大量的正样本和负样本,就能用监督学习算法,比如癌症预测
15-6 选择要使用的特征
- 如果数据像上图第一行的坐标系一样看起来像正态分布的话,可以直接用正态分布
- 如果数据像上图第二行左侧坐标系,不符合正态分布的话,可以对特征进行转换,比如这里用 l o g ( x ) log(x) log(x)来替换特征值,让新得到的曲线像正态分布,然后用正态分布
- 除了用
l
o
g
(
x
)
log(x)
log(x)之外,也可以用
l
o
g
(
x
+
c
)
log(x+c)
log(x+c)c是常数、
x
1
2
x^{\frac{1}{2}}
x21、
x
1
3
x^{\frac{1}{3}}
x31等等
- 如果如上图一个绿色的异常样本混在了正常样本中,算法没能将其挑出来
- 可以寻找/创造一个新的特征让这个异常样本与其他正常样本区别开来
举例:
服务器CPU负载量和网络流量应该是线性关系的(一起变大,一起变小)
如果某一台服务器陷入了死循环,就会导致CPU负载很大而网络流量很小的情况
这种情况下要找出异常可以创建一个新的特征 x 5 = C P U 负 载 网 络 流 量 x_5=\frac{CPU负载}{网络流量} x5=网络流量CPU负载,这样就能捕捉到异常。或者是CPU负载的平方也可以
15-7 多元高斯分布
以服务器的异常为例,上图中绿色样本在两轴中的概率都不低,但很明显在左侧坐标系中他是一个异常样本,算法不能意识到左侧坐标系中的椭圆内的才是正常样本,而默认是以样本中心为圆心,按圆向外概率递减
所以要使用多元高斯分布↓
将这两个特征合起来考虑,一个n维向量
μ
\mu
μ和一个n×n的协方差矩阵
Σ
\Sigma
Σ作为多元高斯分布的参数,公式为:
p
(
x
;
μ
,
Σ
)
=
1
(
2
π
)
n
2
∣
Σ
∣
1
2
exp
(
−
1
2
(
x
−
μ
)
⊤
Σ
−
1
(
x
−
μ
)
)
p(x ; \mu, \Sigma)= \frac{1}{(2 \pi)^{\frac{n}{2}}|\Sigma|^{\frac{1}{2}}} \exp \left(-\frac{1}{2}(x-\mu)^{\top} \Sigma^{-1}(x-\mu)\right)
p(x;μ,Σ)=(2π)2n∣Σ∣211exp(−21(x−μ)⊤Σ−1(x−μ))
- 其中 ∣ Σ ∣ |\Sigma| ∣Σ∣是矩阵 Σ \Sigma Σ的行列式
- μ \mu μ表示的是高斯分布图像中的峰值的位置,这里第一个数是特征 x 1 x_1 x1的位置,第二个数是特征 x 2 x_2 x2的位置
- μ \mu μ和 Σ \Sigma Σ的计算公式会在下一节给出
μ
\mu
μ对图像的影响如上图所示
15-8 使用多元高斯分布的异常检测
μ
\mu
μ和
Σ
\Sigma
Σ的计算公式如上图
首先计算出
μ
\mu
μ和
Σ
\Sigma
Σ的值,然后代入到多元高斯分布计算公式,计算出概率,然后将概率与
ε
\varepsilon
ε比较判断正常or异常
如上图,原来的高斯分布计算出的正态分布图像是一种特殊的多元高斯分布图像,他的椭圆是与轴平行的,而多元高斯分布可以生成一个不与轴平行的椭圆图像
原始高斯分布模型与多元高斯分布的应用区别:
- 原来的可能需要手动创造特征来正确识别异常项,而多元高斯分布不需要,它能自动捕捉这些特征
- 原来的计算量较小,当特征量达到n=10000时就需要用原来的了
- 原来的可以在样本数量m很小的情况下正常工作,而多元高斯分布需要保证m>>n,一般是m ≥ \ge ≥ 10n,否则矩阵 Σ \Sigma Σ会是一个不可逆矩阵
- 在多元高斯分布中,如果几个特征之间是线性相关的,也会导致矩阵 Σ \Sigma Σ会是一个不可逆矩阵,比如 x 1 = x 2 x_1=x_2 x1=x2或者 x 1 = x 2 + x 3 x_1=x_2+x_3 x1=x2+x3,可以通过删除特征 x 1 x_1 x1来解决