前言
完结撒花!!!但是感觉只是了解了部分算法的思想,具体的实现还得找东西练一练。
该篇笔记包括:
- 第十五章————异常检测
- 第十六章————推荐系统
- 第十七章————大规模机器学习
- 第十八章————图片OCR
视频链接:[中英字幕]吴恩达机器学习系列课程
一、异常检测(Anomaly Detection)
1. 问题动机
在正常和异常的数据集都很大的时候,我们可以使用监督学习的算法,对正常类别以及出现各种异常类别进行区分。
但是,当异常的数据集较小而且异常种类很多时,监督学习很难对异常有明确的感觉,我们更倾向于使用接下来要提到的异常检测算法。
2. 异常检测算法
2.1 数据划分
已知数据集有较大量的正常样本,以及少量异常样本,例如:10000正常样本,20异常样本。我们将其划分为:
- 训练集:6000正常样本
- 验证集:2000正常样本,10异常样本
- 测试集:2000正常样本,10异常样本
2.2 算法描述
给定训练集 ( x ( 1 ) , x ( 2 ) , . . . , x ( m ) ) (x^{(1)}, x^{(2)}, ..., x^{(m)}) (x(1),x(2),...,x(m)),样本的每一特征都互相独立且满足正态分布,即 x j ∼ N ( μ j , σ j 2 ) x_j \sim N(\mu_j, \sigma_j^2) xj∼N(μj,σj2)
得到样本每个特征的均值和方差:
μ j = 1 m ∑ i = 1 m x j ( i ) \mu_j = \frac{1}{m} \sum_{i=1}^m x_j^{(i)} μj=m1i=1∑mxj(i)
σ j 2 = 1 m ∑ i = 1 m ( x j ( i ) − μ j ) 2 \sigma_j^2 = \frac{1}{m} \sum_{i=1}^m (x_j^{(i)} - \mu_j)^2 σj2=m1i=1∑m(xj(i)−μj)2
给定需要预测的样本 x x x,计算该样本在已有均值和方差的情况下出现的概率,也就是正常的概率为:
p ( x ) = p ( x 1 ; μ 1 , σ 1 2 ) × p ( x 2 ; μ 2 , σ 2 2 ) × . . . × p ( x n ; μ n , σ n 2 ) = ∏ j = 1 n p ( x j ; μ j , σ j 2 ) p(x) = p(x_1; \mu_1, \sigma_1^2) \times p(x_2; \mu_2, \sigma_2^2) \times... \times p(x_n; \mu_n, \sigma_n^2) = \prod_{j=1}^n p(x_j; \mu_j, \sigma_j^2) p(x)=p(x1;μ1,σ12)×p(x2;μ2,σ22)×...×p(xn;μn,σn2)=j=1∏np(xj;μj,σj2)
该式子成立的隐含条件为样本的每一个特征互相独立
我们人为设置一个边界 ϵ \epsilon ϵ用于判断当 p ( x ) < ϵ p(x) < \epsilon p(x)<ϵ是, x x x为异常点
2.3 优化方法
-
选择合适的 ϵ \epsilon ϵ:使用 F 1 = 2 P R P + R F_1 = 2\frac{PR}{P+R} F1=2P+RPR评估异常检测系统,其中 P P P为查准率, R R R为召回率,使用交叉验证集对$ \epsilon $作选择
-
对不服从正态分布的特征 x x x做操作如: x ← l o g ( x + C ) x \leftarrow log(x + C) x←log(x+C)、 x ← x C x \leftarrow x^C x←xC ,使其近似呈正态分布
-
当不同特征如 x 1 x_1 x1和 x 2 x_2 x2之间有相关性时,构造特征 x 3 = f ( x 1 , x 2 ) x_3 = f(x_1, x_2) x3=f(x1,x2)如 x 3 = x 1 x 2 x_3 = \frac{x_1}{x_2} x3=x2x1来鉴别新样本中 x 1 x_1 x1和 x 2 x_2 x2之间的关系正常
-
人工检查预测错误的异常点,增加对应的特征
3. 多元高斯分布的异常检测
3.1 算法描述
对每一特征都满足正态分布的训练集 ( 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_{i=1}^m x^{(i)} μ=m1i=1∑mx(i)
Σ = 1 m ∑ i = 1 m ( x ( i ) − μ ) ( x ( i ) − μ ) T \Sigma = \frac{1}{m} \sum_{i=1}^m (x^{(i)} - \mu)(x^{(i)} - \mu)^T Σ=m1i=1∑m(x(i)−μ)(x(i)−μ)T
给定需要预测的样本 x x x,计算该样本是正常的概率为:
p ( x ) = 1 ( 2 π ) n 2 ∣ Σ ∣ 1 2 e x p ( − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) ) p(x) = \frac{1}{(2\pi)^{\frac{n}{2}} |\Sigma|^{\frac{1}{2}} } exp(-\frac{1}{2} (x - \mu)^T \Sigma^{-1} (x - \mu)) p(x)=(2π)2n∣Σ∣211exp(−21(x−μ)TΣ−1(x−μ))
3.2 与原本的模型比较
- 多元高斯分布能自动检测到各特征之间的相关性
- 多元高斯分布需要计算 n × n n \times n n×n维矩阵 Σ \Sigma Σ的逆,在 n n n即特征数量很多时表现不好
- 多元高斯分布只有在 m > n m \gt n m>n或者说矩阵 Σ \Sigma Σ可逆时可以使用(未考究)
二、推荐系统(Recommender Systems)
1. 问题描述
已知用户的数量
n
u
n_u
nu,作品的数量
n
m
n_m
nm,
r
(
i
,
j
)
r(i, j)
r(i,j)表示用户
j
j
j对作品
i
i
i打过分,
y
(
i
,
j
)
y^{(i,j)}
y(i,j)表示用户用户
j
j
j对作品
i
i
i打的分,可记作
n
m
×
n
u
n_m \times n_u
nm×nu维矩阵
Y
Y
Y
x
(
j
)
x^{(j)}
x(j)表示作品
j
j
j的特征,可记作
n
m
×
n
n_m \times n
nm×n维矩阵
X
X
X,
n
n
n为特征的数量
θ
(
i
)
\theta^{(i)}
θ(i)表示用户的偏好,即
(
θ
(
i
)
)
T
x
(
i
)
(\theta^{(i)})^T x^{(i)}
(θ(i))Tx(i)可以用于预测
y
(
i
,
j
)
y^{(i,j)}
y(i,j),可记作
n
u
×
n
n_u \times n
nu×n维矩阵
X
Θ
1
T
X\Theta^1T
XΘ1T
那么
X
Θ
T
X\Theta^T
XΘT可用于预测
Y
Y
Y
- 已知用户对部分作品的打分和作品的的特征,求用户的偏好,预测用户对其他作品的打分
- 已知用户对部分作品的打分和用户的偏好,推断作品的特征
2. 基于内容的推荐算法
基于内容的推荐算法,适用的问题是:
已知用户对部分作品的打分和作品的的特征,求用户的偏好,预测用户对其他作品的打分
基于内容的推荐算法本质是梯度下降求解线性回归的问题,优化目标为
对于每个用户 j j j,找到 θ ( j ) \theta^{(j)} θ(j),最小化损失函数如下
J ( θ ( j ) ) = 1 2 ∑ i : r ( i , j ) = 1 ( ( θ ( j ) ) T x ( i ) − y ( i , j ) ) 2 + λ 2 ∑ k = 1 n ( θ k ( j ) ) 2 J(\theta^{(j)}) = \frac{1}{2} \sum_{i: r(i, j) = 1} ((\theta^{(j)})^T x^{(i)} - y^{(i, j)})^2 + \frac{\lambda}{2} \sum_{k=1}^{n}( \theta_k^{(j)} )^2 J(θ(j))=21i:r(i,j)=1∑((θ(j))Tx(i)−y(i,j))2+2λk=1∑n(θk(j))2
由于每个用户之间互不相关,可以对每个用户的优化目标的加和作为总的优化目标,即最小化
J ( θ ( 1 ) , . . . , θ ( n u ) ) = 1 2 ∑ j = 1 n u ∑ i : r ( i , j ) = 1 ( ( θ ( j ) ) T x ( i ) − y ( i , j ) ) 2 + λ 2 ∑ j = 1 n u ∑ k = 1 n ( θ k ( j ) ) 2 J(\theta^{(1)}, ..., \theta^{(n_u)}) = \frac{1}{2} \sum_{j=1}^{n_u} \sum_{i: r(i, j) = 1} ((\theta^{(j)})^T x^{(i)} - y^{(i, j)})^2 + \frac{\lambda}{2} \sum_{j=1}^{n_u} \sum_{k=1}^{n}( \theta_k^{(j)} )^2 J(θ(1),...,θ(nu))=21j=1∑nui:r(i,j)=1∑((θ(j))Tx(i)−y(i,j))2+2λj=1∑nuk=1∑n(θk(j))2
得到梯度下降的迭代式如下:
θ k ( j ) = θ k ( j ) − α ∑ i : r ( i , j ) = 1 ( θ ( j ) ) T x ( i ) − y ( i , j ) ) x k ( i ) w h e n k = 0 \theta_k^{(j)} = \theta_k^{(j)} - \alpha \sum_{i: r(i, j) = 1} (\theta^{(j)})^T x^{(i)} - y^{(i, j)})x_k^{(i)} when \space k = 0 θk(j)=θk(j)−αi:r(i,j)=1∑(θ(j))Tx(i)−y(i,j))xk(i)when k=0
θ k ( j ) = θ k ( j ) − α ( ∑ i : r ( i , j ) = 1 ( θ ( j ) ) T x ( i ) − y ( i , j ) ) x k ( i ) + λ θ k ( j ) ) w h e n k ≠ 0 \theta_k^{(j)} = \theta_k^{(j)} - \alpha ( \sum_{i: r(i, j) = 1} (\theta^{(j)})^T x^{(i)} - y^{(i, j)})x_k^{(i)} + \lambda \theta_k^{(j)})when \space k \ne 0 θk(j)=θk(j)−α(i:r(i,j)=1∑(θ(j))Tx(i)−y(i,j))xk(i)+λθk(j))when k=0
3. 协同过滤
同理可得,已知用户对部分作品的打分和用户的偏好,推断作品的特征可以转化为:
对于每个作品 i i i,找到 x ( i ) x^{(i)} x(i),最小化损失函数如下:
J ( x ( i ) ) = 1 2 ∑ j : r ( i , j ) = 1 ( ( θ ( j ) ) T x ( i ) − y ( i , j ) ) 2 + λ 2 ∑ k = 1 n ( x k ( i ) ) 2 J(x^{(i)}) = \frac{1}{2} \sum_{j: r(i, j) = 1} ((\theta^{(j)})^T x^{(i)} - y^{(i, j)})^2 + \frac{\lambda}{2} \sum_{k=1}^{n}( x_k^{(i)} )^2 J(x(i))=21j:r(i,j)=1∑((θ(j))Tx(i)−y(i,j))2+2λk=1∑n(xk(i))2
同理可得总的优化目标为最小化
J ( x ( 1 ) , . . . , x ( n m ) ) = 1 2 ∑ i = 1 n m ∑ j : r ( i , j ) = 1 ( ( θ ( j ) ) T x ( i ) − y ( i , j ) ) 2 + λ 2 ∑ i = 1 n m ∑ k = 1 n ( x k ( i ) ) 2 J(x^{(1)}, ..., x^{(n_m)}) = \frac{1}{2} \sum_{i=1}^{n_m} \sum_{j: r(i, j) = 1} ((\theta^{(j)})^T x^{(i)} - y^{(i, j)})^2 + \frac{\lambda}{2} \sum_{i=1}^{n_m} \sum_{k=1}^{n}( x_k^{(i)} )^2 J(x(1),...,x(nm))=21i=1∑nmj:r(i,j)=1∑((θ(j))Tx(i)−y(i,j))2+2λi=1∑nmk=1∑n(xk(i))2
与基于内容的推荐算法相结合,可以在随机初始化 Θ \Theta Θ或 X X X的情况下,对它们依次作梯度下降,比如:
Θ → X → Θ → X → Θ ⋯ \Theta \rightarrow X \rightarrow \Theta \rightarrow X \rightarrow \Theta \cdots Θ→X→Θ→X→Θ⋯
或者,抽象出它们共同的优化目标,即最小化以下损失函数:
J ( θ ( 1 ) , . . . , θ ( n u ) , x ( 1 ) , . . . , x ( n m ) ) = 1 2 ∑ ( i , j ) : r ( i , j ) = 1 ( ( θ ( j ) ) T x ( i ) − y ( i , j ) ) 2 + λ 2 ∑ j = 1 n u ∑ k = 1 n ( θ k ( j ) ) 2 + λ 2 ∑ i = 1 n m ∑ k = 1 n ( x k ( i ) ) 2 J(\theta^{(1)}, ..., \theta^{(n_u)}, x^{(1)}, ..., x^{(n_m)}) = \frac{1}{2} \sum_{(i, j): r(i, j) = 1} ((\theta^{(j)})^T x^{(i)} - y^{(i, j)})^2 + \frac{\lambda}{2} \sum_{j=1}^{n_u} \sum_{k=1}^{n}( \theta_k^{(j)} )^2 + \frac{\lambda}{2} \sum_{i=1}^{n_m} \sum_{k=1}^{n}( x_k^{(i)} )^2 J(θ(1),...,θ(nu),x(1),...,x(nm))=21(i,j):r(i,j)=1∑((θ(j))Tx(i)−y(i,j))2+2λj=1∑nuk=1∑n(θk(j))2+2λi=1∑nmk=1∑n(xk(i))2
在仅有用户对部分作品打分的情况下,同时求解 Θ \Theta Θ和 X X X,其梯度下降的迭代式为
x k ( i ) = x k ( i ) − α ( ∑ j : r ( i , j ) = 1 ( θ ( j ) ) T x ( i ) − y ( i , j ) ) θ k ( j ) + λ x k ( i ) ) x_k^{(i)} = x_k^{(i)} - \alpha ( \sum_{j: r(i, j) = 1} (\theta^{(j)})^T x^{(i)} - y^{(i, j)})\theta_k^{(j)} + \lambda x_k^{(i)}) xk(i)=xk(i)−α(j:r(i,j)=1∑(θ(j))Tx(i)−y(i,j))θk(j)+λxk(i))
θ k ( j ) = θ k ( j ) − α ( ∑ i : r ( i , j ) = 1 ( θ ( j ) ) T x ( i ) − y ( i , j ) ) x k ( i ) + λ θ k ( j ) ) \theta_k^{(j)} = \theta_k^{(j)} - \alpha ( \sum_{i: r(i, j) = 1} (\theta^{(j)})^T x^{(i)} - y^{(i, j)})x_k^{(i)} + \lambda \theta_k^{(j)}) θk(j)=θk(j)−α(i:r(i,j)=1∑(θ(j))Tx(i)−y(i,j))xk(i)+λθk(j))
4. 实现细节
- 对矩阵 Y Y Y作均值化,可以使模型对未曾打分的用户的预测有意义
- 可以用 ∣ x ( i ) − x ( j ) ∣ |x^{(i)} - x^{(j)}| ∣x(i)−x(j)∣表示两个作品的相似程度
三、大规模机器学习(Large Scale Machine Learning)
1. 随机梯度下降、Min-Batch梯度下降和在线学习
不同于原本的批量梯度下降(Batch Gradient Descend)每次迭代需要遍历并减去每个样本的偏导数的加和,随机梯度下降(Stochastic Gradient Descend, or SGD)的步骤为:
- 打乱数据的顺序
- 遍历样本,每次迭代只减去一个样本的偏导数
- 重复以上步骤直到模型收敛
注意:随机梯度下降只能使模型在最优解周围徘徊
Min-Batch梯度下降介于Batch梯度下降和随机梯度下降之间,需要选择每轮迭代使用的样本数 b b b,步骤为:
- 遍历样本,每次迭代减去 b b b个样本求偏导数的加和
- 重复以上步骤直到模型收敛
在线学习(Online Learning)应用在有不断涌入的用户流和数据流的情况,直接对每个用户提供的数据作拟合
2. 优化技巧
- 画出学习曲线,预先检查模型是否是低偏差,是否能在大数据集的情况下被优化
- 设定随机梯度下降的学习率 α = c o n s t 1 i t e r a t i o n s C o u n t s + c o s n t 2 \alpha = \frac{const_1}{iterationsCounts + cosnt_2} α=iterationsCounts+cosnt2const1,在迭代次数增加时,学习率下降,模型会收敛到最优解
- Map-reduce:将数据分散到多个计算机或者内核去并行处理,最后汇总到中心服务器。
四、图片OCR(Photo Optical Character Recognition)
从Photo OCR去看设计复杂的机器学习系统的一些理念
- 将一个复杂的机器学习系统分解为流水线上多个机器学习模块。例如,将图片OCR分解为:文本检测、字符分割、字符识别。滑动窗口+监督学习实现文本检测,监督学习完成字符分割和字符识别
- 人工数据:人工合成全新的数据 或者 在已有的数据上添加噪声
- 上限分析(Ceiling Analysis):人为提高某个模块的准确率,观察其对整个系统的准确率的影响,评估出最值得优化的一个模块