机器学习笔记——异常检测、推荐系统、大规模机器学习、图片OCR

163 阅读3分钟

前言

完结撒花!!!但是感觉只是了解了部分算法的思想,具体的实现还得找东西练一练。

该篇笔记包括:

  1. 第十五章————异常检测
  2. 第十六章————推荐系统
  3. 第十七章————大规模机器学习
  4. 第十八章————图片OCR

视频链接:[中英字幕]吴恩达机器学习系列课程

一、异常检测(Anomaly Detection)

1. 问题动机

正常和异常的数据集都很大的时候,我们可以使用监督学习的算法,对正常类别以及出现各种异常类别进行区分。

但是,当异常的数据集较小而且异常种类很多时,监督学习很难对异常有明确的感觉,我们更倾向于使用接下来要提到的异常检测算法。

2. 异常检测算法

2.1 数据划分

已知数据集有较大量的正常样本,以及少量异常样本,例如:10000正常样本,20异常样本。我们将其划分为:

  1. 训练集:6000正常样本
  2. 验证集:2000正常样本,10异常样本
  3. 测试集:2000正常样本,10异常样本

2.2 算法描述

给定训练集(x(1),x(2),...,x(m))(x^{(1)}, x^{(2)}, ..., x^{(m)}),样本的每一特征都互相独立且满足正态分布,即xjN(μj,σj2)x_j \sim N(\mu_j, \sigma_j^2)

得到样本每个特征的均值和方差:

μj=1mi=1mxj(i)\mu_j = \frac{1}{m} \sum_{i=1}^m x_j^{(i)}

σj2=1mi=1m(xj(i)μj)2\sigma_j^2 = \frac{1}{m} \sum_{i=1}^m (x_j^{(i)} - \mu_j)^2

给定需要预测的样本xx,计算该样本在已有均值和方差的情况下出现的概率,也就是正常的概率为:

p(x)=p(x1;μ1,σ12)×p(x2;μ2,σ22)×...×p(xn;μn,σn2)=j=1np(xj;μj,σj2)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)

该式子成立的隐含条件为样本的每一个特征互相独立

我们人为设置一个边界ϵ\epsilon用于判断当p(x)<ϵp(x) < \epsilon 是,xx为异常点

2.3 优化方法

  1. 选择合适的ϵ\epsilon:使用F1=2PRP+RF_1 = 2\frac{PR}{P+R}评估异常检测系统,其中PP为查准率,RR为召回率,使用交叉验证集对ϵ\epsilon作选择

  2. 对不服从正态分布的特征xx做操作如:xlog(x+C)x \leftarrow log(x + C)xxC x \leftarrow x^C ,使其近似呈正态分布

  3. 当不同特征如x1x_1x2x_2之间有相关性时,构造特征x3=f(x1,x2)x_3 = f(x_1, x_2)x3=x1x2x_3 = \frac{x_1}{x_2}来鉴别新样本中x1x_1x2x_2之间的关系正常

  4. 人工检查预测错误的异常点,增加对应的特征

3. 多元高斯分布的异常检测

3.1 算法描述

对每一特征都满足正态分布的训练集(x(1),x(2),...,x(m))(x^{(1)}, x^{(2)}, ..., x^{(m)}),求多元高斯分布的均值和协方差矩阵为

μ=1mi=1mx(i)\mu = \frac{1}{m} \sum_{i=1}^m x^{(i)}

Σ=1mi=1m(x(i)μ)(x(i)μ)T \Sigma = \frac{1}{m} \sum_{i=1}^m (x^{(i)} - \mu)(x^{(i)} - \mu)^T

给定需要预测的样本xx,计算该样本是正常的概率为:

p(x)=1(2π)n2Σ12exp(12(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))

3.2 与原本的模型比较

  1. 多元高斯分布能自动检测到各特征之间的相关性
  2. 多元高斯分布需要计算n×nn \times n维矩阵Σ\Sigma的逆,在nn即特征数量很多时表现不好
  3. 多元高斯分布只有在m>nm \gt n或者说矩阵Σ\Sigma可逆时可以使用(未考究)

二、推荐系统(Recommender Systems)

1. 问题描述

已知用户的数量nun_u,作品的数量nmn_m
r(i,j)r(i, j)表示用户jj对作品ii打过分,y(i,j)y^{(i,j)}表示用户用户jj对作品ii打的分,可记作nm×nun_m \times n_u维矩阵YY
x(j)x^{(j)}表示作品jj的特征,可记作nm×nn_m \times n维矩阵XXnn为特征的数量
θ(i)\theta^{(i)}表示用户的偏好,即(θ(i))Tx(i)(\theta^{(i)})^T x^{(i)}可以用于预测y(i,j)y^{(i,j)},可记作nu×nn_u \times n维矩阵XΘ1TX\Theta^1T
那么XΘTX\Theta^T可用于预测YY

  1. 已知用户对部分作品的打分作品的的特征,求用户的偏好,预测用户对其他作品的打分
  2. 已知用户对部分作品的打分用户的偏好,推断作品的特征

