吴恩达机器学习
机器学习的定义
什么是机器学习?
机器学习(Machine Learning):是研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。一个程序被认为能从经验E中学习,解决任务 T,达到性能度量值P,当且仅当,有了经验E后,经过P评判, 程序在处理T时的性能有所提升。
机器学习算法
1.监督学习(Supervised Learning)
监督学习(Supervised Learning):对于数据集中每一个样本都有对应的标签(被告知什么是所谓的正确答案),包括回归(regression)和分类(classification)
· 回归(Regression):预测连续的数值输出
· 分类(Classification):预测离散值的输出
2.无监督学习(Unsupervised Learning)
无监督学习(Unsupervised Learning):数据集中没有任何的标签(只知道这里有数据,但不知道这些数据的结构,包括聚类(clustering),比如Google news(收集大量的新闻,将其分成一个个的新闻专题)。
实现公式:[W,s,v] = svd((repmat(sum(x.*x,1),size(x,1),1).*x)*x’)
· SVD:奇异值分解函数
单变量线性回归
模型描述(Model Representation)
·Notation:
m | 训练集的样本数 |
---|---|
x‘s | 输入的变量/特征 |
y’s | 输出的变量/目标变量 |
(x,y) | 一个训练集中的样本 |
(x(i),y((i)) | 第i个训练样本 |
假设函数h(hypothesis):是一个从输入x到输出y的映射,h(x) = θ0 +θ1x。θ0 和θ1都是模型参数
代价函数
代价函数(cost function)
J
(
θ
)
\mathop{J}(θ)
J(θ),通常使用平方误差函数,如下:
J
(
θ
0
,
θ
1
)
=
1
2
m
∑
i
=
1
m
(
h
(
x
(
i
)
)
−
y
(
i
)
)
2
,
m
为
训
练
样
本
数
J(θ_{0},θ_{1}) = \frac{1}{2m} \sum_{i=1}^{m} (h(x^{(i)})-y^{(i)})^{2},m为训练样本数
J(θ0,θ1)=2m1i=1∑m(h(x(i))−y(i))2,m为训练样本数
训练的目标是为了最小化代价函数,即 m i n m i z e θ 0 , θ 1 J ( θ 0 , θ 1 ) 。 \mathop{minmize} \limits_{θ_{0},θ_{1}}J(θ_{0},θ_{1})。 θ0,θ1minmizeJ(θ0,θ1)。
简化一下,当θ0 = 0时,假设函数就时一个过原点的直线,此时h(x) = θ1x。
代价函数的另外一个图形表示是等高图,如图所示:
当你的点离同心椭圆的中心点越近,说明你的拟合更准确
梯度下降
代价函数:
J
(
θ
0
,
θ
1
)
J(θ_{0},θ_{1})
J(θ0,θ1),可以推广到更多元的函数
J
(
θ
0
,
θ
1
,
θ
2
,
.
.
.
θ
n
)
J(θ_{0},θ_{1},θ_{2},...θ_{n})
J(θ0,θ1,θ2,...θn)
目标:
m
i
n
m
i
z
e
θ
0
,
θ
1
J
(
θ
0
,
θ
1
)
。
\mathop{minmize} \limits_{θ_{0},θ_{1}}J(θ_{0},θ_{1})。
θ0,θ1minmizeJ(θ0,θ1)。
设置初始的
θ
0
,
θ
1
θ_{0},θ_{1}
θ0,θ1,然后更新公式:-
θ
j
:
=
θ
j
−
α
∂
∂
θ
j
J
(
θ
0
,
θ
1
)
,
对
于
j
=
0
,
1
时
θ_{j} := θ_{j} -α\frac{\partial}{\partialθ_{j}}J(θ_{0},θ_{1}) ,对于j=0,1时
θj:=θj−α∂θj∂J(θ0,θ1),对于j=0,1时
θ0 和 θ1 是要同时更新的,即在计算完θ0后在计算θ1时,使用的θ0还是计算前的θ0
α
\alpha
α被称为学习速率(learning rate),用来控制下降时幅度多大。
α
\alpha
α如果太小的话,会导致梯度下降的很慢,如果
α
\alpha
α太大的话,梯度下降可能无法收敛甚至发散
线性回归中的梯度下降
凸函数(convex function)
没有局部最优解只有全局最优解
多变量线性回归
n | 特征量的数目 |
---|---|
x(i) | 第i个训练样本输入的特征值 |
xj(i) | 第i个训练样本中的第j个特征值 |
假设函数h(hypothesis):hθ(x) = θ0 +θ1x1+θ2x2+…+θnxn。为了方便起见,设x0 = 1,
从而x = [x0,x1,x2,…,xn]T,
x
∈
ℜ
n
+
1
x \in \Re^{n+1}
x∈ℜn+1,θ = [θ0,θ1,θ2,…,θn]T,
θ
∈
ℜ
n
+
1
\theta \in \Re^{n+1}
θ∈ℜn+1
因此假设函数可以记为
h
θ
(
x
)
=
θ
T
x
h_{\theta}(x) = \theta^{T}x
hθ(x)=θTx
多元梯度下降法
代价函数:
J
(
θ
)
=
1
2
m
∑
i
=
1
m
(
h
(
x
(
i
)
)
−
y
(
i
)
)
2
,
此
时
θ
是
一
个
n
+
1
维
的
向
量
J(\theta) = \frac{1}{2m} \sum_{i=1}^{m} (h(x^{(i)})-y^{(i)})^{2},此时\theta是一个n+1维的向量
J(θ)=2m1i=1∑m(h(x(i))−y(i))2,此时θ是一个n+1维的向量
梯度下降更新公式:
θ
j
:
=
θ
j
−
α
∂
∂
θ
j
J
(
θ
)
,
对
每
个
j
=
0
,
.
.
.
,
n
都
是
同
步
更
新
的
θ_{j} := θ_{j} -α\frac{\partial}{\partialθ_{j}}J(θ) ,对每个j = 0,...,n都是同步更新的
θj:=θj−α∂θj∂J(θ),对每个j=0,...,n都是同步更新的
更精确的:
θ
j
:
=
θ
j
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
j
(
i
)
θ_{j} := θ_{j} -α\frac{1}{m} \sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})x_{j}^{(i)}
θj:=θj−αm1i=1∑m(hθ(x(i))−y(i))xj(i)
特征缩放(Feature Scaling)
目的:确保不同特征的取值都在相近的范围内,这样梯度下降法可以更快的收敛,通常使每个特征都近似的在
−
1
≤
x
i
≤
1
-1\le x_{i} \le 1
−1≤xi≤1之间(不是强制的)
归一化(Mean normalization):
x
i
=
x
i
−
μ
s
i
,
其
中
μ
为
特
征
x
i
的
平
均
值
,
s
i
为
特
征
x
i
的
范
围
(
m
a
x
−
m
i
n
)
(
也
可
是
特
征
i
标
准
差
)
x_{i} = \frac{x_{i} - \mu}{s_{i}},其中\mu为特征x_{i}的平均值,s_{i}为特征x_{i}的范围(max-min)(也可是特征i标准差)
xi=sixi−μ,其中μ为特征xi的平均值,si为特征xi的范围(max−min)(也可是特征i标准差)
学习率(Learning rate)
梯度下降更行公式: θ j : = θ j − α ∂ ∂ θ j J ( θ ) θ_{j} := θ_{j} -α\frac{\partial}{\partialθ_{j}}J(θ) θj:=θj−α∂θj∂J(θ)
- “debugging”:如何确保梯度下降正确运行;
- 选择合适的 α \alpha α,太小会导致收敛慢,太大可能每一次迭代过程中 J ( θ ) J(\theta) J(θ)将会不断的越过最小值,无法收敛
- 在运行梯度下降公式时,尝试不同的 α \alpha α值,(e.g.0.001,0.01,0.1,1…每十倍取一次),对于不同的α值绘制 J ( θ ) J(\theta) J(θ)随着迭代次数变化的函数,找快速下降的。
- 寻找一个合适的较小值和较大值,保证结果和速度的同时选取较大的值,或者稍小的合理值。
特征和多项式回归
例子: 房价预测问题
- 三次函数
- 二次函数(downdowndown)
- 更精确的模型
正规方程(Normal equation)(区别于迭代方法的直接解法)
对代价函数
J
(
θ
)
J(\theta)
J(θ)求偏导并令所有的偏导为零,解出
θ
=
(
X
T
X
)
−
1
X
T
y
\theta = (X^{T}X)^{-1}X^{T}y
θ=(XTX)−1XTy
推导过程
x
(
i
)
=
(
x
0
(
i
)
x
1
(
i
)
x
2
(
i
)
.
.
.
x
n
(
i
)
)
∈
R
n
+
1
,
y
=
(
y
1
y
2
.
.
.
y
m
)
∈
R
m
x^{(i)}=\left( \begin{matrix} x_{0}^{(i)} \\ x_{1}^{(i)}\\ x_{2}^{(i)}\\ .\\ .\\ .\\ x_{n}^{(i)}\\ \end{matrix} \right )\in\R^{n+1}, y = \left( \begin{matrix} y_{1}\\ y_{2}\\ .\\ .\\ .\\ y_{m}\\ \end{matrix} \right )\in\R^{m}
x(i)=⎝⎜⎜⎜⎜⎜⎜⎜⎜⎜⎛x0(i)x1(i)x2(i)...xn(i)⎠⎟⎟⎟⎟⎟⎟⎟⎟⎟⎞∈Rn+1,y=⎝⎜⎜⎜⎜⎜⎜⎛y1y2...ym⎠⎟⎟⎟⎟⎟⎟⎞∈Rm
- 梯度下降和正规方程之间比较:
如果特征的数量不是很大(approximate <10000)时,正规方程通常时很好的;如果特征量很多的的话,梯度下降会好一点
正规方程在矩阵不可逆的情况下的解决方式
逻辑回归(Logistic Regression)
假设表示(Hypothesis resprentation)
逻辑回归模型:
h
θ
(
x
)
h_{\theta}(x)
hθ(x) ,让
0
≤
h
θ
(
x
)
≤
1
0 \le h_{\theta}(x) \le1
0≤hθ(x)≤1
在线性回归中,
h
θ
(
x
)
=
θ
T
x
h_{\theta}(x) = \theta^{T}x
hθ(x)=θTx,在逻辑回归中令
h
θ
(
x
)
=
g
(
θ
T
x
)
h_{\theta}(x) = g(\theta^{T}x)
hθ(x)=g(θTx),,将
θ
T
x
\theta^{T}x
θTx带入g(x)得:
h
θ
(
x
)
=
1
1
+
e
−
θ
T
x
h_{\theta}(x) = \frac{1}{1+e^{-\theta^{T}x}}
hθ(x)=1+e−θTx1
其中
g
(
z
)
=
1
1
+
e
−
z
g(z) = \frac{1}{1+e^{-z}}
g(z)=1+e−z1被称为Sigmod函数,也叫Logistic函数。
h
θ
(
x
)
=
P
(
y
=
1
∣
x
;
θ
)
h_{\theta}(x) = P(y=1|x;\theta)
hθ(x)=P(y=1∣x;θ) ( 对于输入的x,y=1的概率估计)
决策界限(Decision Boundary)
Suppose predict:
"
y
=
1
"
i
f
h
θ
(
x
)
≥
0.5
"y = 1"\ if \; h_{\theta}(x) \ge 0.5
"y=1" ifhθ(x)≥0.5
predict:
"
y
=
0
"
i
f
h
θ
(
x
)
<
0.5
"y = 0" \ if \ h_{\theta}(x) < 0.5
"y=0" if hθ(x)<0.5
h
θ
(
x
)
≥
0.5
⟶
z
≥
0.5
⟶
θ
T
x
≥
0
h_{\theta}(x) \ge 0.5 \ \longrightarrow \ z\ge 0.5 \ \longrightarrow \ \theta^{T}x\ge0
hθ(x)≥0.5 ⟶ z≥0.5 ⟶ θTx≥0
h
θ
(
x
)
<
0.5
⟶
z
≤
0.5
⟶
θ
T
x
<
0
h_{\theta}(x) < 0.5 \ \longrightarrow \ z\le 0.5 \ \longrightarrow \ \theta^{T}x < 0
hθ(x)<0.5 ⟶ z≤0.5 ⟶ θTx<0
定义
θ
T
x
=
0
\theta^{T}x=0
θTx=0为决策边界,注意决策边界是假设函数的属性,取决于其参数
θ
\theta
θ,不是数据集的属性
代价函数
J
(
θ
)
=
1
m
∑
i
=
1
m
C
o
s
t
(
h
θ
(
x
(
i
)
)
,
y
(
i
)
)
J(\theta) = \frac{1}{m} \sum_{i=1}^{m} Cost(h_{\theta}(x^{(i)}),y^{(i)})
J(θ)=m1i=1∑mCost(hθ(x(i)),y(i))
Logistic regression cost function:
C
o
s
t
(
h
θ
(
x
)
,
y
)
=
{
−
l
o
g
(
h
θ
(
x
)
)
i
f
y
=
1
−
l
o
g
(
1
−
h
θ
(
x
)
)
i
f
y
=
0
Cost(h_{\theta}(x),y)=\left\{ \begin{aligned} -log(h_{\theta}(x)) \quad if \ y = 1 \\ -log(1-h_{\theta}(x)) \quad if \ y = 0 \end{aligned} \right.
Cost(hθ(x),y)={−log(hθ(x))if y=1−log(1−hθ(x))if y=0
注意:y永远只能是1/0
简化代价函数
我们可以将
C
o
s
t
(
h
θ
(
x
)
,
y
)
Cost(h_{\theta}(x),y)
Cost(hθ(x),y)写成:
−
y
l
o
g
(
h
θ
(
x
)
)
−
(
1
−
y
)
l
o
g
(
1
−
h
θ
(
x
)
)
-ylog(h_{\theta}(x))-(1-y)log(1-h_{\theta}(x))
−ylog(hθ(x))−(1−y)log(1−hθ(x))
所以根据最大似然法:
J
(
θ
)
=
J
(
θ
)
=
1
m
∑
i
=
1
m
C
o
s
t
(
h
θ
(
x
(
i
)
)
,
y
(
i
)
)
=
−
1
m
∑
i
=
1
m
(
y
(
i
)
l
o
g
(
h
θ
(
x
(
i
)
)
)
+
(
1
−
y
(
i
)
)
l
o
g
(
1
−
h
θ
(
x
(
i
)
)
)
)
J(\theta) = J(\theta) = \frac{1}{m} \sum_{i=1}^{m} Cost(h_{\theta}(x^{(i)}),y^{(i)}) = -\frac{1}{m} \sum_{i=1}^{m} ( y^{(i)}log(h_{\theta}(x^{(i)})) + (1-y^{(i)})log(1-h_{\theta}(x^{(i)})))
J(θ)=J(θ)=m1i=1∑mCost(hθ(x(i)),y(i))=−m1i=1∑m(y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i))))
拟合参数:
m
i
n
θ
J
(
θ
)
\mathop{min} \limits_{\theta} J(\theta)
θminJ(θ)
梯度下降
∂
∂
θ
j
J
(
θ
)
=
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
j
(
i
)
,
对
每
个
j
=
0
,
.
.
.
,
n
都
是
同
步
更
新
的
\frac{\partial}{\partialθ_{j}}J(θ) = \frac{1}{m} \sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})x_{j}^{(i)} ,对每个j = 0,...,n都是同步更新的
∂θj∂J(θ)=m1i=1∑m(hθ(x(i))−y(i))xj(i),对每个j=0,...,n都是同步更新的
θ
j
:
=
θ
j
−
α
∂
∂
θ
j
J
(
θ
)
=
θ
j
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
j
(
i
)
θ_{j} := θ_{j} - \alpha \frac{\partial}{\partialθ_{j}}J(θ)= θ_{j} -α\frac{1}{m} \sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})x_{j}^{(i)}
θj:=θj−α∂θj∂J(θ)=θj−αm1i=1∑m(hθ(x(i))−y(i))xj(i)
高级优化算法
1.共轭梯度法
2.BFGS
- L-BFGS
- 优点:无需人工选择参数α \alphaα;运算速度比梯度下降更快
- 缺点:更加复杂
多元分类(Multiclass classification)
e.g. 天气会有晴天、多云、雨天、雪天
One-vs-all:
训练出每个
h
θ
(
i
)
(
x
)
h_{\theta}^{(i)}(x)
hθ(i)(x)后,对一个新的输入,找哪个假设函数的值最大,说明这个数据更符合这一个
正则化(Regularization)
过拟合和欠拟合(overfitting&overfitting)
- 欠拟合:
欠拟合,高偏差(high bias):说明没有很好的拟合训练数据
解决办法:增加特征,如增加多项式 - 过拟合:
过拟合,高方差(high variance):拟合训练数据过于完美, J ( θ ) ≈ 0 J(\theta)\approx0 J(θ)≈0,导致模型的泛化能力很差,对于新样本不能准确预测;
解决办法: - 减少特征个数
a)人工保留合适的特征
b)采用模型选择算法(会自动选择哪些变量留下) - 正规化
a)保留所有特征,减小参数 θ j \theta_j θj的维度/大小
代价函数(Cost function)
Regularization:
对于参数值
θ
0
,
θ
1
.
.
.
,
θ
n
\theta_{0},\theta_{1}...,\theta_{n}
θ0,θ1...,θn其值都比较小,那么我们可以:1.有一个更简单的假设模型(因为在某些参数趋于时,函数会更趋向于一个更低次的函数)。2.更不容易出现过拟合问题
线性回归代价函数:
对
θ
j
\theta_{j}
θj加入惩罚项,将除了
θ
0
\theta_{0}
θ0之外的所有参数值都进行缩小:
J
(
θ
)
=
1
2
m
[
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
+
λ
∑
j
=
1
m
θ
j
2
]
,
不
对
θ
0
进
行
惩
罚
J(\theta) = \frac{1}{2m}[ \sum_{i=1}^{m} (h_{\theta}(x^{(i)})-y^{(i)})^{2}+\lambda\sum_{j=1}^{m}\theta_{j}^{2}] ,不对\theta_{0}进行惩罚
J(θ)=2m1[i=1∑m(hθ(x(i))−y(i))2+λj=1∑mθj2],不对θ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
m
θ
j
2
,
不
对
θ
0
进
行
惩
罚
J(\theta) = -\frac{1}{m} \sum_{i=1}^{m} ( y^{(i)}log(h_{\theta}(x^{(i)})) + (1-y^{(i)})log(1-h_{\theta}(x^{(i)})))+\frac{\lambda}{2m}\sum_{j=1}^{m}\theta_{j}^{2} ,不对\theta_{0}进行惩罚
J(θ)=−m1i=1∑m(y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i))))+2mλj=1∑mθj2,不对θ0进行惩罚
拟合参数::
m
i
n
θ
J
(
θ
)
\mathop{min} \limits_{\theta}J(\theta)
θminJ(θ)
线性回归和逻辑回归的正则化
线性回归
为社么单独把
θ
0
\theta_{0}
θ0拿出来?因为正则化不惩罚
θ
0
\theta_{0}
θ0
逻辑回归
样子和之前的线性回归梯度下降算法一样,知识
h
θ
(
x
)
h_{\theta}(x)
hθ(x)是逻辑回归中的假设函数
神经网络
模型展示
- θ \theta θ既可以被叫做‘’权重‘,也可被叫做’参数‘’
- x0 == 1,可以画出也可以不画出
上图代表单个的神经元。神经网络即是一组神经元。典型的三层神经网络如下图所示:
- 第一层就叫做输入层
- 最后一层叫做输出层
- 除了输入层和输出层之外的其他层都叫隐藏层
详细解释:
a
i
(
j
)
:
第
j
层
的
单
元
i
的
激
活
项
。
(
“
a
c
t
i
v
a
t
i
o
n
o
f
u
n
i
t
i
i
n
l
a
y
e
r
j
”
)
(
激
活
项
就
是
指
由
一
个
具
体
的
神
经
元
计
算
并
输
出
的
值
)
a _{i}^{(j)} :第j层的单元i的激活项。(“activation\ of \ unit \ i\ in \ layer \ j”)(激活项就是指由一个具体的神经元计算并输出的值)
ai(j):第j层的单元i的激活项。(“activation of unit i in layer j”)(激活项就是指由一个具体的神经元计算并输出的值)
Θ
(
j
)
:
第
j
层
(
u
n
i
t
s
:
s
j
)
到
第
j
+
1
层
(
u
n
i
t
s
:
s
j
+
1
)
的
权
重
矩
阵
,
维
数
:
s
j
+
1
×
(
s
j
+
1
)
\Theta^{(j)}:第j层(units: s_{j} )到第j + 1层(units: s_{j+1})的权重矩阵,维数:s_{j+1}\times (s_j+1)
Θ(j):第j层(units:sj)到第j+1层(units:sj+1)的权重矩阵,维数:sj+1×(sj+1)
a
1
(
2
)
=
g
(
Θ
10
(
1
)
x
0
+
Θ
11
(
1
)
x
1
+
Θ
12
(
1
)
x
2
+
Θ
13
(
1
)
x
3
)
a_{1}^{(2)} = g(\Theta_{10}^{(1)}x_{0}+\Theta_{11}^{(1)}x_{1}+\Theta_{12}^{(1)}x_{2}+\Theta_{13}^{(1)}x_{3})
a1(2)=g(Θ10(1)x0+Θ11(1)x1+Θ12(1)x2+Θ13(1)x3)
a
2
(
2
)
=
g
(
Θ
20
(
1
)
x
0
+
Θ
21
(
1
)
x
1
+
Θ
22
(
1
)
x
2
+
Θ
23
(
1
)
x
3
)
a_{2}^{(2)} = g(\Theta_{20}^{(1)}x_{0}+\Theta_{21}^{(1)}x_{1}+\Theta_{22}^{(1)}x_{2}+\Theta_{23}^{(1)}x_{3})
a2(2)=g(Θ20(1)x0+Θ21(1)x1+Θ22(1)x2+Θ23(1)x3)
a
3
(
2
)
=
g
(
Θ
30
(
1
)
x
0
+
Θ
31
(
1
)
x
1
+
Θ
32
(
1
)
x
2
+
Θ
33
(
1
)
x
3
)
a_{3}^{(2)} = g(\Theta_{30}^{(1)}x_{0}+\Theta_{31}^{(1)}x_{1}+\Theta_{32}^{(1)}x_{2}+\Theta_{33}^{(1)}x_{3})
a3(2)=g(Θ30(1)x0+Θ31(1)x1+Θ32(1)x2+Θ33(1)x3)
h
θ
(
x
)
=
a
1
(
3
)
=
g
(
Θ
10
(
2
)
a
0
(
2
)
+
(
Θ
11
(
2
)
a
1
(
2
)
+
(
Θ
12
(
2
)
a
2
(
2
)
+
(
Θ
13
(
2
)
a
3
(
2
)
)
h_{\theta}(x) = a_{1}^{(3)} = g(\Theta_{10}^{(2)}a_{0}^{(2)}+(\Theta_{11}^{(2)}a_{1}^{(2)}+(\Theta_{12}^{(2)}a_{2}^{(2)}+(\Theta_{13}^{(2)}a_{3}^{(2)})
hθ(x)=a1(3)=g(Θ10(2)a0(2)+(Θ11(2)a1(2)+(Θ12(2)a2(2)+(Θ13(2)a3(2))
神经网络前向传播
简单的例子
多元分类
代价函数
L
=
神
经
网
络
的
总
层
数
L = 神经网络的总层数
L=神经网络的总层数
s
l
=
在
第
l
层
中
总
的
计
算
单
元
数
(
不
包
括
偏
差
单
元
)
s_{l} = 在第l层中总的计算单元数(不包括偏差单元)
sl=在第l层中总的计算单元数(不包括偏差单元)
逻辑回归的代价函数:
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(\theta) = -\frac{1}{m}[ \sum_{i=1}^{m} y^{(i)}log(h_{\theta}(x^{(i)}) + (1-y^{(i)})log(1-h_{\theta}(x^{(i)}))]+\frac{\lambda}{2m} \sum_{j = 1}^{n}\theta_{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
神经网络的代价函数:
h
Θ
(
x
)
∈
ℜ
K
,
(
h
Θ
(
x
)
)
i
=
i
t
h
o
u
t
p
u
t
h_{\Theta}(x) \in \Re^{K},(h_{\Theta}(x))_{i} = i^{th} output
hΘ(x)∈ℜK,(hΘ(x))i=ithoutput
J
(
θ
)
=
−
1
m
[
∑
i
=
1
m
∑
k
=
1
K
y
k
(
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} [\sum_{i = 1}^{m}\sum_{k = 1}^{K}y_{k}^{(i)}log(h_{\Theta}(x^{(i)}))_{k} + (1-y_{k}^{(i)})log(1-(h_{\Theta}(x^{(i)}))_{k})]+\frac{\lambda}{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∑Kyk(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
计算目标:
min
θ
J
(
Θ
)
\min \limits _{\theta}J({\Theta})
θminJ(Θ)
需要计算:
- J ( Θ ) J({\Theta}) J(Θ)
- ∂ ∂ Θ i j ( l ) J ( Θ ) , Θ i j ( l ) ∈ R \frac{\partial}{\partial \Theta_{ij}^{(l)}}J(\Theta),\Theta_{ij}^{(l)} \in \mathbb{R} ∂Θij(l)∂J(Θ),Θij(l)∈R
如题:
前向传播:
反向传播
δ
j
(
l
)
=
第
l
层
第
j
个
节
点
的
误
差
(
e
r
r
o
r
)
\delta_{j}^{(l)} = 第l层第j个节点的误差(error)
δj(l)=第l层第j个节点的误差(error)
对于每个输出单元:
δ
j
(
4
)
=
a
j
(
4
)
−
y
j
\delta_{j}^{(4)} = a_{j}^{(4)} - y_{j}
δj(4)=aj(4)−yj,写成向量形式为:
δ
(
4
)
=
a
(
4
)
−
y
,
维
度
为
输
出
单
元
的
数
目
\delta^{(4)} = a^{(4)} -y,维度为输出单元的数目
δ(4)=a(4)−y,维度为输出单元的数目,由输出层逐级往上计算
δ
(
l
)
,
δ
(
l
−
1
)
,
.
.
.
,
δ
(
2
)
\delta^{(l)},\delta^{(l-1)},...,\delta^{(2)}
δ(l),δ(l−1),...,δ(2)(没有
δ
(
1
)
\delta^{(1)}
δ(1)):
δ
(
3
)
=
(
Θ
(
3
)
)
T
δ
(
4
)
.
∗
g
′
(
z
(
3
)
)
,
g
′
(
z
(
3
)
)
=
a
(
3
)
.
∗
(
1
−
a
(
3
)
)
,
"
.
∗
"
代
表
的
是
点
乘
\delta^{(3)} = (\Theta^{(3)})^{T}\delta^{(4)}.*g'(z^{(3)}),g'(z^{(3)}) = a^{(3)}.*(1-a^{(3)}),".*"代表的是点乘
δ(3)=(Θ(3))Tδ(4).∗g′(z(3)),g′(z(3))=a(3).∗(1−a(3)),".∗"代表的是点乘
δ
(
2
)
=
(
Θ
(
2
)
)
T
δ
(
3
)
.
∗
g
′
(
z
(
2
)
)
,
g
′
(
z
(
2
)
)
=
a
(
2
)
.
∗
(
1
−
a
(
2
)
)
\delta^{(2)} = (\Theta^{(2)})^{T}\delta^{(3)}.*g'(z^{(2)}),g'(z^{(2)}) = a^{(2)}.*(1-a^{(2)})
δ(2)=(Θ(2))Tδ(3).∗g′(z(2)),g′(z(2))=a(2).∗(1−a(2))
所以我们可以证明(忽略
λ
\lambda
λ,即
λ
=
0
\lambda = 0
λ=0):
∂
∂
Θ
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)
矩阵D是梯度矩阵
理解反向传播
前向传播的理解:
理解反向传播:
δ
\delta
δ项是代价函数关于这些中间项的偏导数,衡量影响神经网络的权值,进而影响神经网络的输出的程度。
展开参数
实际上在上图分别多了一个θ和D的矩阵
**使用矩阵表达式的好处:**参数以矩阵的形式储存,在正向/反向传播时会更方便,也会更能充分利用向量化实现
**使用向量表达式的好处:**当拥有像thetaVec/gradientVec,在使用一些高级优化算法时可以直接用
梯度检测(Gradient checking)
使用梯度检测可以保证前向/反向传播是百分百正确的
如果得到的gradApporx ≈DVec(从反向传播中得到的),那说明反向传播的实现是正确的
一旦验证了反向传播是正确的,那么在训练开始之前一定要关掉梯度检验,因为它会特别慢
随机初始化(Random initialization)
不能将θ初始化成0,因为如果这样做,会导致在后面的计算中绿色/红色/蓝色的权重依然是相等的即使它们不再是全0
Putting it together
对于隐藏层节点的数量,与输入特征的数量相匹配(相同/两倍/三倍)是比较好的选择
机器学习的细节
机器学习诊断法(machine learning diagnostic):
评估假设(Evaluating a hypothesis)
一种方法是将所有数据分为两部分,前70%是作为训练集,后30%是作为测试集
但是如果数据集里的数据是有特定的顺序/规律的话,那么就随机选择70%的数据为训练集,其余30%为测试集
线性回归
逻辑回归
模型选择
上面拟合后的模型是不能预测出假设对于新样本的泛化能力的,因为这些参数
θ
\theta
θ能很好地拟合训练集,但对于其他的数据可能就没这么好了
一般来说,我们将数据集划分成训练集(60%)、交叉验证(cross validate)集(20%)和测试集(20%):
训练/验证/测试误差:
- Training error:
J t r a i n ( θ ) = 1 2 m t r a i n ∑ i = 1 m t r a i n ( h θ ( x t r a i n ( i ) ) − y t r a i n ( i ) ) 2 , f o r l i n e a r r e g r e s s i o n J_{train}(\theta) = \frac{1}{2m_{train}} \sum_{i = 1}^{m_{train}}(h_{\theta}(x_{train}^{(i)}) - y_{train}^{(i)})^{2},for\ linear\ regression Jtrain(θ)=2mtrain1i=1∑mtrain(hθ(xtrain(i))−ytrain(i))2,for linear regression
J t r a i n ( θ ) = − 1 m t r a i n ∑ i = 1 m t r a i n ( y t r a i n ( i ) l o g ( h θ ( x t r a i n ( i ) ) ) + ( 1 − y t r a i n ( i ) ) l o g ( 1 − h θ ( x t r a i n ( i ) ) ) ) J_{train}(\theta) = -\frac{1}{m_{train}} \sum_{i=1}^{m_{train}} ( y_{train}^{(i)}log(h_{\theta}(x_{train}^{(i)})) + (1-y_{train}^{(i)})log(1-h_{\theta}(x_{train}^{(i)}))) Jtrain(θ)=−mtrain1i=1∑mtrain(ytrain(i)log(hθ(xtrain(i)))+(1−ytrain(i))log(1−hθ(xtrain(i)))) - Cross Validiation error:
J c v ( θ ) = 1 2 m c v ∑ i = 1 m c v ( h θ ( x c v ( i ) ) − y c v ( i ) ) 2 J_{cv}(\theta) = \frac{1}{2m_{cv}} \sum_{i = 1}^{m_{cv}}(h_{\theta}(x_{cv}^{(i)})-y_{cv}^{(i)})^{2} Jcv(θ)=2mcv1i=1∑mcv(hθ(xcv(i))−ycv(i))2
J c v ( θ ) = − 1 m c v ∑ i = 1 m c v ( y c v ( i ) l o g ( h θ ( x c v ( i ) ) ) + ( 1 − y c v ( i ) ) l o g ( 1 − h θ ( x c v ( i ) ) ) ) J_{cv}(\theta) = -\frac{1}{m_{cv}} \sum_{i=1}^{m_{cv}} ( y_{cv}^{(i)}log(h_{\theta}(x_{cv}^{(i)})) + (1-y_{cv}^{(i)})log(1-h_{\theta}(x_{cv}^{(i)}))) Jcv(θ)=−mcv1i=1∑mcv(ycv(i)log(hθ(xcv(i)))+(1−ycv(i))log(1−hθ(xcv(i)))) - Test error:
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}(\theta) = \frac{1}{2m_{test}} \sum_{i = 1}^{m_{test}}(h_{\theta}(x_{test}^{(i)}) -y_{test}^{(i)})^{2},对逻辑回归公式同上 Jtest(θ)=2mtest1i=1∑mtest(hθ(xtest(i))−ytest(i))2,对逻辑回归公式同上
在训练集上我们学习参数
θ
:
m
i
n
J
(
θ
)
\theta:minJ(\theta)
θ:minJ(θ);对得到的参数
θ
\theta
θ选择
J
c
v
(
θ
)
J_{cv}(\theta)
Jcv(θ)最小的模型;最后用
J
t
e
s
t
(
θ
)
J_{test}(\theta)
Jtest(θ)来估计泛化误差
诊断方差和偏差(Diagnosing variance vs. bias)
一般来说,欠拟合会产生高偏差;过拟合过产生高方差;
具体来说,当模型欠拟合时,训练误差和验证误差都会较大;当模型过拟合时,训练误差很小,然而验证误差很大,如下图:
正则化和偏差、方差
如何处理高方差和高偏差问题呢?
一般来说,加入合适的正则化项可以有效地避免过拟合(即高方差)
注意
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(θ)都没有正则化项
当正则化参数
λ
\lambda
λ较大时 ,
θ
j
≈
0
\theta_{j} \approx0
θj≈0(除
θ
0
\theta_0
θ0外),假设函数趋于直线,因而会造成高偏差的问题,导致欠拟合;
当正则化参数
λ
\lambda
λ较小时,正则化项不起作用,模型会变得过拟合。如图:
学习曲线(Learning curve)
高偏差情况
- 随着训练集样本数的不断增加, J c v ( θ ) 和 J t r a i n ( θ ) J_{cv}(\theta)和J_{train}(\theta) Jcv(θ)和Jtrain(θ)的值越来越接近,而且都很大
- 如果算法是高偏差(欠拟合)的话,再怎么增加样本数也不会让交叉验证/测试集误差减小很多
高方差情况
- 随着训练集样本数的不断增加, J c v ( θ ) 和 J t r a i n ( θ ) J_{cv}(\theta)和J_{train}(\theta) Jcv(θ)和Jtrain(θ)的值会有很大的差距
- 如果算法是高方差(过拟合)的话,增加样本数也可能会让交叉验证/测试集误差减小
方法
一般的,对于高偏差问题(欠拟合):
- 增加特征个数
- 增加多项式特征
- 降低 λ \lambda λ
对于高方差问题(过拟合):
- 增加训练样本
- 减少特征个数
- 增加
λ
\lambda
λ
对于神经网络来说,参数越少,越有可能欠拟合;参数越多,网络结构越复杂,越有可能过拟合,应该加入正则化项。
如何选择神经网络的层数?尝试把数据集划分成上面的三部分,然后训练有一/二/三…个隐藏层的网络,然后验证哪个的
J
c
v
(
θ
)
J_{cv}(\theta)
Jcv(θ)最小
机器学习系统设计
误差分析(Error analysis)
开发一个复杂的机器学习系统:
e.g.设计一个垃圾邮件分类系统,发现错误识别的邮件中钓鱼邮件的数量是最多的,所以可以画更多的时间来改进钓鱼邮件的识别
不对称分类的误差估计(Error metrics for skewed classes)
查准率和召回率(precision recall):
y = 1 in presence of rare class(稀有类别,即该类别在所给样本中比较少出现) that we want to detect
如图,如果某个类分类结果为1,如果算法预测结果也为1,称为真阳性(TP),如果算法预测结果为0,称为假阴性(FN);如果某个类分类结果为0,如果算法预测结果也为0,称为真阴性(TN),如果算法预测结果为1,称为假阳性(FP)。
Precision: 预测为正,实际为正的概率(e.g.对所有预测患癌的患者,有多大几率真得了)
P
r
e
c
i
s
i
o
n
=
T
P
T
P
+
F
P
Precision = \frac{TP}{TP+FP}
Precision=TP+FPTP
Recall: 正例被准确预测的概率,也叫查全率,敏感性(e.g. 假设所有都得癌症了,有多大几率正确预测他们得了)
R
e
c
a
l
l
=
T
P
T
P
+
F
N
Recall = \frac{TP}{TP+FN}
Recall=TP+FNTP
一个算法如果有高查准率和召回率,那么说明这个算法比较好
两者之间的权衡:
对于一个逻辑回归问题,以癌症预测为例,我们之前是设定如果 h θ ( x ) ≥ 0.5 h_\theta(x)\ge0.5 hθ(x)≥0.5,判断 y=1,即患癌症;如果 h θ ( x ) < 0.5 h_\theta(x) < 0.5 hθ(x)<0.5,判断 y=0,即为良性肿瘤,这时候的查准率和召回率处在一个平衡的水平。
但如果以上面的方法进行预测,那么很有可能在没有准确把握的情况下将病人诊断为患癌。我们希望只有在有准确把握的情况下将病人诊断为癌症,于是修改算法如下:
当
h
θ
(
x
)
≥
0.9
,
预
测
y
=
1
当
h
θ
(
x
)
≤
0.9
,
预
测
y
=
0
当\quad h_\theta(x)\ge0.9,\quad预测\quad y=1\\ 当\quad h_\theta(x)\le0.9,\quad预测\quad y=0
当hθ(x)≥0.9,预测y=1当hθ(x)≤0.9,预测y=0
这样子的话会导致查准率变高,召回率变低;反之,当我们想要尽可能让所有患癌的患者被正确诊断不错过最佳治疗时期,我们需要将假阴性样本提高,算法修改如下:
当
h
θ
(
x
)
≥
0.3
,
预
测
y
=
1
当
h
θ
(
x
)
≤
0.3
,
预
测
y
=
0
当\quad h_\theta(x)\ge0.3,\quad预测\quad y=1\\ 当\quad h_\theta(x)\le0.3,\quad预测\quad y=0
当hθ(x)≥0.3,预测y=1当hθ(x)≤0.3,预测y=0
这样子的话会导致查准率变低,召回率变高。
- 如果我们想要比较确信为正例时才判定为正例,那么提高阈值,模型会对应高查准率,低召回率;
- 如果希望避免假阴性,那么降低阈值,模型会对应低查准率,高召回率
所以对大多数算法来说,我们必须要在precision和recall之间进行权衡:
F 1 F_{1} F1 score
F
1
=
2
P
R
P
+
R
F_{1} = 2\frac{PR}{P+R}
F1=2P+RPR
选择最大的F score
支持向量机(SVM,也叫大间距分类器)
支持向量机就是对于逻辑回归问题得到的损失函数,进行以直线替代曲线,从而起到优化的作用。
优化目标
c
o
s
t
(
θ
,
x
)
=
−
(
y
l
o
g
h
θ
(
x
)
+
(
1
−
y
)
l
o
g
(
1
−
h
θ
(
x
)
)
)
cost(\theta,x) = -(ylogh_{\theta}(x)+(1-y)log(1-h_{\theta}(x)))
cost(θ,x)=−(yloghθ(x)+(1−y)log(1−hθ(x)))
左图为 y=1 时得到的图像,右图是 y=0 时得到的图像。可以看到该函数为一条曲线,我们用两条直线可以得到与图中一条曲线差不多的图像,分别将左图由直线组成的函数称为
c
o
s
t
1
(
z
)
cost_{1}(z)
cost1(z),将右图由直线组成的函数称为
c
o
s
t
0
(
z
)
cost_{0}(z)
cost0(z)。
逻辑回归优化目标如下:
m
i
n
θ
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
\mathop{min} \limits_{\theta}\frac{1}{m} \sum_{i=1}^{m} [ y^{(i)}(-log(h_{\theta}(x^{(i)})) + (1-y^{(i)})((-log(1-h_{\theta}(x^{(i)})))]+\frac{\lambda}{2m}\sum_{j=1}^{n}\theta_{j}^{2}
θminm1i=1∑m[y(i)(−log(hθ(x(i)))+(1−y(i))((−log(1−hθ(x(i))))]+2mλj=1∑nθj2
我们将逻辑回归的整体优化目标做出以下改变:
- 将 − l o g h θ ( x ( i ) ) -logh_{\theta}(x^{(i)}) −loghθ(x(i))替换为 c o s t 1 ( θ T x ( i ) ) cost_{1}(\theta^{T}x^{(i)}) cost1(θTx(i)),将 − l o g ( 1 − h θ ( x ( i ) ) ) -log(1-h_{\theta}(x^{(i)})) −log(1−hθ(x(i)))替换为 c o s t 0 ( θ T x ( i ) ) cost_{0}(\theta^{T}x^{(i)}) cost0(θTx(i))
- 由于在逻辑回归代价函数中, 1 m \frac{1}{m} m1 只是一个常数,把它去掉并不会影响代价函数求偏导的结果,因此一般支持向量机把 1 m \frac{1}{m} m1去掉;
- 支持向量机的正则化一般不采用在正则化项 采用正则化参数 λ \lambda λ,而是在被正则化项 采用参数 C 进行正则化。这在本质上没什么区别,只是写法上的不同,C 在这里的作用类似 1 λ \frac{1}{\lambda} λ1
所以我们可以得到支持向量机SVM整体优化目标函数:
m
i
n
θ
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
∑
i
=
1
n
θ
j
2
\mathop{min} \limits_{\theta} C\sum_{i = 1}^{m}[y^{(i)}cost_{1}(\theta^{T}x^{(i)}) + (1-y^{(i)})cost_{0}(\theta^{T}x^{(i)})] + \frac{1}{2} \sum_{i = 1}^{n}\theta_{j}^{2}
θminCi=1∑m[y(i)cost1(θTx(i))+(1−y(i))cost0(θTx(i))]+21i=1∑nθj2
支持向量机并不会输出概率,而是进行直接的预测(y = 1/0)
间隔最大化
直观理解
当取到一个较大的C值时,当
y
(
i
)
=
1
y^{(i)} = 1
y(i)=1时,
θ
T
x
(
i
)
≥
1
\theta^{T}x^{(i)} \ge 1
θTx(i)≥1,当
y
(
i
)
=
0
y^{(i)} = 0
y(i)=0时,
θ
T
x
(
i
)
≤
−
1
\theta^{T}x^{(i)} \le -1
θTx(i)≤−1
如果我们把优化问题看成是通过选择参数使SVM的第一项为零,那么优化问题就成为
m
i
n
θ
C
×
0
+
1
2
∑
i
=
1
n
θ
j
2
,
s
.
t
.
θ
T
x
(
i
)
≥
1
i
f
y
(
i
)
=
1
;
e
l
s
e
θ
T
x
(
i
)
≤
−
1
\mathop{min} \limits_{\theta} C \times 0 + \frac{1}{2} \sum_{i = 1}^{n}\theta_{j}^{2},s.t. \ \theta^{T}x^{(i)} \ge 1 \ if\ y^{(i)} = 1;else\ \theta^{T}x^{(i)} \le -1
θminC×0+21i=1∑nθj2,s.t. θTx(i)≥1 if y(i)=1;else θTx(i)≤−1
因此我们可以得到SVM的决策边界
数学原理
1 2 ∑ i = 1 n θ j 2 = 1 2 ( θ 1 2 + . . . + θ n 2 ) 2 = 1 2 ∣ ∣ θ ∣ ∣ 2 \frac{1}{2} \sum_{i = 1}^{n}\theta_{j}^{2} = \frac{1}{2}(\sqrt{\theta_{1}^{2}+...+\theta_n^{2}})^{2} = \frac{1}{2}||\theta||^{2} 21i=1∑nθj2=21(θ12+...+θn2)2=21∣∣θ∣∣2
进行简化:令
θ
0
=
0
\theta_{0} = 0
θ0=0,n = 2
所以有:
θ
T
x
(
i
)
=
p
(
i
)
∣
∣
θ
∣
∣
=
θ
1
x
1
(
i
)
+
θ
2
x
2
(
i
)
,
p
(
i
)
是
x
(
i
)
在
θ
上
的
投
影
长
度
(
可
正
可
负
)
\theta^{T}x^{(i)} = p^{(i)}||\theta|| = \theta_{1}x_{1}^{(i)} + \theta_{2}x_{2}^{(i)},p^{(i)}是x^{(i)}在\theta上的投影长度(可正可负)
θTx(i)=p(i)∣∣θ∣∣=θ1x1(i)+θ2x2(i),p(i)是x(i)在θ上的投影长度(可正可负)
决策边界转换为:
在左图中:对样本
x
(
1
)
x^{(1)}
x(1),短的红线段
p
(
1
)
p^{(1)}
p(1)是样本到参数
θ
{{\theta }}
θ的投影,它非常短。类似地,对样本
x
(
2
)
x^{(2)}
x(2),它到
θ
{{\theta }}
θ的投影是粉色线段
p
(
2
)
p^{(2)}
p(2),这个投影非常短。
p
(
2
)
p^{(2)}
p(2)事实上是一个负值。
由于
p
(
i
)
p^{(i)}
p(i)将会是非常小的数,因此当我们考察优化目标函数的时候,对于正样本而言,我们需要
p
(
i
)
⋅
∣
∣
θ
∣
∣
≥
1
p^{(i)}\cdot{\left|| \theta \right||} \ge1
p(i)⋅∣∣θ∣∣≥1,但
p
(
i
)
p^{(i)}
p(i)非常小,那就表明
θ
{{\theta }}
θ的范数非常大。类似地,对于负样本而言
p
(
2
)
⋅
∣
θ
∣
<
=
−
1
p^{(2)}\cdot{\left|\theta \right|}<=-1
p(2)⋅∣θ∣<=−1。
p
(
2
)
p^{(2)}
p(2)会是一个非常小的数,因此唯一的办法就是
θ
{{\theta }}
θ的范数变大。但是我们的目标函数是希望找到一个参数
θ
{{\theta }}
θ,它的范数是小的。因此,这看起来不像是一个好的参数向量
θ
{{\theta }}
θ的选择。
为什么参数向量θ事实上是和决策边界是90度正交的? 对任意一个线性分割样本的决策边界,看成是一个Logistic Regression。在逻辑回归中,假设已经拟合出参数θ(θ是一个向量),那么求解θTx=0这个方程就可以得到决策边界。 Logistic Regression中输出函数为Sigmoid函数,临界点为z=0。 θ T ⋅ x = 0 \theta^{T} \cdot x = 0 θT⋅x=0,故正交。(决策边界是由 x ( i ) 组 成 的 x^{(i)}组成的 x(i)组成的)
核函数
我们可以通过改造支持向量机来构造复杂的非线性分类器,这需要用到核函数。
如果我们要对以下非线性模型进行分类:
根据上图可以用f1,f2…来表示相应的多项式,那是否会有用f1,f2…表示对更好的选择?
和函数的分类问题
设定几个坐标
l
(
i
)
l^{(i)}
l(i)landmark;用f 值表示我们用来描述给定初始特征变量 x 与我们所给定的坐标 l (landmarks) 的接近程度:
f
i
=
s
i
m
i
l
a
r
i
t
y
(
x
,
l
(
i
)
)
=
k
(
x
,
l
(
i
)
)
=
e
x
p
(
−
∣
∣
x
−
l
(
i
)
∣
∣
2
2
σ
2
)
=
e
x
p
(
−
∑
j
=
1
n
(
x
j
−
l
j
(
i
)
)
2
2
σ
2
)
f_{i} = similarity(x,l^{(i)}) = k(x,l^{(i)}) = exp(-\frac{||x - l^{(i)}||^{2}}{2\sigma^2}) = exp(-\frac{\sum_{j = 1}^{n} (x_j - l_j^{(i)})^2}{2\sigma^2})
fi=similarity(x,l(i))=k(x,l(i))=exp(−2σ2∣∣x−l(i)∣∣2)=exp(−2σ2∑j=1n(xj−lj(i))2)
其中 s i m i l a r i t y ( x , l ( i ) ) = k ( x , l ( i ) ) similarity(x,l^{(i)}) = k(x,l^{(i)}) similarity(x,l(i))=k(x,l(i))称为核函数,本例中使用的核函数为高斯核函数
如果
x
≈
l
(
i
)
x \approx l^{(i)}
x≈l(i):
f
i
≈
e
x
p
(
−
0
2
2
σ
2
)
≈
1
f_{i} \approx exp(-\frac{0^{2}}{2\sigma^2}) \approx 1
fi≈exp(−2σ202)≈1
如果x is far from
l
(
i
)
l^{(i)}
l(i):
f
i
≈
e
x
p
(
−
(
l
a
r
g
e
n
u
m
b
e
r
)
2
2
σ
2
)
≈
0
f_{i} \approx exp(-\frac{(large \ number)^{2}}{2\sigma^2}) \approx 0
fi≈exp(−2σ2(large number)2)≈0
σ
\sigma
σ 的值对于核函数的影响:
由上图我们可以看出,
σ
\sigma
σ值越大,特征变量值 f 随着 x 与
l
l
l距离的变化越缓慢;反之则反。
由核函数根据输入的初始特征变量 x 和我们选择的标记点 l 计算的到的假设函数
h
θ
(
f
)
h_\theta(f)
hθ(f) 的每一个特征变量 f,带入假设函数
h
θ
(
f
)
h_\theta(f)
hθ(f)并预测输入样本属于哪一类
如何选择landmark
SVM将每一个训练样本
(
x
(
i
)
,
y
(
i
)
)
(x^{(i)},y^{(i)})
(x(i),y(i)),令标记
l
(
i
)
=
x
(
i
)
l^{(i)}=x^{(i)}
l(i)=x(i),对于每一个输入
x
x
x,计算
f
1
,
f
2
,
.
.
.
,
f
m
f_1,f_2,...,f_m
f1,f2,...,fm ,令
f
0
=
1
f_0=1
f0=1,生成新的特征向量
f
∈
R
m
+
1
f\in\R^{m+1}
f∈Rm+1
核函数的想法理论上可以用于其他的算法,但由于总总原因,核函数在其他算法无法很好推广,比如核函数结合逻辑回归会变得很慢
SVM参数对性能的影响
使用SVM
我们在使用SVM时不要自己手写函数,而是要调用现成的包,虽然不用具体实现SVM的细节,但我们还是要自己选择合适的参数C和核函数
在使用高斯核函数之前一定要进行特征缩放,否则可能数值大的那个特征影响大
除了高斯核函数之外也有其他的核函数,如多项式核函数(polynomial kernel)、字符串核函数(string kernel,输入是字符)…
多类分类
基本的方法与逻辑回归的多类分类思想相似。
Logistic regression vs. SVMs
已知特征数量 n( x ∈ R n + 1 x \in \R^{n+1} x∈Rn+1,包含x0),训练样本数量 m:
- 如果 n ≫ m n\gg m n≫m,选择l逻辑回归或线性核函数(没有核函数的SVM)。(eg. n=10,000 m=10-1000)
- 如果特征个数n较小,训练样本个数适当,选择高斯核函数。(eg. n=1-1000 m=10-10,000)
- 如果特征个数n小,训练样本非常大,增加更多特征或者选择逻辑回归或者线性核函数的SVM。(eg. n=1-1000 m=50,000+)
逻辑回归和线性核函数往往做着相似的事情,得到相似的结果。
无监督学习
K-Means算法
符号:
K : 表示我们要分类的种类个数;
c
(
i
)
c^{(i)}
c(i) : 当前样本
x
(
i
)
x^{(i)}
x(i)所属的簇的索引或者序号;
μ
k
\mu_k
μk: 表示当前第 k 个聚类的中心位置
k
∈
{
1
,
2
,
.
.
.
,
K
}
k\in\{1,2,...,K\}
k∈{1,2,...,K};
μ
c
(
i
)
\mu_{c^{(i)}}
μc(i) : 当前样本
x
(
i
)
x^{(i)}
x(i)所属的簇的索引代表的聚类的中心位置。
算法思路



算法输入:
- K(聚簇的数目)
- 训练集 { x ( 1 ) 、 x ( 2 ) 、 . . . , x ( m ) } \{ x^{(1)}、x^{(2)}、...,x^{(m)} \} {x(1)、x(2)、...,x(m)},注意 x ( i ) ∈ R n ( d r o p x 0 = 1 、 c o n v e n t i o n ) x^{(i)} \in \R^{n}(drop\ x_{0} = 1、 convention) x(i)∈Rn(drop x0=1、convention)
思路详解:
假设我们打算将输入样本分为两个类,即 K=2。K-Means 算法在刚开始随机生成两个坐标点,这两个坐标点代表两个类。
接下来进入迭代过程:
- 遍历所有样本,计算每个样本与这些坐标点的距离,并将样本点归为与它距离最短的坐标点的那一类;
- 移动坐标点,坐标点的位置是属于该坐标点的所有样本的平均值;
- 迭代第一步和第二步,直到坐标点的位置不再移动。
- c ( i ) c^{(i)} c(i) 是一个索引,即如果 x 1 , x 3 , x 6 和 x 10 x_{1},x_{3},x_{6}和x_{10} x1,x3,x6和x10都是第二簇的,那么 c 1 , c 3 , c 6 和 c 10 都 为 2 c_{1},c_{3},c_{6}和c_{10}都为2 c1,c3,c6和c10都为2
- μ k \mu_{k} μk也是一个n维向量,因为 x ( i ) x^{(i)} x(i)都是n维向量
优化目标
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} ||x^{(i)} - \mu_{c}^{(i)}|| ^{2}
J(c(1),...,c(m),μ1,...,μK)=m1i=1∑m∣∣x(i)−μc(i)∣∣2
m
i
n
c
(
1
)
.
.
.
,
c
(
m
)
,
μ
1
,
.
.
.
,
μ
K
J
(
c
(
1
)
,
.
.
.
,
c
(
m
)
,
μ
1
,
.
.
.
,
μ
K
)
\mathop{min} \limits_{c^{(1)}...,c{(m)},\mu_{1},...,\mu_{K}} J(c^{(1)},...,c{(m)},\mu_{1},...,\mu_{K})
c(1)...,c(m),μ1,...,μKminJ(c(1),...,c(m),μ1,...,μK)
此代价函数也被称为失真代价函数 或者 K均值算法的失真。
KM算法分为两步,第一步相当于
m
i
n
i
m
i
z
e
J
(
.
.
.
)
w
r
t
c
(
1
)
,
.
.
.
,
c
(
m
)
(
h
o
l
d
i
n
g
μ
1
,
.
.
.
,
μ
K
f
i
x
e
d
)
\mathop{minimize}\ J(...) \ wrt \ c^{(1)},...,c{(m)}(holding\ \mu_{1},...,\mu_{K}\ fixed)
minimize J(...) wrt c(1),...,c(m)(holding μ1,...,μK fixed),第二步相当于
m
i
n
i
m
i
z
e
J
(
.
.
.
)
w
r
t
μ
1
,
.
.
.
,
μ
K
\mathop{minimize} \ J(...) \ wrt \ \mu_{1},...,\mu_{K}
minimize J(...) wrt μ1,...,μK
随机初始化
在随机初始化中我们一般随机选取K个样本点直接作为初始聚簇中心点。
为什么要进行随机初始化:
一眼看上去图中的样本点可以分为两个聚簇,如果随机采用样本中的两个点作为聚簇中心点,很有可能将两个聚簇中心点同时设定在同一个聚簇中,这样就会使算法陷入局部最优。解决这个问题的办法是进行多次随机初始化,找到学习结果最好的初始化聚簇中心点,如下:
如果聚类的个数比较少(2 - 10),那么多次随机初始化往往会给出一个很好的分类结果;如果要找的聚类数量很多,多次随机初始化不会有很大的改善,第一次可能就会给出一个好的结果
选取聚类数量
大多数时候聚类数量 K还是通过我们自己观察手动选取,但吴恩达老师在这里介绍了肘部法则。
作出代价函数 J 随着聚簇数量的变化的曲线,然后选取函数的畸变点(导数变化最大的点,如左图,因很像一个肘部而得名),这个点就是我们想要的聚簇分类数量最合理的点。
但大多数时候“肘部函数”会像右图那样看不出肘部在哪里,这时肘部法则的缺陷。
还有一种方法是根据其后面的表现来选择KM的聚类数:
降维(Dimensionality Reduction)
目标1:数据压缩
如果一个数据集有多个特征,且多个特征之间存在某种相关性,这样我们可以把这些具有相关性的特征通过降低维度来进行数据的压缩,以达到减少特征冗余的目的。这样既可以减少存储空间大小,也可以提高算法的速度。
- 2D to 1D:
- 3D to 2D:
把所有点投影到一个平面上
目标2:可视化
如果一个数据集包含50个特征,那么它的特征是五十维的,我们很难绘制五十维的图像来表示该数据集中的每一个样本。但如果我们把这个数据集的50个特征压缩为2个特征,那么我们可以在二维图像上清晰地看到每个样本点的分布,这样有助于我们分析问题。
降维算法:主成分分析法(PCA)
PCA算法试图找到一个低维的平面对数据进行投影,以便最小化每个样本点与投影后的对应点之间距离的平方。在使用PCA之前,要先进行均值归一化和特征规范化,使所有的特征均值为0
PCA不是线性回归
左图为线性回归,右图为PCA。虽然两种算法表面上看上去都是对样本点进行拟合。但仔细研究上图就会发现,线性回归算法根据样本点所对应的y值拟合直线;而PCA算法根据样本点同拟合直线的距离拟合直线,且PCA中的变量是平等的。
使用PCA算法
数据预处理
- 对于训练集: x ( 1 ) , . . . , x ( m ) x^{(1)},...,x^{(m)} x(1),...,x(m);
- 先计算这些样本的均值: μ 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 ) − μ j x_{j}^{(i)} = x_{j}^{(i)} - \mu_{j} xj(i)=xj(i)−μj(这样的好处是能使处理后的样本均值为零);
- 进行特征缩放——均值归一化。
PCA计算过程
假设我们要将数据从n维降到k维,我们首先要计算协方差(covariance matrix):
Σ
=
1
m
∑
i
=
1
n
(
x
(
i
)
)
(
x
(
i
)
)
T
,
Σ
是
一
个
协
方
差
矩
阵
\Sigma = \frac{1}{m} \sum_{i=1}^{n}(x^{(i)})(x^{(i)})^{T},\Sigma是一个协方差矩阵
Σ=m1i=1∑n(x(i))(x(i))T,Σ是一个协方差矩阵
上
面
的
公
式
也
可
写
成
S
i
g
m
a
=
1
m
∗
(
X
T
X
)
上面的公式也可写成Sigma = \frac{1}{m} * (X^{T}X)
上面的公式也可写成Sigma=m1∗(XTX)
计算矩阵
Σ
\Sigma
Σ的特征向量,使用的octave公式如下(svd称为奇异值分解):
[
U
,
S
,
V
]
=
s
v
d
(
S
i
g
m
a
)
,
S
i
g
m
a
是
一
个
n
×
n
矩
阵
(
n
∗
1
∗
1
∗
n
)
[U,S,V] = svd(Sigma),Sigma是一个n \times n矩阵(n*1*1*n)
[U,S,V]=svd(Sigma),Sigma是一个n×n矩阵(n∗1∗1∗n)
我们获得矩阵U(只需要U,不需要S和V):
U
=
(
∣
∣
∣
u
(
1
)
u
(
2
)
.
.
.
u
(
n
)
∣
∣
∣
)
∈
R
n
×
n
U = \begin{pmatrix} | & | & & | \\ u^{(1)} & u^{(2)} & ... &u^{(n)} \\ | & | & & | \end{pmatrix} \in\R^{n \times n}
U=⎝⎛∣u(1)∣∣u(2)∣...∣u(n)∣⎠⎞∈Rn×n
取矩阵U的前k列,将
x
∈
R
n
⟶
z
∈
R
k
x \in \R^{n} \longrightarrow z \in \R^{k}
x∈Rn⟶z∈Rk:
z
(
i
)
=
(
∣
∣
∣
u
(
1
)
u
(
2
)
.
.
.
u
(
k
)
∣
∣
∣
)
T
x
(
i
)
,
z
(
i
)
∈
R
k
×
1
,
前
面
的
矩
阵
也
写
成
U
r
e
d
u
c
e
z^{(i)} = \begin{pmatrix} | & | & & | \\ u^{(1)} & u^{(2)} & ... &u^{(k)} \\ | & | & & | \end{pmatrix}^{T} x^{(i)},z^{(i)} \in \R^{k \times1},前面的矩阵也写成U_{reduce}
z(i)=⎝⎛∣u(1)∣∣u(2)∣...∣u(k)∣⎠⎞Tx(i),z(i)∈Rk×1,前面的矩阵也写成Ureduce
主成分数量k的选择
概念一:PCA算法的平均投影误差平方:
1
m
∑
i
=
1
m
∣
∣
x
(
i
)
−
x
a
p
p
r
o
x
(
i
)
∣
∣
2
,
x
a
p
p
r
o
x
(
i
)
=
U
r
e
d
u
c
e
z
(
i
)
(
n
∗
k
∗
k
∗
1
)
\frac{1}{m} \sum_{i=1}^{m}||x^{(i)} - x_{approx}^{(i)}||^{2},x^{(i)}_{approx} = U_{reduce}z^{(i)}(n*k*k*1)
m1i=1∑m∣∣x(i)−xapprox(i)∣∣2,xapprox(i)=Ureducez(i)(n∗k∗k∗1)
概念二:样本数据总方差(所有样本与原点距离的平方):
1
m
∑
i
=
1
m
∣
∣
x
(
i
)
∣
∣
2
\frac{1}{m} \sum_{i=1}^{m}||x^{(i)}||^{2}
m1i=1∑m∣∣x(i)∣∣2
一般来说,我们会从1开始,尝试选择最小的 k 值使得上述两个概念比值小于等于 0.01(99%的方差性会被保留):
1
m
∑
i
=
1
m
∣
∣
x
(
i
)
−
x
a
p
p
r
o
x
(
i
)
∣
∣
2
1
m
∑
i
=
1
m
∣
∣
x
(
i
)
∣
∣
2
≤
0.01
\frac{\frac{1}{m} \sum_{i=1}^{m}||x^{(i)} - x_{approx}^{(i)}||^{2}}{\frac{1}{m} \sum_{i=1}^{m}||x^{(i)}||^{2}} \le0.01
m1∑i=1m∣∣x(i)∣∣2m1∑i=1m∣∣x(i)−xapprox(i)∣∣2≤0.01
- 在octave中,我们可以有一个更简单的方式来进行计算:
- 对于公式: [ U , S , V ] = s v d ( S i g m a ) [U,S,V] = svd(Sigma) [U,S,V]=svd(Sigma)
- 输出矩阵S如下所示:
S = [ s 11 0 ⋯ 0 0 s 22 ⋯ 0 ⋮ ⋮ ⋱ ⋮ 0 0 ⋯ s n n ] ∈ R n × n S = \begin{bmatrix} {s_{11}} &0&\cdots&0 \\ 0&{s_{22}}&\cdots & 0\\ \vdots&\vdots& \ddots&\vdots \\ 0&0&\cdots&{s_{nn}} \end{bmatrix} \in \R^{n \times n} S=⎣⎢⎢⎢⎡s110⋮00s22⋮0⋯⋯⋱⋯00⋮snn⎦⎥⎥⎥⎤∈Rn×n - 则上述选择标准公式可以用如下公式代替:
1 − ∑ i = 1 k s i i ∑ i = 1 n s i i ≤ 0.01 1 - \frac{\sum_{i=1}^{k}s_{ii}}{\sum_{i=1}^{n}s_{ii}} \le0.01 1−∑i=1nsii∑i=1ksii≤0.01
也 即 : ∑ i = 1 k s i i ∑ i = 1 n s i i ≥ 0.99 也即:\frac{\sum_{i=1}^{k}s_{ii}}{\sum_{i=1}^{n}s_{ii}} \ge 0.99 也即:∑i=1nsii∑i=1ksii≥0.99
压缩重现
可以通过
x
a
p
p
r
o
x
(
i
)
=
U
r
e
d
u
c
e
z
(
i
)
x^{(i)}_{approx} = U_{reduce}z^{(i)}
xapprox(i)=Ureducez(i)来重新获得原数据(与
x
(
i
)
x^{(i)}
x(i)还是有差距但基本差不多)
应用PCA的建议
监督学习中有时候输入样本的特征很多,我们也要想办法把它们减低维度,具体步骤如下:
注意:降维映射Mapping
x
(
i
)
→
z
(
i
)
x^{(i)} \rightarrow z^{(i)}
x(i)→z(i) 只能是在训练集中通过PCA算法运行得到,不能在交叉验证集或者测试集中一起通过PCA算法得到。在训练集中通过PCA算法得到的映射可以用于后期检验泛化程度时交叉训练集或者测试集的降维。
PCA的错误用法
使用PCA算法防止过拟合
特征数量太多是导致过拟合的一种原因。即使有时候使用PCA算法看起来可以解决过拟合的问题,但是吴恩达老师不建议这么做,最好的方式还是使用正则化,原因是:**PCA算法对于监督学习样本特征的降维是忽略掉了标签y,我们只是使用输入的 x ( i ) x^{(i)} x(i)让算法去寻找低维数据来近似。正因如此,PCA算法会舍弃掉一些有价值的信息。**如果使用正则化来防止过拟合的话,至少会得到与PCA相同的好结果。
在算法设计阶段直接使用PCA
在设计一个机器学习系统时,与其一上来就使用PCA进行降维,倒不如先使用原数据先跑一下,如果原数据跑得慢/占了太多内存,才考虑使用PCA来加快速度。
异常检测(Anomaly detection)
异常检测问题主要用在无监督学习。
异常检测问题可以这么理解:给定一些初始的样本,将它们称为一个类C。对于一个输入的新样本,通过算法判断该新样本是否属于类C,如果不属于,则判断该新样本存在异常(也可以这么理解:通过初始的样本训练得到一个阈值,如果新样本超出这个阈值,这判断该样本为异常样本)。
异常检测问题应用的场景是:飞机引擎的异常检测、购物网站行为不寻常用户检测、数据中心监控哪台计算机出现异常。
高斯分布/正态分布(Guassian/Normal distribution)
如果一个实数x的概率符合高斯分布(标准差为
σ
\sigma
σ ,均值为
μ
\mu
μ ,方差为
σ
2
\sigma^2
σ2,我们把它记作
x
≈
N
(
μ
,
σ
2
)
x\approx N(\mu,\sigma^2)
x≈N(μ,σ2)
高斯分布中
μ
\mu
μ控制曲线的中心位置,
σ
\sigma
σ控制曲线的宽度(
σ
\sigma
σ越大,曲线越矮,反之瘦高)
参数估计
对于给定的数据集,假设通过观察我们认为这些数据集的分布大致符合高斯分布。那么我们可以计算该数据集所对应的高斯分布的参数:
μ
=
1
m
∑
i
=
1
m
x
(
i
)
\mu = \frac{1}{m} \sum^{m}_{i = 1}x^{(i)}
μ=m1i=1∑mx(i)
σ
2
=
1
m
∑
i
=
1
m
(
x
(
i
)
−
μ
)
2
\sigma^{2} = \frac{1}{m}\sum^{m}_{i = 1}(x^{(i)} - \mu)^2
σ2=m1i=1∑m(x(i)−μ)2
异常检测算法
对于训练集{
x
(
1
)
,
.
.
.
,
x
(
m
)
{x^{(1)},...,x^{(m)}}
x(1),...,x(m)},训练集中的每个样本
x
(
i
)
∈
R
n
x^{(i)} \in \R^{n}
x(i)∈Rn。我们假设训练样本的每一个特征值xi都符合某种正态分布,则有:
p
(
x
)
=
Π
j
=
1
n
p
(
x
j
;
μ
j
,
σ
j
2
)
p(x) = \Pi^{n} _{j = 1}p(x_{j};\mu_{j},\sigma_{j}^{2})
p(x)=Πj=1np(xj;μj,σj2)
得到异常算法的一般步骤:
- 选择可以帮我们指出那些反常样本的特征值 x i x_{i} xi;
- 对所选的特征值进行参数估计得到 μ 和 σ \mu和\sigma μ和σ
- 对于给定的新样本,通过上述式子计算它的正态分布概率,并与我们我设定的阈值 ϵ \epsilon ϵ作比较。如果 p ( x ) < ϵ p(x) < \epsilon p(x)<ϵ,则判断该样本异常
具体的例子!!!
评估异常检测算法
对于异常检测算法,我们要有一个评估算法好坏的标准,最好是可以通过一个实数评价指标告诉我们算法的好坏。
评估思路
我们在对异常检测算法进行评估时,需要用到带标签的数据,将训练后的模型对这些带标签数据的标签预测值和带标签数据的真实标签做对比,就可以帮助我们评估一个算法的好坏。
- 假定我们有一些带标记的数据,y = 0时为正常样本,y = 1为异常样本。
- 设定训练集: x ( 1 ) , x ( 2 ) , . . . , x ( m ) x^{(1)},x^{(2)},...,x^{(m)} x(1),x(2),...,x(m)(可假定都是正常/异常的样本)
- 交叉验证集合: ( x c v ( 1 ) , y c v ( 1 ) ) , . . . , ( x c v ( m c v ) , y c v ( m c v ) ) (x_{cv}^{(1)},y_{cv}^{(1)}),...,(x_{cv}^{(m_{cv})},y_{cv}^{(m_{cv})}) (xcv(1),ycv(1)),...,(xcv(mcv),ycv(mcv))
- 测试集: ( x t e s t ( 1 ) , y t e s t ( 1 ) ) , . . . , ( x t e s t ( m t e s t ) , y t e s t ( m t e s t ) ) (x_{test}^{(1)},y_{test}^{(1)}),...,(x_{test}^{(m_{test})},y_{test}^{(m_{test})}) (xtest(1),ytest(1)),...,(xtest(mtest),ytest(mtest))
在交叉验证集合和测试集中可以包含适当的异常样本,即y = 1的样本
步骤如下:
-
将训练集中的样本用高斯分布拟合,并训练出模型 p ( x ) = p ( x 1 ; μ 1 , σ 1 2 ) ⋅ ⋅ ⋅ p ( x n ; μ n , σ n 2 ) p(x) = p(x_{1};\mu_{1},\sigma_{1}^{2})···p(x_{n};\mu_{n},\sigma_{n}^{2}) p(x)=p(x1;μ1,σ12)⋅⋅⋅p(xn;μn,σn2),得到 μ 1 , σ 1 2 , . . . , μ n , σ n 2 \mu_{1},\sigma_{1}^{2},...,\mu_{n},\sigma_{n}^{2} μ1,σ12,...,μn,σn2;
-
将训练好的模型用来预测交叉验证集或者测试集中的样本x:
-
对预测结果进行评估,常用的手段是第6.1.1章讲到的 F 1 F_1 F1值;
由 于 异 常 检 测 问 题 一 般 异 常 的 样 本 较 少 , 因 此 我 们 不 能 直 接 用 以 下 方 法 : 由于异常检测问题一般异常的样本较少,因此我们不能直接用以下方法: 由于异常检测问题一般异常的样本较少,因此我们不能直接用以下方法:
样 本 预 测 正 确 数 总 样 本 数 \quad\\ \frac{样本预测正确数}{总样本数} 总样本数样本预测正确数
总 样 本 数 样 本 预 测 正 确 数 因 为 这 样 往 往 得 到 很 高 的 正 确 率 总样本数样本预测正确数因为这样往往得到很高的正确率 总样本数样本预测正确数因为这样往往得到很高的正确率 -
我们可以在交叉验证集训练模型选择合适的参数 ϵ \epsilon ϵ,使其能最大化 F 1 F_1 F1值。
异常检测算法VS监督学习
如果我们拥有足够多的带标签样本,那么看起来好像异常检测算法可以用监督学习中的分类问题替代,但实际上这两种算法的应用场景有所不同。
假设某个样本集中样本分为两类,我们规定正样本为y=1的样本,负样本为y=0的样本,这时可以根据下表选择算法:
异常检测算法 | 监督学习 |
---|---|
正样本个数很少,负样本个数很多 | 正样本和负样本的个数都很多 |
经常会有很多类型的异常,并且未来的异常有很多我们未知,我们很难通过小样本的异常去学习异常是什么 | 我们有足够的正样本,并且未来出现的正样本与我们现在存在的样本类似 |
如果一个样本正样本很少(如检测飞机引擎异常,正样本数为20,负样本数为10000),那么对于监督学习,很难从这些正样本中学习到足够的知识。
注意,对于垃圾邮件分类,尽管有很多类型的垃圾邮件,但我们还是会使用监督学习来进行分类,因为我们有很多垃圾邮件的例子
**如果样本足够大,异常检测算法也都可以转换成监督学习 **
设计异常检测算法的特征
特征转换
在进行异常检测时,有些特征并不服从正态分布,这时候我们可以将这些特征做一系列数学变换得到符合正态分布的新特征。这些数学特征可以是:
x
′
=
l
o
g
(
x
+
c
o
n
s
t
)
,
x
′
=
x
n
(
n
∈
R
)
,
.
.
.
x^{'} = log(x+const),x^{'} = x^{n}(n \in \R),...
x′=log(x+const),x′=xn(n∈R),...
增加特征
在训练异常检测算法时,我们希望对于正常样本的p(x)尽量大,异常样本的p(x)尽量小。但很多时候正常样本和异常样本的p(x)是模糊的,比如都很大,这样就导致算法很可能对样本误判。
我们可以通过对误判的样本进行分析,提取出误判样本中新的特征,增加特征的维度,从而提高检测算法的预测准确度。
特征组合
假设某数据中心要对计算机集群进行异常检测,假设有特征为 x 1 x_1 x1:CPU负载、 x 2 x_2 x2:网络流量。如果我想监测这些计算机执行代码的时候陷入了死循环的情况,根据执行代码陷入死循环时CPU负载很大但网络流量很小,这时我可以增加一个新特征 x 3 = x 1 x 2 x_3=\frac{x_1}{x_2} x3=x2x1,用来检测执行代码陷入死循环的异常。
多变量高斯分布
正如上面所描述的,我们可以增加特征的维度来更好地提高检测算法的预测准确度。假设某训练样本集包含两个特征,之前的做法是将两个特征的概率分别用两个正态分布拟合,这样可能会导致预测的结果是错误的,因为两个变量之间正相关或者负相关的关可能也会影响异常检测的结果。
多元高斯分布前期的输入参数构建:
- 假设样本有n个特征,则特征向量 x ∈ R n x \in \R^n x∈Rn。我们不再将这些特征的概率单独看成独立的正态分布(e.g. p ( x 1 ) , p ( x 2 ) , . . . p(x_1),p(x_2),... p(x1),p(x2),...),而是将所有特征值建立统一概率模型 p ( x ) p(x) p(x);
- 参数为: μ ∈ R n \mu \in \R^n μ∈Rn,协方差矩阵: Σ ∈ R n × n \Sigma \in \R^{n\times n} Σ∈Rn×n
多元高斯分布数学公式:
p
(
x
;
μ
,
Σ
)
=
1
(
2
π
)
n
/
2
∣
Σ
∣
1
/
2
e
x
p
(
−
1
2
(
x
−
μ
)
T
Σ
−
1
(
x
−
μ
)
)
p(x;\mu,\Sigma) = \frac{1}{(2\pi)^{n/2}|\Sigma|^{1/2}} exp(-\frac{1}{2}(x-\mu)^T\Sigma^{-1}(x-\mu))
p(x;μ,Σ)=(2π)n/2∣Σ∣1/21exp(−21(x−μ)TΣ−1(x−μ))
\space\space 多元高斯分布图像由均值 μ \mu μ 和协方差矩阵 Σ \Sigma Σ决定,其中 μ \mu μ决定多元高斯分布的中心点位置, 图像随 Σ \Sigma Σ变化如下:
- 改变
Σ
\Sigma
Σ 的值
- 改变
μ
\mu
μ的值:
使用多元高斯分布的异常检测
步骤
假设我们有训练集:{ x ( 1 ) , x ( 2 ) , . . . , x ( m ) {x^{(1)},x^{(2)},...,x^{(m)}} x(1),x(2),...,x(m)}
- 设训练集特征符合多元高斯分布,则我们可以通过训练集得到多元高斯分布参数:
μ = 1 m ∑ i = 1 m x ( i ) \mu = \frac{1}{m} \sum^{m}_{i = 1}x^{(i)} μ=m1i=1∑mx(i)
Σ = 1 m ∑ i = 1 m ( x ( i ) − μ ) ( x ( i ) − μ ) T \Sigma = \frac{1}{m}\sum^{m}_{i = 1}(x^{(i)} - \mu)(x^{(i)} - \mu)^T Σ=m1i=1∑m(x(i)−μ)(x(i)−μ)T - 对于一个给定的新样本x,计算:
p ( x ) = 1 ( 2 π ) n / 2 ∣ Σ ∣ 1 / 2 e x p ( − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) ) p(x) = \frac{1}{(2\pi)^{n/2}|\Sigma|^{1/2}} exp(-\frac{1}{2}(x-\mu)^T\Sigma^{-1}(x-\mu)) p(x)=(2π)n/2∣Σ∣1/21exp(−21(x−μ)TΣ−1(x−μ)) - 将p(x)与我们设置的阈值 ϵ \epsilon ϵ作比较,如果 p ( x ) < ϵ p(x) < \epsilon p(x)<ϵ,则判定该样本为异常样本
多元高斯分布与多个一元高斯分布
区别
\space\space
多个一元高斯分布其实是多元高斯分布的一种特殊情况,多个一元高斯分布的图像是轴对称的(如下图,对于两个特征的样本,多个一元高斯分布是关于x轴和y轴堆成,而多元高斯分布可以关于 y=x 对称)。
数学上看多个一元高斯分布的协方差矩阵是一个对角矩阵,形如:
Σ
=
(
σ
1
2
0
…
0
0
σ
2
2
⋱
⋮
⋮
⋱
⋱
0
0
0
…
σ
n
2
)
\Sigma = \begin{pmatrix} \sigma_1^2 & 0 & \dots& 0 \\ 0& \sigma_2^2 & \ddots&\vdots \\ \vdots& \ddots & \ddots&0\\ 0&0 & \dots& \sigma_n^2 \end{pmatrix}
Σ=⎝⎜⎜⎜⎜⎛σ120⋮00σ22⋱0…⋱⋱…0⋮0σn2⎠⎟⎟⎟⎟⎞
如果多元高斯分布的
Σ
\Sigma
Σ是对角矩阵的话,那么多元高斯分布和多个一元高斯分布是等价的
选择
原始高斯分布 (一元) | 多元高斯分布 |
---|---|
常用 | 不常用 |
想通过异常的组合值监测样本可以使用设计异常检测算法的特征这一部分提到的方法 | 想通过异常的组合值监测样本更推荐使用多元高斯分布,它可以捕捉这些关系 |
计算成本低,适合巨大规模的特征数量n(e.g. n=10,000/n=100,000) | 需要计算协方差矩阵,计算代价大 |
即使训练样本数量m少效果也不错 | 至少需要保证 m > n m\gt n m>n ,或者保证协方差可逆(吴恩达老师表示他只有在 m ≥ 10 m\ge 10 m≥10时才会使用) |
如果在使用多元高斯分布时发现 Σ \Sigma Σ不可逆,那么最大的可能是:
- m ≤ n m \leq n m≤n
- 存在冗余的特征(特征间线性相关),如: x 1 = x 2 + x 3 x_1 = x_2+x_3 x1=x2+x3