吴恩达机器学习课程笔记
引言 Introduction
机器学习有监督学习和无监督学习两大类。监督学习和无监督学习主要区分是有无Label标签。
- 监督学习是根据给定的输入样本对其进行预测,样本本身具有“正确答案”。监督学习分为分类Classification和回归Regression问题。两者的区别在于预测值是离散值还是连续值。
- 无监督学习的样本没有Label,根据样本群找出样本的结构,多出现于聚类Clustering问题。
线性回归 Linear Regression
Notation:
m = 训练样本数量
x‘s = 输入特征
y‘s = 输出特征
h = 假设函数
线性回归模型:
h
θ
(
x
)
=
θ
0
+
θ
1
x
h_{\theta}(x) = \theta_{0} + \theta_{1}x
hθ(x)=θ0+θ1x
定义一个损失函数J如下,求参数θ使该损失函数尽量小,即各样本 h(x) 尽可能接近对应的 y
J
(
θ
0
,
θ
1
)
=
1
2
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
J(\theta_{0},\theta_{1}) = \frac{1}{2m}\sum_{i=1}^m(h_{\theta}(x^{(i)})-y^{(i)})^{2}
J(θ0,θ1)=2m1i=1∑m(hθ(x(i))−y(i))2
假设θ0=0,绘制不同θ1时J的图形:
不难看出,θ1=1时,J(θ)取最小值,即最拟合样本集
进一步,当θ0不限制为0时,可以得到类似如下的三维曲面:
梯度下降 Gradient Descent
梯度下降Gradient descent算法能够有所依据地找到参数θ的局部最优解.以下是算法定义.(注意!参数组θ要在每一轮计算后同步更新)
其中α是学习率,适当大小的学习率可以有效避免收敛过慢以及不收敛的情况.一般来说,为了收敛损失函数,学习率会逐渐变小.
- 将梯度下降算法用于线性回归模型的损失函数中,我们可以计算得到如下偏导结果:
∂ ∂ θ j J ( θ 0 , θ 1 ) = ∂ ∂ θ j 1 2 m ∑ i = 1 m ( θ 0 + θ 1 x ( i ) − y ( i ) ) 2 \frac{∂}{∂\theta_{j}}J(\theta_{0},\theta_{1}) = \frac{∂}{∂\theta_{j}} \frac{1}{2m}\sum_{i=1}^{m}(\theta_{0}+\theta_{1}x^{(i)}-y^{(i)})^{2} ∂θj∂J(θ0,θ1)=∂θj∂2m1i=1∑m(θ0+θ1x(i)−y(i))2
当 j = 0 时 , ∂ ∂ θ 0 J ( θ 0 , θ 1 ) = 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 当j=0时,\frac{∂}{∂\theta_{0}}J(\theta_{0},\theta_{1}) = \frac{1}{m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)}) 当j=0时,∂θ0∂J(θ0,θ1)=m1i=1∑m(hθ(x(i))−y(i))
当 j = 1 时 , ∂ ∂ θ 1 J ( θ 0 , θ 1 ) = 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) ⋅ x 1 ( i ) 当j=1时,\frac{∂}{∂\theta_{1}}J(\theta_{0},\theta_{1}) = \frac{1}{m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})·x^{(i)}_{1} 当j=1时,∂θ1∂J(θ0,θ1)=m1i=1∑m(hθ(x(i))−y(i))⋅x1(i)
每次使用全部训练集进行一次梯度下降被称作Batch
多元线性回归 Multi-linear Regression
Notation:
xj = 该样本第j个特征值
x0 = 1
当对象具有多个特征时,线性回归模型被推广为:
h
θ
(
x
)
=
θ
0
+
θ
1
x
1
+
.
.
.
+
θ
n
x
n
h_{\theta}(x)=\theta_{0}+\theta_{1}x_{1}+...+\theta_{n}x_{n}
hθ(x)=θ0+θ1x1+...+θnxn
多元线性回归时梯度下降类似于一元线性回归,其中算法推广为:
θ
j
:
=
θ
j
−
α
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
⋅
x
j
(
i
)
\theta_{j}: =\theta_{j} - \frac{\alpha}{m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})·x_{j}^{(i)}
θj:=θj−mαi=1∑m(hθ(x(i))−y(i))⋅xj(i)
多元梯度下降技巧
- 特征缩放 Feature Scaling
将特征归一化可以有效的加速收敛速度,即尽可能令-1<=xi<=1
均值归一化 Mean Normalization
x i : = x i − A V G ( x i ) m a x ( x i ) − m i n ( x i ) , i ≠ 0 x_{i}:=\frac{x_{i}-AVG(x_{i})}{max(x_{i})-min(x_{i})},i≠0 xi:=max(xi)−min(xi)xi−AVG(xi),i=0 - 学习率 Learning Rate
过大的学习率可能导致J难以收敛甚至上升
过小的学习率会导致收敛过慢
正规方程 Normal Equation
正规方程通过矩阵,可以不用像batch迭代,就可以直接计算得到使损失函数最小的参数组θ
θ
=
(
X
T
X
)
−
1
X
T
y
\theta = (X^{T}X)^{-1}X^{T}y
θ=(XTX)−1XTy
此外,正规方程不需要特征缩放.
逻辑回归 Logistic Regression
注:虽然逻辑回归有“回归”,但其是分类算法
逻辑回归模型如下:
h
θ
(
x
)
=
g
(
θ
T
x
)
=
1
1
+
e
−
θ
T
x
h_{\theta}(x)=g(\theta^{T}x)=\frac{1}{1+e^{-\theta^{T}x}}
hθ(x)=g(θTx)=1+e−θTx1
其中g(z)函数被称为Sigmoid Function,也被叫做Logistic Function,其图像如下:
对于给定的x,对应的假设函数h被解释为 将x归类为正样本的概率,即:
h
θ
(
x
)
=
P
(
y
=
1
∣
x
;
θ
)
=
1
−
P
(
y
=
0
∣
x
;
θ
)
h_{\theta}(x)=P(y=1|x;\theta)=1-P(y=0|x;\theta)
hθ(x)=P(y=1∣x;θ)=1−P(y=0∣x;θ)
存在一组θ向量满足假设函数h恒等于0.5,该组θ向量所得到的θx=0被称为决策边界Decision Boundary.决策边界是假设函数h的属性,与数据集无关.
损失函数 Cost Function
定义损失函数如下:
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))
对于线性回归而言:
C
o
s
t
(
h
θ
(
x
)
,
y
)
=
1
2
(
h
θ
(
x
)
−
y
)
2
Cost(h_{\theta}(x),y)=\frac{1}{2}(h_{\theta}(x)-y)^{2}
Cost(hθ(x),y)=21(hθ(x)−y)2
而对于逻辑回归而言:
C
o
s
t
(
h
θ
(
x
)
,
y
)
=
{
−
l
o
g
(
h
θ
(
x
)
)
if y = 1
−
l
o
g
(
1
−
h
θ
(
x
)
)
if y = 0
=
−
y
l
o
g
(
h
θ
(
x
)
)
−
(
1
−
y
)
l
o
g
(
1
−
h
θ
(
x
)
)
Cost(h_{\theta}(x),y)= \begin{cases} -log(h_{\theta}(x))& \text{ if y = 1 } \\ -log(1 - h_{\theta}(x))& \text{ if y = 0 } \end{cases} =-ylog(h_{\theta}(x)) - (1 - y)log(1 - h_{\theta}(x))
Cost(hθ(x),y)={−log(hθ(x))−log(1−hθ(x)) if y = 1 if y = 0 =−ylog(hθ(x))−(1−y)log(1−hθ(x))
线性回归的损失函数对于逻辑回归模型而言可能是非凸函数(存在大量局部最优解),所以更换损失函数以适应梯度下降算法.
梯度下降 Gradient Descent
对逻辑回归的损失函数求偏导得:
∂
∂
θ
j
J
(
θ
)
=
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
⋅
x
j
(
i
)
\frac{∂}{∂\theta_{j}}J(\theta) = \frac{1}{m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})·x^{(i)}_{j}
∂θj∂J(θ)=m1i=1∑m(hθ(x(i))−y(i))⋅xj(i)
因此可得θ更新公式(梯度下降公式)为:
θ
j
:
=
θ
j
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
⋅
x
j
(
i
)
\theta_{j} := \theta_{j} - \alpha\frac{1}{m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})·x^{(i)}_{j}
θj:=θj−αm1i=1∑m(hθ(x(i))−y(i))⋅xj(i)
该公式看似和线性回归的梯度下降公式一样,但实际上由于假设函数h的不同,其公式也有不同
高级优化算法 Advanced Optimal Algorithm
在octave中可以通过调用fminunc函数来使用高级优化算法来代替梯度下降算法.首先,需要构造如下损失函数:
function [jVal, gradient] = costFunction(theta)
jVal = [code to compute J(θ)];
gradient(1) = [code to compute the partial derivative in respect to theta 0]
...
gradient(n+1) = [code to compute the partial derivative in respect to theta n]
end
然后再构造优化器,用fminunc函数对目标损失函数的θ进行优化:
% Set options for fminunc
options = optimset('GradObj', 'on', 'MaxIter', 400);
% Run fminunc to obtain the optimal theta
% This function will return theta and the cost
[theta, cost] = ...
fminunc(@(t)(costFunction(t, X, y)), initial theta, options);
多类别分类(一对多分类) One-vs-all
将多分类问题分解为多个一对多的二分类问题, 最后得到若干个分类器,不同分类器代表不同的正样本.将样本依次输入所有分类器,取可信度最高的分类器(所代表的正样本)为结果.
过拟合 Over-fitting
过拟合问题是指模型参数过度拟合训练集数据而缺乏泛化能力的现象.
解决过拟合有以下两点主要方法:
- 减少特征量:通过人工筛选或模型选择算法,但会丢失数据信息
- 正则化:为不同特征匹配不同权重,使不同特征对模型影响程度趋于合理.
正则化 Regularization
正则化通过减小参数值θ来简化假设模型,目的是为了避免过拟合!!!.
正则化线性回归
J
(
θ
)
=
1
2
m
[
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
+
λ
∑
j
=
1
n
θ
j
2
]
J(\theta)=\frac{1}{2m}\left[\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})^{2}+\lambda\sum_{j=1}^{n}\theta_{j}^{2}\right]
J(θ)=2m1[i=1∑m(hθ(x(i))−y(i))2+λj=1∑nθj2]
我们可以看到正则化的参数中不包含θ0.因此得到如下正则化梯度下降公式.
R
e
p
e
a
t
{
θ
0
:
=
θ
0
−
α
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
⋅
x
0
(
i
)
θ
j
:
=
θ
j
−
α
m
[
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
⋅
x
j
(
i
)
+
λ
θ
j
]
,
(
j
=
1
,
2
,
3
,
.
.
.
,
n
)
}
\begin{aligned} Repeat\{\\ &\theta_{0}: =\theta_{0} - \frac{\alpha}{m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})·x_{0}^{(i)}\\ &\theta_{j}: =\theta_{j} - \frac{\alpha}{m}\left[\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})·x_{j}^{(i)}+\lambda\theta_{j}\right],(j=1,2,3,...,n)\\ \} \end{aligned}
Repeat{}θ0:=θ0−mαi=1∑m(hθ(x(i))−y(i))⋅x0(i)θj:=θj−mα[i=1∑m(hθ(x(i))−y(i))⋅xj(i)+λθj],(j=1,2,3,...,n)
同样,正则化的正规方程(不管矩阵是否可逆)更新为:
正则化逻辑回归
正则化逻辑回归与正则化线性回归情况类似,其损失函数为:
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)=-\left[\frac{1}{m}\sum_{i=1}^{m}y^{(i)}log(h_{\theta}(x^{(i)})) + (1 - y^{(i)})log(1 - h_{\theta}(x^{(i)}))\right]+\frac{\lambda}{2m}\sum_{j=1}^{n}\theta_{j}^{2}
J(θ)=−[m1i=1∑my(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))]+2mλj=1∑nθj2
经过计算可得梯度下降公式和正则化线性回归公式表达相同,但由于假设函数h不同,两者并不是同一个算法.(对θ0都不进行正则化)
高级优化算法的正则化
和原本的算法类似,只是更新其中的损失函数J,以及对应的偏导数.(详细请查看上文“逻辑回归-高级优化算法”)
正则化参数λ的影响
附课程任务中不同λ参数的决策边界.
- λ=1:
- λ=0(过拟合):
- λ = 100(欠拟合)
神经网络 Neural Network
Notation:
a^(j)_i = 第j层第i个神经元的激活项
θ^(k) = 从k层到k+1层的权重矩阵
- 注:假设神经网络中layer j有s_(j)个单元, layer j+1有s_(j+1)个单元,那么θ^(j)的维度等于s_(j+1) x (s_(j)+1) (加的这个一是指偏置项)
前向传播 Forward Propogation
前向传播可以视作输入向量和权重矩阵的矩阵运算:
每次矩阵运算后都要为输出向量加一列向量作为偏置项.
最终得到了包含若干层权重矩阵的假设函数h_(θ)(x)
个人理解:相较于普通的逻辑回归,神经网络更像是迭代了多次的逻辑回归.通过多次迭代,特征向量不断被优化,而不是使用原始特征向量,因此得到的非线性假设函数以及结果都会更加优秀.
多元分类* Multi-classification
多元分类实则是一对多分类.假设函数所得一组向量,其中各元素代表是否为某一类别.
损失函数 Cost Function
根据任务的不同,可以将神经网络的分类问题分为二分类问题和多分类问题.二分类问题具有一个输出单元,多分类问题至少有三个输出单元.
h
Θ
(
x
)
∈
R
K
(
h
Θ
(
x
)
)
i
=
i
t
h
o
u
t
p
u
t
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
h_{Θ}(x)∈ℝ^{K} \quad (h_{Θ}(x))_{i} = i^{th} \; output \\ J(Θ)=-\frac{1}{m}\left[\sum_{i=1}^{m}\sum_{k=1}^{K}y_{k}^{(i)}log(h_{Θ}(x^{(i)}))_{k} + (1-y_{k}^{(i)})log(1-(h_{Θ}(x^{(i)}))_{k})\right] + \frac{\lambda}{2m}\sum_{l=1}^{L-1}\sum_{i=1}^{s_{l}}\sum_{j=1}^{s_{l+1}}(Θ_{ji}^{(l)})^{2}
hΘ(x)∈RK(hΘ(x))i=ithoutputJ(Θ)=−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
k是输出单元数,也可以理解为分类器数量.首先将每一位输出与gound truth对应计算损失和,再将所有样本进行求和.同时也要求所有正则化参数项的平方和.
反向传播算法 Backpropagation Algorithm
δ^{(l)}_{j}: 第l层第j个节点的误差,与前向传播的a^{(l)}_{j}相对应
If layer L = 4:
δ
(
4
)
=
a
(
4
)
−
y
δ
(
3
)
=
(
Θ
(
3
)
)
T
δ
(
4
)
.
∗
g
′
(
z
(
3
)
)
δ
(
2
)
=
(
Θ
(
2
)
)
T
δ
(
3
)
.
∗
g
′
(
z
(
2
)
)
n
o
δ
(
1
)
T
i
p
s
:
g
′
(
z
(
i
)
)
=
a
(
i
)
.
∗
(
1
−
a
(
i
)
)
\begin{aligned} &\delta^{(4)} = a^{(4)} - y\\ &\delta^{(3)} = (\Theta^{(3)})^{T}\delta^{(4)}.*g^{'}(z^{(3)})\\ &\delta^{(2)} = (\Theta^{(2)})^{T}\delta^{(3)}.*g^{'}(z^{(2)})\\ &no \quad \delta^{(1)}\\ &Tips:g^{'}(z^{(i)}) = a^{(i)}.*(1-a^{(i)}) \end{aligned}
δ(4)=a(4)−yδ(3)=(Θ(3))Tδ(4).∗g′(z(3))δ(2)=(Θ(2))Tδ(3).∗g′(z(2))noδ(1)Tips:g′(z(i))=a(i).∗(1−a(i))
通过以上计算就可以计算关于损失函数J的偏导数(不考虑正则项):
∂
∂
Θ
i
j
(
l
)
J
(
Θ
)
=
a
j
(
l
)
δ
i
(
l
+
1
)
\frac{∂}{∂\Theta^{(l)}_{ij}}J(\Theta) = a^{(l)}_{j}\delta^{(l+1)}_{i}
∂Θij(l)∂J(Θ)=aj(l)δi(l+1)
算法伪代码如下:
计算出偏导数后就可以使用梯度下降或者高级优化算法优化参数了.
使用注意
通常来说,需要将D和Θ两个矩阵进行向量化操作再代入运算.
- thetaVec = [ Theta1( : ); Theta2( : ) ]; % 矩阵向量化
- reshape( thetaVec( 1, 100 ), 10, 11 ); % 向量矩阵化
梯度检测 Gradient Checking
由于代码中的错误实现,梯度可能离正确的收敛情况有所差距.因此引入梯度检测来校验正确性.
d
d
θ
J
(
θ
)
≈
J
(
θ
+
ϵ
)
−
J
(
θ
−
ϵ
)
2
ϵ
,
ϵ
=
1
0
−
4
\frac{d}{d\theta}J(\theta)≈\frac{J(\theta+\epsilon)-J(\theta-\epsilon)}{2\epsilon}, \;\epsilon=10^{-4}
dθdJ(θ)≈2ϵJ(θ+ϵ)−J(θ−ϵ),ϵ=10−4
将估计梯度gradApprox和反向传播所求得DVec进行比较,若两者相近则可视为梯度正确.
- 注:梯度检测仅用于训练前,训练开始前需关闭该算法.
随机初始化 Random Initialization
零初始化Zero initialization会导致每次激活单元向后不同的单元传导时进行的计算相同(上图1用相同颜色的线表示计算相同),这会导致回传的误差项δ相同,从而造成每个隐藏层内部单元全部相同.这是冗余的,并且模型会因此难以学习到部分特征.
Theta = rand(m, n) * (2*INIT_EPSILON) - INIT_EPSILON % -epsilon < theta < epsilon
通过对于参数的随机初始化可以打破对称性,从而避免这个问题.
总结和注意事项 Tips
- 输入单元数和特征数相同,输出单元数和类别数相同
- 默认隐藏层为一层.如果大于一层,保证每层单元数一致;且单元数越多越好,通常为输入单元数的整数倍
- 训练神经网络大致分为六步:初始化参数-前向传播-构造损失函数-反向传播-梯度检测-模型优化
应用机器学习的建议 Advice For Applying
如果训练好的模型并没有达到预期效果,可以考虑从以下几方面着手进行改进:
- 收集更多数据集 ------fix high variance
- 选用更少的特征量,防止过拟合 ------fix high variance
- 获得额外的特征量 ------fix high bias
- 增加额外的多项式 ------fix high bias
- 改变正则化参数λ
但是这些尝试都比较耗时,接下来提及的方法可以帮助筛除无用的尝试.
评估假设 Evaluate Hypothesis
在模型选择时,多项式的情况往往难以确认,通过对比不同多项式假设的损失来选取假设.
- 将数据集按照6:2:2分为训练集、验证集和测试集.(验证集是为了避免模型过拟合训练集而在测试集上表现不佳的情况)
- 用训练集训练依次所有模型.
- 代入验证集,选取损失最小的模型.
- 用测试集评估选取模型的效果(成功率)
偏差和方差 Bias & Variance
随着多项式级数的增加,训练集的损失逐渐减小,而验证集和测试集可能因为过拟合而导致不降反升.依据上图我们可以确定:
- 高偏差bias问题即欠拟合问题,表现为训练集损失大,验证集损失大;
- 高方差variance问题即过拟合问题,表现为训练集损失小,验证集损失大.
正则化对于偏差和方差有一定影响.过大的λ会导致欠拟合,过小的λ会导致过拟合.通过假设评估,为模型选取最合适的λ.
学习曲线可以观察高偏差和高方差所带来的影响.
由图可得,对于高偏差模型,增加数据集所带来的收益微乎其微.
由图可得,对于高方差模型,增加训练集有利于缩小低训练集误差和高验证集误差之间的差距.
总结:对于高偏差模型,没必要增加数据集;对于高方差模型,有必要增加数据集
机器学习系统的设计 System Design
关于机器学习系统的设计,课程给出以下推荐步骤:
- 快速搭建简单模型,并代入验证集进行测试
- 画出学习曲线,确定优化方向
- 误差分析:人工分析错误样本,寻找解决方法
偏斜类分类误差评估 Evaluation Of Skewed Classes
偏斜类分类是指正负样本数量差距较大情况的分类,又称不对称分类.普通情况下的评估指标对于这种分类而言意义不大,因此引入偏斜类分类评估指标.
- 查准率Precision
Precision = (判断为正样本的正样本)/(判断为正样本的样本) - 查全率Recall
Recall = (判断为正样本的正样本)/(正样本)
以医院就诊为例.查准率就是诊断结果为确诊的正确率,查全率就是对于所有患者被确诊的概率.
查全率和查准率具有互逆的关系,所以只需要求模型不能出现低查全率或低查准率的情况.
Predict 1 if h_{θ}(x) >= threshold % 通过改变threshold来影响查全率和查准率
通过F1_Score来作为P/R的评估指标:F1 = 2PR / (P+R).该指标越高表示越优秀.
数据 Data
为了有一个高性能的学习算法,我们希望不要有高偏差或高方差.通过使用包含大量参数的模型来避免高偏差,通过使用大量数据来避免高方差.
支持向量机 Support Vector Machine
SVM由逻辑回归修改而来,其损失函数如下:
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(\theta) = C\sum^{m}_{i=1}\left[y^{(i)}cost_{1}(\theta^{T}x^{(i)})+(1-y^{(i)})cost_{0}(\theta^{T}x^{(i)})\right] + \frac{1}{2}\sum^{n}_{j=1}\theta^{2}_{j}
J(θ)=Ci=1∑m[y(i)cost1(θTx(i))+(1−y(i))cost0(θTx(i))]+21j=1∑nθj2
对应假设模型为:
h
θ
(
x
)
=
{
1
,
i
f
θ
T
x
≥
0
0
,
o
t
h
e
r
w
i
s
e
h_{\theta}(x)= \begin{cases} 1, \quad if \;\;\theta^{T}x ≥0\\ 0, \quad otherwise \end{cases}
hθ(x)={1,ifθTx≥00,otherwise
SVM分类器又叫做Large margin classifier,因为其优化目标的决策边界具有与样本保持最大间距的特点(如下图黑线所示).
此外,损失函数中的参数C对于决策边界也具有一定影响.C越大,决策边界对于异常点越敏感.(C相当于1/λ,关于λ对于偏差和方差的影响,同样也可以推导至C对于决策边界的影响)
关于大间隔分类器的数学原理*
将损失函数简化为:
J ( θ ) = 1 2 ∑ j = 1 n θ j 2 = 1 2 ∣ ∣ θ ∣ ∣ 2 J(\theta) = \frac{1}{2}\sum^{n}_{j=1}\theta^{2}_{j}=\frac{1}{2}||\theta||^{2} J(θ)=21j=1∑nθj2=21∣∣θ∣∣2
样本点p和θ内积就是样本点p投影到θ向量上的乘积p·||θ||.要最小化损失函数,即使||θ||尽量小.但同时要满足决策边界将样本点分离开的条件(p·||θ|| >= 1 或 p·||θ|| <= -1),所以样本点p在θ上的投影要尽量大.又因为θ始终垂直于决策边界.所以决策边界拥有最大间隔时,满足p大平均投影最大.
核函数 Kernel Function
核函数又叫做相似度函数,通过标记点l和核函数可以得到非线性的决策边界.
以下是一种核函数,叫做高斯核函数
s
i
m
i
l
a
r
i
t
y
(
x
,
l
(
i
)
)
=
e
x
p
(
−
∣
∣
x
−
l
(
i
)
∣
∣
2
2
σ
2
)
similarity(x,l^{(i)}) = exp(-\frac{||x-l^{(i)}||^{2}}{2σ^{2}})
similarity(x,l(i))=exp(−2σ2∣∣x−l(i)∣∣2)
将样本x依次匹配所有l代入核函数,对应得到若干f.把f作为原来的x,计算θf来进行预测
*核心思想:用标记点和核函数将特征x转换为新的特征f,从而得到非线性决策边界.
将m个训练样本作为标记点l_{i}
于是损失函数更新为:
J
(
θ
)
=
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
m
θ
j
2
J(\theta) = C\sum^{m}_{i=1}\left[y^{(i)}cost_{1}(\theta^{T}f^{(i)})+(1-y^{(i)})cost_{0}(\theta^{T}f^{(i)})\right] + \frac{1}{2}\sum^{m}_{j=1}\theta^{2}_{j}
J(θ)=Ci=1∑m[y(i)cost1(θTf(i))+(1−y(i))cost0(θTf(i))]+21j=1∑mθj2
其中,因为f是m个标记点l计算所得,所以f是m维向量,因此θ是m+1维向量.
以下表格是关于参数对于模型的影响:
参数大小 | 影响 |
---|---|
Large C | 低偏差, 高方差 |
Small C | 高偏差, 低方差 |
Large σ^2 | 高偏差,低方差 |
Small σ^2 | 低偏差,高方差 |
SVM作为逻辑回归模型推演的模型,两者具有一定相似度.以下是关于两者选取的意见:
- 如果n很大: 使用逻辑回归或者线性SVM
- 如果n很小,m适中: 使用带核函数的SVM
- 如果n很小,m很大: 增大n后,使用逻辑回归或线形SVM
聚类 Clustering
聚类算法属于无监督学习算法的一种,其样本无对应标签.
K-means算法 K-means Algorithm
如果一个聚类中心没有相应样本点,则删除或重新随机初始化.
优化目标 Optimization Objective
J
(
c
(
1
)
,
.
.
.
,
c
(
m
)
,
μ
1
,
.
.
.
,
μ
K
)
=
1
m
∑
i
=
1
m
∣
∣
x
(
i
)
−
μ
c
(
i
)
∣
∣
2
J(c^{(1)}, ..., c^{(m)}, μ_{1}, ..., μ_{K}) = \frac{1}{m}\sum^{m}_{i=1}||x^{(i)} - μ_{c^{(i)}}||^{2}
J(c(1),...,c(m),μ1,...,μK)=m1i=1∑m∣∣x(i)−μc(i)∣∣2
k-means优化算法又叫做失真算法.在k-means算法中每个for循环后都要进行计算,分别是针对c和μ进行优化.
随机初始化 Random Initialization
随机初始化的做法和SVM中标记点的选取一样: 随机选取k个样本点作为初始聚类中心.
多次随机初始化有利于避免局部最优解,在若干结果中选取损失最小的作为聚类结果.
选取聚类数量 Choice Of K
- 肘部方法(elbow method)
逐一画出不同K的损失函数J,如出现明显拐点(如左图示),则选取作为K.
- 服务后续任务法:根据不同K在后续任务中的表现来选取K.
降维 Dimensionality Reduction
降维是另一种无监督学习算法,顾名思义就是将高维特征用低维特征进行表示.该技术的应用有两个动机:
- 减少内存和磁盘空间占用,并且加速模型运行速度
- 使高维数据在低维可视化
主成分分析 Principal Component Analysis
将n维特征转换为k维特征:找到k个n维向量,将n维特征的样本点投影到其上.(n > k)
以下是主成分分析算法步骤:
- 数据预处理: 对所有n维特征样本点进行均值归一化;
- 计算样本的协方差(covariance matrix);
Σ = 1 m ∑ i = 1 m ( x ( i ) ) ( x ( i ) ) T \Sigma = \frac{1}{m}\sum^{m}_{i=1}(x^{(i)})(x^{(i)})^{T} Σ=m1i=1∑m(x(i))(x(i))T - 计算协方差Sigma的特征向量,取前k个向量作为k维空间的基础向量;
- 将基础向量和n维样本点x内积, 可得对应k维的样本点z.
压缩重现 Compression Reconstruction
主成分分析被视为一种压缩算法.下列公式展示了如何将压缩后的低维特征近似地还原出高维特征.
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)=Ureduce⋅z(i)
主成分数量选择 Choose Of Principal Component
寻找满足下列不等式的最小k值:
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^{m}_{i=1}||x^{(i)}-x^{(i)}_{approx}||^{2}}{\frac{1}{m}\sum^{m}_{i=1}||x^{(i)}||^{2}}≤0.01
m1∑i=1m∣∣x(i)∣∣2m1∑i=1m∣∣x(i)−xapprox(i)∣∣2≤0.01
在Octave中可以通过[U, S, V] = svd(Sigma)简化上述计算.其中S代表Sigma的特征矩阵.
1 − ∑ i = 1 k s i i ∑ i = 1 n s i i ≤ 0.01 1-\frac{\sum^{k}_{i=1}s_{ii}}{\sum^{n}_{i=1}s_{ii}}≤0.01 1−∑i=1nsii∑i=1ksii≤0.01
个人理解:原公式计算的是误差对于样本范围的比例,而误差来源于主成分压缩时丢弃的特征向量矩阵中后n-k个特征向量,所以简化公式计算的就是 被丢弃特征占全部特征的比例.只有当这种误差比(丢失率)低于一定阈值,才认为当前k值是可以被接受的.
异常检测 Anomaly Detection
异常检测通过样本特征计算对应的异常概率
异常检测和监督学习的对比
异常检测 | 监督学习 |
---|---|
偏斜性数据集 | 普通数据集 |
’标签‘不确定性 | 标签确定性 |
高斯分布 Gaussian Distribution
X
∼
N
(
μ
,
σ
2
)
P
(
x
∣
μ
,
σ
2
)
=
1
2
π
σ
e
x
p
(
−
(
x
−
μ
)
2
2
σ
2
)
X∼N(\mu, \sigma^{2})\\ P(x| \mu, \sigma^{2})=\frac{1}{\sqrt{2\pi}\sigma}exp\left(-\frac{(x-\mu)^{2}}{2\sigma^{2}}\right)
X∼N(μ,σ2)P(x∣μ,σ2)=2πσ1exp(−2σ2(x−μ)2)
其中,μ被称为均值,σ被称为标准差,σ^2被称为方差:
μ
=
1
m
∑
i
=
1
m
x
(
i
)
σ
2
=
1
m
∑
i
=
1
m
(
x
(
i
)
−
μ
)
2
\mu=\frac{1}{m}\sum^{m}_{i=1}x^{(i)}\\ \sigma^{2} = \frac{1}{m}\sum^{m}_{i=1}(x^{(i)}-\mu)^{2}
μ=m1i=1∑mx(i)σ2=m1i=1∑m(x(i)−μ)2
检测算法 Detection Algorithm
- 选取可能成为异常原因的特征;
- 计算各特征的均值和方差;
- 计算异常概率,如果概率小于ε则认为异常.
异常概率为各特征异常概率的乘积:
P ( x ) = ∏ j = 1 n p ( x j ∣ μ j , σ j 2 ) P(x)=\prod^{n}_{j=1}p(x_{j}|\mu_{j},\sigma^{2}_{j}) P(x)=j=1∏np(xj∣μj,σj2)
通过有标签的样本来评估检测算法
多变量高斯分布 Multivariate Gaussian Distribution
μ
∈
R
n
,
Σ
∈
R
n
×
n
(
协方差矩阵
)
P
(
x
∣
μ
,
Σ
)
=
1
(
2
π
)
n
2
∣
Σ
∣
e
x
p
(
−
(
x
−
μ
)
T
(
x
−
μ
)
2
Σ
)
\mu∈ℝ^{n},\Sigma∈ℝ^{n\times n}(协方差矩阵)\\ P(x|\mu,\Sigma)=\frac{1}{(2\pi)^{\frac{n}{2}}\sqrt{|\Sigma|}}exp\left(-\frac{(x-\mu)^{T}(x-\mu)}{2\Sigma}\right)
μ∈Rn,Σ∈Rn×n(协方差矩阵)P(x∣μ,Σ)=(2π)2n∣Σ∣1exp(−2Σ(x−μ)T(x−μ))
原模型是多元高斯分布的一种特殊情况,其图像关于各特征轴对称,隐含意思为各特征向量不相关;而多元高斯分布是更为广泛的情况.
推荐系统(应用) Recommend System
基于内容的推荐算法 Content-based Recommend Algorithm
推荐系统是基于打分机制的回归问题:依据样本分数训练模型,预测缺失值,推荐较高分数项.
Notation:
r(i, j) = 1: if user j has rated movie i;
y^(i, j): rating by user j on movie i;
θ^(j): parameter vector for user j;
x^(i): feature vector for movie i;
m^(j): number of movies rated by user j;
n_u: number of users.
优化目标
梯度更新公式
协同过滤算法 Collaborative Filtering Algorithm
引子:已知用户偏好参数θ和用户推荐分数,求目标特征x.
优化目标
依据上述两个问题及其优化目标,不难看出在分数给出的情况下可以通过x预估θ,也可以通过θ预估x.
于是,尝试随机猜测θ,并预估x,再用新的x预估θ.如此循环迭代得到一组目标特征x及用户偏好θ的方法叫做协同过滤
运用协同过滤的思想,并将两个优化模型进行结合,得到如下损失函数和优化目标,可以同时计算θ和x:
注:这里不再和惯例一样——为x和θ额外添加一维1值.模型可以自行学习到这个截距所对应的偏移量(别问为什么…真的搞不懂…)
算法步骤
- 初始化x和θ为较小的随机值;
- 计算损失函数并迭代优化x和θ.损失函数上面已展示,梯度优化公式如下:
- 通过优化结果x和θ,计算预测结果(θ^T)·x
大规模机器学习 Large Scale Machine Learning
随机梯度下降 Stochastic Gradient Descent
随机梯度下降法每次选取一个样本进行训练,参数针对该样本进行修改.
随机梯度下降法对比批量梯度下降法最大的差别在于不需要计算误差和便可以修改参数,这对于内存更加友好,训练速度也更快.
以下是算法步骤:
- 随机重排数据集
- R e p e a t { f o r i : = 1 , . . . , m { θ j : = θ j − α ( h θ ( x ( i ) ) − y ( i ) ) x j i ( f o r e v e r y j = 0 , . . . , n ) } } \begin{aligned} Repeat\{\\ &\begin{aligned} for\;i:=1,...,m\{\\ &\theta_{j}:=\theta_{j}-\alpha(h_{\theta}(x^{(i)})-y^{(i)})x^{i}_{j}\\ &(for\;every\;j=0,...,n)\\ \} \end{aligned} \\\} \end{aligned} Repeat{}fori:=1,...,m{}θj:=θj−α(hθ(x(i))−y(i))xji(foreveryj=0,...,n)
小批量梯度下降 Mini-batch Gradient Descent
Mini-batch梯度下降是随机梯度下降和批量梯度下降的一种折中算法,往往表现的更为出色.
以下是算法步骤:
减少映射 Map-reduce
只要学习算法包含如SUM(Func(x))形式,则可以使用减少映射的方法:
将训练集分成若干份,交给对应数量的计算单元并行计算误差和,最后汇总计算损失函数