2. 基于内容的推荐算法

基于内容的推荐算法,适用的问题是:
已知用户对部分作品的打分作品的的特征,求用户的偏好,预测用户对其他作品的打分

基于内容的推荐算法本质是梯度下降求解线性回归的问题,优化目标为

对于每个用户jj,找到θ(j)\theta^{(j)},最小化损失函数如下

J(θ(j))=12i:r(i,j)=1((θ(j))Tx(i)y(i,j))2+λ2k=1n(θk(j))2J(\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(θ(1),...,θ(nu))=12j=1nui:r(i,j)=1((θ(j))Tx(i)y(i,j))2+λ2j=1nuk=1n(θk(j))2J(\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

得到梯度下降的迭代式如下:

θk(j)=θk(j)αi:r(i,j)=1(θ(j))Tx(i)y(i,j))xk(i)when 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)+λθk(j))when k0\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

3. 协同过滤

同理可得,已知用户对部分作品的打分用户的偏好,推断作品的特征可以转化为:

对于每个作品ii,找到x(i)x^{(i)},最小化损失函数如下:

J(x(i))=12j:r(i,j)=1((θ(j))Tx(i)y(i,j))2+λ2k=1n(xk(i))2J(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(1),...,x(nm))=12i=1nmj:r(i,j)=1((θ(j))Tx(i)y(i,j))2+λ2i=1nmk=1n(xk(i))2J(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

与基于内容的推荐算法相结合,可以在随机初始化Θ\ThetaXX的情况下,对它们依次作梯度下降,比如:

ΘXΘXΘ \Theta \rightarrow X \rightarrow \Theta \rightarrow X \rightarrow \Theta \cdots

或者,抽象出它们共同的优化目标,即最小化以下损失函数:

J(θ(1),...,θ(nu),x(1),...,x(nm))=12(i,j):r(i,j)=1((θ(j))Tx(i)y(i,j))2+λ2j=1nuk=1n(θk(j))2+λ2i=1nmk=1n(xk(i))2J(\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

仅有用户对部分作品打分的情况下,同时求解Θ\ThetaXX,其梯度下降的迭代式为

xk(i)=xk(i)α(j:r(i,j)=1(θ(j))Tx(i)y(i,j))θk(j)+λxk(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)})

θk(j)=θk(j)α(i:r(i,j)=1(θ(j))Tx(i)y(i,j))xk(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)})

4. 实现细节

  1. 对矩阵YY作均值化,可以使模型对未曾打分的用户的预测有意义
  2. 可以用x(i)x(j)|x^{(i)} - x^{(j)}|表示两个作品的相似程度

三、大规模机器学习(Large Scale Machine Learning)

1. 随机梯度下降、Min-Batch梯度下降和在线学习

不同于原本的批量梯度下降(Batch Gradient Descend)每次迭代需要遍历并减去每个样本的偏导数的加和,随机梯度下降(Stochastic Gradient Descend, or SGD)的步骤为:

  1. 打乱数据的顺序
  2. 遍历样本,每次迭代只减去一个样本的偏导数
  3. 重复以上步骤直到模型收敛

注意:随机梯度下降只能使模型在最优解周围徘徊

Min-Batch梯度下降介于Batch梯度下降和随机梯度下降之间,需要选择每轮迭代使用的样本数bb,步骤为:

  1. 遍历样本,每次迭代减去bb个样本求偏导数的加和
  2. 重复以上步骤直到模型收敛

在线学习(Online Learning)应用在有不断涌入的用户流和数据流的情况,直接对每个用户提供的数据作拟合

2. 优化技巧

  1. 画出学习曲线,预先检查模型是否是低偏差,是否能在大数据集的情况下被优化
  2. 设定随机梯度下降的学习率α=const1iterationsCounts+cosnt2\alpha = \frac{const_1}{iterationsCounts + cosnt_2},在迭代次数增加时,学习率下降,模型会收敛到最优解
  3. Map-reduce:将数据分散到多个计算机或者内核去并行处理,最后汇总到中心服务器。

四、图片OCR(Photo Optical Character Recognition)

从Photo OCR去看设计复杂的机器学习系统的一些理念

  1. 将一个复杂的机器学习系统分解为流水线上多个机器学习模块。例如,将图片OCR分解为:文本检测、字符分割、字符识别。滑动窗口+监督学习实现文本检测,监督学习完成字符分割和字符识别
  2. 人工数据:人工合成全新的数据 或者 在已有的数据上添加噪声
  3. 上限分析(Ceiling Analysis):人为提高某个模块的准确率,观察其对整个系统的准确率的影响,评估出最值得优化的一个模块