文章目录
15. 第十五章 异常检测(Anomaly Detection)
15.1 问题动机
数据集: { x ( 1 ) , x ( 2 ) , . . . , x ( m ) } \{ {x^{(1)}},{x^{(2)}},...,{x^{(m)}}\} {x(1),x(2),...,x(m)}
现在给出 x t e s t {x_{test}} xtest,它是异常的吗?
异常检测样例:欺诈检测;工业制造;监控数据中心计算机
15.2 高斯分布(Gaussian distribution)
高斯分布也叫正态分布。
x ∈ R x \in R x∈R,如果 x x x满足高斯分布,它的均值是 u u u,方差是 σ 2 {\sigma ^2} σ2,标准差 σ {\sigma} σ,记作 x ∼ N ( u , σ 2 ) x \sim N(u,{\sigma ^2}) x∼N(u,σ2)
P ( x ; u , σ 2 ) = 1 2 π σ exp ( − ( x − μ ) 2 2 σ 2 ) P(x;u,{\sigma ^2}) = {1 \over {\sqrt {2\pi } \sigma }}\exp ( - {{{{(x - \mu )}^2}} \over {2{\sigma ^2}}}) P(x;u,σ2)=2πσ1exp(−2σ2(x−μ)2)
参数计算: u = 1 m ∑ i = 1 m x ( i ) u = {1 \over m}\sum\limits_{i = 1}^m {{x^{(i)}}} u=m1i=1∑mx(i), σ 2 = 1 m ∑ i = 1 m ( x ( i ) − u ) 2 {\sigma ^2} = {1 \over m}\sum\limits_{i = 1}^m {{{({x^{(i)}} - u)}^2}} σ2=m1i=1∑m(x(i)−u)2
15.3 异常检测算法
-
选择你认为可能象征着异常的特征 x i {x_i} xi
-
计算参数: u 1 , . . . , u n , σ 1 2 , . . . , σ n 2 {u_1},...,{u_n},\sigma _1^2,...,\sigma _n^2 u1,...,un,σ12,...,σn2
u j = 1 m ∑ i = 1 m x j ( i ) {u_j} = {1 \over m}\sum\limits_{i = 1}^m {x_j^{(i)}} uj=m1i=1∑mxj(i), σ j 2 = 1 m ∑ i = 1 m ( x j ( i ) − u j ) 2 \sigma _j^2 = {1 \over m}\sum\limits_{i = 1}^m {{{(x_j^{(i)} - {u_j})}^2}} σj2=m1i=1∑m(xj(i)−uj)2
-
给出新的样本 x x x,计算 p ( x ; u , σ 2 ) p(x;u,{\sigma ^2}) p(x;u,σ2)
如果 p ( x ) < ε p(x) < \varepsilon p(x)<ε,则异常
15.4 开发和评估异常检测系统
一个真实具体的数值对评估方法是重要的。
当我们开发一个学习算法时,如果我们有评估方法,我们就可以更加轻易的做决定。
假设我们现在有一些有标签的数据,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 ( 2 ) , y c v ( 2 ) ) , . . . , ( x c v ( m ) , y c v ( m ) ) } \{ (x_{cv}^{(1)},y_{cv}^{(1)}),(x_{cv}^{(2)},y_{cv}^{(2)}),...,(x_{cv}^{(m)},y_{cv}^{(m)})\} {(xcv(1),ycv(1)),(xcv(2),ycv(2)),...,(xcv(m),ycv(m))}
测试集: { ( x t e s t ( 1 ) , y t e s t ( 1 ) ) , ( x t e s t ( 2 ) , y t e s t ( 2 ) ) , . . . , ( x t e s t ( m ) , y t e s t ( m ) ) } \{ (x_{test}^{(1)},y_{test}^{(1)}),(x_{test}^{(2)},y_{test}^{(2)}),...,(x_{test}^{(m)},y_{test}^{(m)})\} {(xtest(1),ytest(1)),(xtest(2),ytest(2)),...,(xtest(m),ytest(m))}
示例:飞机引擎示例
10000个正常样本y=0;20个异常样本y=1。
训练集:6000个正常样本
验证集:2000个正常样本y=0;10个异常样本y=1
测试集:2000个正常样本y=0;10个异常样本y=1
算法评估:
-
在训练集 { x ( 1 ) , x ( 2 ) , . . . , x ( m ) } \{ {x^{(1)}},{x^{(2)}},...,{x^{(m)}}\} {x(1),x(2),...,x(m)}上训练模型
-
在验证集或者测试集上进行预测:
-
混淆矩阵,计算 F 1 − s c o r e F1-score F1−score
-
根据验证集结果选择 ε \varepsilon {\kern 1pt} ε
15.5 异常检测VS.监督学习
异常检测:
- 非常少的正例样本(0~20)
- 大量负例样本
- 许多不同 "类型 "的异常现象。任何算法都很难从正例中学习异常现象是什么样子的。未来的异常现象可能看起来与我们目前看到的任何异常都不同
监督学习:
- 大量的正例和反例
- 足够多的正面例子让算法来了解正例是什么样的,未来正面的例子可能是与训练集中的例子相似
15.6 选择要使用什么特征
-
非高斯分布的特征:可以通过函数变换到高斯分布,log,指数等操作
-
异常检测的误差分析
如果正常样本希望 p ( x ) p(x) p(x)较大;如果异常样本希望 p ( x ) p(x) p(x)较小
经常遇到的问题是无论正常样本还是异常样本 p ( x ) p(x) p(x)都较大。这样可以通过在训练集上找到这个样本,看是否能通过添加新特征将两类样本区分开来
-
监测数据中心的计算机:选择那些在异常情况下可能会出现异常大或异常小的特征。
15.7 多元高斯分布
在单元高斯分布中,可能认为a点和b点同样好,但是实际却并非如此。
x
∈
R
n
x \in {R^n}
x∈Rn,
u
∈
R
n
u \in {R^n}
u∈Rn,
Σ
∈
R
n
×
n
\Sigma \in {R^{n \times n}}
Σ∈Rn×n(协方差矩阵)
可以对特征空间高度相关的情况建模,
Σ
\Sigma
Σ控制着分布
15.8 使用多元高斯分布的异常检测
-
多元高斯分布
参数 u ∈ R n u \in {R^n} u∈Rn, Σ ∈ R n × n \Sigma \in {R^{n \times n}} Σ∈Rn×n
参数计算: u = 1 m ∑ i = 1 m x ( i ) u = {1 \over m}\sum\limits_{i = 1}^m {{x^{(i)}}} u=m1i=1∑mx(i), Σ = 1 m ∑ i = 1 m ( x ( i ) − u ) ( x ( i ) − u ) T \Sigma = {1 \over m}\sum\limits_{i = 1}^m {({x^{(i)}} - u)} {({x^{(i)}} - u)^T} Σ=m1i=1∑m(x(i)−u)(x(i)−u)T -
多元高斯分布的异常检测
计算 u = 1 m ∑ i = 1 m x ( i ) u = {1 \over m}\sum\limits_{i = 1}^m {{x^{(i)}}} u=m1i=1∑mx(i), Σ = 1 m ∑ i = 1 m ( x ( i ) − u ) ( x ( i ) − u ) T \Sigma = {1 \over m}\sum\limits_{i = 1}^m {({x^{(i)}} - u)} {({x^{(i)}} - u)^T} Σ=m1i=1∑m(x(i)−u)(x(i)−u)T
计算新样本: p ( x ) = 1 ( 2 π ) n 2 ∣ Σ ∣ 1 2 exp ( − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) ) p(x) = {1 \over {{{(2\pi )}^{{n \over 2}}}|\Sigma {|^{{1 \over 2}}}}}\exp ( - {1 \over 2}{(x - \mu )^T}{\Sigma ^{ - 1}}(x - \mu )) p(x)=(2π)2n∣Σ∣211exp(−21(x−μ)TΣ−1(x−μ))
如果 p ( x ) < ε p(x) < \varepsilon p(x)<ε,则异常
-
原模型与多元对比
原模型 p ( x ) = p ( x 1 ; u 1 ; σ 1 2 ) × p ( x 2 ; u 2 ; σ 2 2 ) × . . . × p ( x n ; u n ; σ n 2 ) p(x) = p({x_1};{u_1};\sigma _1^2) \times p({x_2};{u_2};\sigma _2^2) \times ... \times p({x_n};{u_n};\sigma _n^2) p(x)=p(x1;u1;σ12)×p(x2;u2;σ22)×...×p(xn;un;σn2)相当于多个单元,是多元的特例:
原模型:
- 手动创建特征以捕获异常情况,采取不寻常的谷值组合
- 计算效率高,适合n较大时
- 训练集m较小时
多元高斯:
- 自动捕捉特征间的相关性
- 计算代价更高
- 必须保证m>n,或者是 Σ \Sigma Σ可逆
16. 第十六章 推荐系统(Recommender System)
16.1 问题规划
- 目前,许多大公司都在尝试搭建自己的推荐系统
- 学习一些特征学习的思想
例如:预测电影评分:根据一些用户多某些电影的打分,预测其对其他电影的打分起到偏好推荐的作用。
16.2 基于内容的推荐算法
-
基于内容的推荐系统
n u {n_u} nu表示用户数量; n m {n_m} nm表示电影数量; r ( i , j ) = 1 r(i,j) = 1 r(i,j)=1表示用户 j j j已经对电影 i i i打过分; y ( i , j ) {y^{(i,j)}} y(i,j)表示用户 j j j已经对电影 i i i打的分数(仅在 r ( i , j ) = 1 r(i,j) = 1 r(i,j)=1时有意义)
对于每个用户 j j j,学习参数 θ ( j ) ∈ R 3 {\theta ^{(j)}} \in {R^3} θ(j)∈R3,预测用户 j j j对电影 i i i的打分 ( θ ( j ) ) T x ( i ) {({\theta ^{(j)}})^T}{x^{(i)}} (θ(j))Tx(i)
-
问题规划
r ( i , j ) = 1 r(i,j) = 1 r(i,j)=1表示用户 j j j已经对电影 i i i打过分
y ( i , j ) {y^{(i,j)}} y(i,j)表示用户 j j j已经对电影 i i i打的分数(仅在 r ( i , j ) = 1 r(i,j) = 1 r(i,j)=1时有意义)
θ ( j ) {\theta ^{(j)}} θ(j)表示用户 j j j的参数向量
x ( i ) {x^{(i)}} x(i)表示电影 i i i的特征向量
预测用户 j j j对电影 i i i的分数 ( θ ( j ) ) T x ( i ) {({\theta ^{(j)}})^T}{x^{(i)}} (θ(j))Tx(i)
m ( j ) {m^{(j)}} m(j)表示用户 j j j打过分的电影数量
为了学习 θ ( j ) {\theta ^{(j)}} θ(j): min θ j 1 2 ∑ i : r ( i , j ) = 1 m ( ( θ ( j ) ) T x ( i ) − y ( i , j ) ) 2 + λ 2 ∑ k = 1 n ( θ k ( j ) ) 2 \mathop {\min }\limits_{{\theta ^j}} {1 \over 2}\sum\limits_{i:r(i,j) = 1}^m {{{({{({\theta ^{(j)}})}^T}{x^{(i)}} - {y^{(i,j)}})}^2} + {\lambda \over 2}\sum\limits_{k = 1}^n {{{(\theta _k^{(j)})}^2}} } θjmin21i:r(i,j)=1∑m((θ(j))Tx(i)−y(i,j))2+2λk=1∑n(θk(j))2
为了学习 θ ( 1 ) , θ ( 2 ) , . . . , θ ( n u ) {\theta ^{(1)}},{\theta ^{(2)}},...,{\theta ^{({n_u})}} θ(1),θ(2),...,θ(nu): J ( θ ( 1 ) , θ ( 2 ) , . . . , θ ( n u ) ) = min θ ( 1 ) , θ ( 2 ) , . . . , θ ( n u ) 1 2 ∑ j = 1 n u ∑ i : r ( i , j ) = 1 m ( ( θ ( j ) ) T x ( i ) − y ( i , j ) ) 2 + λ 2 ∑ j = 1 n u ∑ k = 1 n ( θ k ( j ) ) 2 J({\theta ^{(1)}},{\theta ^{(2)}},...,{\theta ^{({n_u})}}) = \mathop {\min }\limits_{{\theta ^{(1)}},{\theta ^{(2)}},...,{\theta ^{({n_u})}}} {1 \over 2}\sum\limits_{j = 1}^{{n_u}} {\sum\limits_{i:r(i,j) = 1}^m {{{({{({\theta ^{(j)}})}^T}{x^{(i)}} - {y^{(i,j)}})}^2}} } + {\lambda \over 2}\sum\limits_{j = 1}^{{n_u}} {\sum\limits_{k = 1}^n {{{(\theta _k^{(j)})}^2}} } J(θ(1),θ(2),...,θ(nu))=θ(1),θ(2),...,θ(nu)min21j=1∑nui:r(i,j)=1∑m((θ(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 m ( ( θ ( j ) ) T x ( i ) − y ( i , j ) ) x k ( i ) f o r k = 0 \theta _k^{(j)}: = \theta _k^{(j)} - \alpha \sum\limits_{i:r(i,j) = 1}^m {({{({\theta ^{(j)}})}^T}{x^{(i)}} - {y^{(i,j)}})x_k^{(i)}{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} for{\kern 1pt} {\kern 1pt} k = 0} θk(j):=θk(j)−αi:r(i,j)=1∑m((θ(j))Tx(i)−y(i,j))xk(i)fork=0
θ k ( j ) : = θ k ( j ) − α ( ∑ i : r ( i , j ) = 1 m ( ( θ ( j ) ) T x ( i ) − y ( i , j ) ) x k ( i ) + λ θ k ( j ) ) f o r k ≠ 0 \theta _k^{(j)}: = \theta _k^{(j)} - \alpha (\sum\limits_{i:r(i,j) = 1}^m {({{({\theta ^{(j)}})}^T}{x^{(i)}} - {y^{(i,j)}})x_k^{(i)}{\kern 1pt} + \lambda \theta _k^{(j)}){\kern 1pt} {\kern 1pt} {\kern 1pt} for{\kern 1pt} {\kern 1pt} k \ne 0} θk(j):=θk(j)−α(i:r(i,j)=1∑m((θ(j))Tx(i)−y(i,j))xk(i)+λθk(j))fork=0
16.3 协同过滤(Collaborative Filtering)
在基于内容的推荐算法中,我们需要 x 1 , x 2 {x_1},{x_2} x1,x2特征分别表示电影爱情,电影动作的程度,不过这通常是较难获取的。
现在假设 x 1 , x 2 {x_1},{x_2} x1,x2未知,而转去向用户获取 θ \theta θ,即对爱情或者动作电影的喜爱程度,提供偏好。
-
优化算法
给出 θ ( 1 ) , θ ( 2 ) , . . . , θ ( n u ) {\theta ^{(1)}},{\theta ^{(2)}},...,{\theta ^{({n_u})}} θ(1),θ(2),...,θ(nu),去学习 x ( i ) {x^{(i)}} x(i): min x ( i ) 1 2 ∑ j : r ( i , j ) = 1 m ( ( θ ( j ) ) T x ( i ) − y ( i , j ) ) 2 + λ 2 ∑ k = 1 n ( x k ( i ) ) 2 \mathop {\min }\limits_{{x^{(i)}}} {1 \over 2}\sum\limits_{j:r(i,j) = 1}^m {{{({{({\theta ^{(j)}})}^T}{x^{(i)}} - {y^{(i,j)}})}^2} + {\lambda \over 2}\sum\limits_{k = 1}^n {{{(x_k^{(i)})}^2}} } x(i)min21j:r(i,j)=1∑m((θ(j))Tx(i)−y(i,j))2+2λk=1∑n(xk(i))2
给出 θ ( 1 ) , θ ( 2 ) , . . . , θ ( n u ) {\theta ^{(1)}},{\theta ^{(2)}},...,{\theta ^{({n_u})}} θ(1),θ(2),...,θ(nu),去学习 x ( 1 ) , x ( 2 ) , . . . , x ( n m ) {x^{(1)}},{x^{(2)}},...,{x^{({n_m})}} x(1),x(2),...,x(nm): min x ( 1 ) , x ( 2 ) , . . . , x ( n m ) 1 2 ∑ i = 1 n m ∑ j : r ( i , j ) = 1 m ( ( θ ( j ) ) T x ( i ) − y ( i , j ) ) 2 + λ 2 ∑ i = 1 n m ∑ k = 1 n ( x k ( i ) ) 2 \mathop {\min }\limits_{{x^{(1)}},{x^{(2)}},...,{x^{({n_m})}}} {1 \over 2}\sum\limits_{i = 1}^{{n_m}} {\sum\limits_{j:r(i,j) = 1}^m {{{({{({\theta ^{(j)}})}^T}{x^{(i)}} - {y^{(i,j)}})}^2}} } + {\lambda \over 2}\sum\limits_{i = 1}^{{n_m}} {\sum\limits_{k = 1}^n {{{(x_k^{(i)})}^2}} } x(1),x(2),...,x(nm)min21i=1∑nmj:r(i,j)=1∑m((θ(j))Tx(i)−y(i,j))2+2λi=1∑nmk=1∑n(xk(i))2
-
协同过滤
给出 x ( 1 ) , x ( 2 ) , . . . , x ( n m ) {x^{(1)}},{x^{(2)}},...,{x^{({n_m})}} x(1),x(2),...,x(nm),可以计算 θ ( 1 ) , θ ( 2 ) , . . . , θ ( n u ) {\theta ^{(1)}},{\theta ^{(2)}},...,{\theta ^{({n_u})}} θ(1),θ(2),...,θ(nu)
给出 θ ( 1 ) , θ ( 2 ) , . . . , θ ( n u ) {\theta ^{(1)}},{\theta ^{(2)}},...,{\theta ^{({n_u})}} θ(1),θ(2),...,θ(nu),可以计算 x ( 1 ) , x ( 2 ) , . . . , x ( n m ) {x^{(1)}},{x^{(2)}},...,{x^{({n_m})}} x(1),x(2),...,x(nm)
那么是先有鸡还是先有蛋呢?
可以猜想出一个初始 θ \theta θ,然后按照 θ → x → θ → x → θ → x → θ → . . . \theta \to x \to \theta \to x \to \theta \to x \to \theta \to ... θ→x→θ→x→θ→x→θ→...的顺序更新。这样更新下去的条件是:每位用户都对数个电影进行了评价,并且每部电影都被数个用户评价过。
协同过滤算法是指:当你执行算法时,要观察大量的用户,观察这些用户的实际行动来协同地得到更佳的每个人对电影的评分。每位用户都在帮助算法更好地进行特征学习。
16.4 协同过滤算法
-
将上一节两个优化目标结合
同时最小化 θ ( 1 ) , θ ( 2 ) , . . . , θ ( n u ) {\theta ^{(1)}},{\theta ^{(2)}},...,{\theta ^{({n_u})}} θ(1),θ(2),...,θ(nu)和 x ( 1 ) , x ( 2 ) , . . . , x ( n m ) {x^{(1)}},{x^{(2)}},...,{x^{({n_m})}} x(1),x(2),...,x(nm):
J ( x ( 1 ) , x ( 2 ) , . . . , x ( n m ) , θ ( 1 ) , θ ( 2 ) , . . . , θ ( n u ) ) = 1 2 ∑ ( i , j ) : r ( i , j ) = 1 m ( ( θ ( j ) ) T x ( i ) − y ( i , j ) ) 2 + λ 2 ∑ i = 1 n m ∑ k = 1 n ( x k ( i ) ) 2 + λ 2 ∑ j = 1 n u ∑ k = 1 n ( θ k ( j ) ) 2 J({x^{(1)}},{x^{(2)}},...,{x^{({n_m})}},{\theta ^{(1)}},{\theta ^{(2)}},...,{\theta ^{({n_u})}}) = {1 \over 2}\sum\limits_{(i,j):r(i,j) = 1}^m {{{({{({\theta ^{(j)}})}^T}{x^{(i)}} - {y^{(i,j)}})}^2} + {\lambda \over 2}\sum\limits_{i = 1}^{{n_m}} {\sum\limits_{k = 1}^n {{{(x_k^{(i)})}^2}} } + {\lambda \over 2}\sum\limits_{j = 1}^{{n_u}} {\sum\limits_{k = 1}^n {{{(\theta _k^{(j)})}^2}} } } J(x(1),x(2),...,x(nm),θ(1),θ(2),...,θ(nu))=21(i,j):r(i,j)=1∑m((θ(j))Tx(i)−y(i,j))2+2λi=1∑nmk=1∑n(xk(i))2+2λj=1∑nuk=1∑n(θk(j))2
这时 x ∈ R n , θ ∈ R n x \in {R^n},\theta \in {R^n} x∈Rn,θ∈Rn舍弃 x 0 {x_0} x0,更加灵活
min x ( 1 ) , x ( 2 ) , . . . , x ( n m ) , θ ( 1 ) , θ ( 2 ) , . . . , θ ( n u ) J ( x ( 1 ) , x ( 2 ) , . . . , x ( n m ) , θ ( 1 ) , θ ( 2 ) , . . . , θ ( n u ) ) \mathop {\min }\limits_{{x^{(1)}},{x^{(2)}},...,{x^{({n_m})}},{\theta ^{(1)}},{\theta ^{(2)}},...,{\theta ^{({n_u})}}} J({x^{(1)}},{x^{(2)}},...,{x^{({n_m})}},{\theta ^{(1)}},{\theta ^{(2)}},...,{\theta ^{({n_u})}}) x(1),x(2),...,x(nm),θ(1),θ(2),...,θ(nu)minJ(x(1),x(2),...,x(nm),θ(1),θ(2),...,θ(nu))
-
协同过滤算法
-
随机初始化 θ ( 1 ) , θ ( 2 ) , . . . , θ ( n u ) {\theta ^{(1)}},{\theta ^{(2)}},...,{\theta ^{({n_u})}} θ(1),θ(2),...,θ(nu)和 x ( 1 ) , x ( 2 ) , . . . , x ( n m ) {x^{(1)}},{x^{(2)}},...,{x^{({n_m})}} x(1),x(2),...,x(nm)
-
使用梯度下降或者其他高级优化算法最小化 J ( x ( 1 ) , x ( 2 ) , . . . , x ( n m ) , θ ( 1 ) , θ ( 2 ) , . . . , θ ( n u ) ) J({x^{(1)}},{x^{(2)}},...,{x^{({n_m})}},{\theta ^{(1)}},{\theta ^{(2)}},...,{\theta ^{({n_u})}}) J(x(1),x(2),...,x(nm),θ(1),θ(2),...,θ(nu))
x k ( i ) : = x k ( i ) − α ( ∑ j : r ( i , j ) = 1 m ( ( θ ( j ) ) T x ( i ) − y ( i , j ) ) θ k ( j ) + λ x k ( i ) ) x_k^{(i)}: = x_k^{(i)} - \alpha (\sum\limits_{j:r(i,j) = 1}^m {({{({\theta ^{(j)}})}^T}{x^{(i)}} - {y^{(i,j)}})\theta _k^{(j)}{\kern 1pt} + \lambda x_k^{(i)}){\kern 1pt} {\kern 1pt} } xk(i):=xk(i)−α(j:r(i,j)=1∑m((θ(j))Tx(i)−y(i,j))θk(j)+λxk(i))
θ k ( j ) : = θ k ( j ) − α ( ∑ i : r ( i , j ) = 1 m ( ( θ ( j ) ) T x ( i ) − y ( i , j ) ) x k ( i ) + λ θ k ( j ) ) f o r k ≠ 0 \theta _k^{(j)}: = \theta _k^{(j)} - \alpha (\sum\limits_{i:r(i,j) = 1}^m {({{({\theta ^{(j)}})}^T}{x^{(i)}} - {y^{(i,j)}})x_k^{(i)}{\kern 1pt} + \lambda \theta _k^{(j)}){\kern 1pt} {\kern 1pt} {\kern 1pt} for{\kern 1pt} {\kern 1pt} k \ne 0} θk(j):=θk(j)−α(i:r(i,j)=1∑m((θ(j))Tx(i)−y(i,j))xk(i)+λθk(j))fork=0
-
预测用户 j j j对电影 i i i的打分 ( θ ( j ) ) T x ( i ) {({\theta ^{(j)}})^T}{x^{(i)}} (θ(j))Tx(i)
16.5 矢量化:低秩矩阵分解
找到相关的电影:
对于每个电影
i
i
i,我们学习
x
(
i
)
∈
R
n
{x^{(i)}} \in {R^n}
x(i)∈Rn
如何找到与电影 i i i相关的电影 j j j呢?
用 ∥ x ( i ) − x ( j ) ∥ \parallel {x^{(i)}} - {x^{(j)}}\parallel ∥x(i)−x(j)∥衡量两个电影的相似程度。
16.6 实现细节:均值规范化
问题:假设有一个用户没有对任何电影进行评价,那么通过上述算法得出的 θ \theta θ为全零向量,无法向该用户进行推荐。
17. 第十七章 大规模机器学习
17.1 大数据学习
“不是谁有最好的算法就能获胜。而是谁拥有最多的数据”。
“It’s not who has the best algorithm that wins. It’s who has the most data." ——[Banko and Brill, 2001]
17.2 随机梯度下降(Stochastic Gradient Descent,SGD)
问题:当数据量很大时,我们采用批量梯度下降法梯度更新会很慢。
批量梯度下降法:使用全体样本计算梯度
随机梯度下降法:每次只使用一个样本计算梯度
小批量梯度下降法:每次使用一小部分样本计算梯度
随机梯度下降法通常比批量梯度下降法收敛更快!
17.3 小批量梯度下降法(Mini-batch Gradient Descent)
随机梯度下降法无法利用一些并行化的操作,小批量梯度下降法通常更快!
17.4 随机梯度下降法收敛
检查是否收敛:
-
批量梯度下降法
绘制 J t r a i n ( θ ) {J_{train}}(\theta ) Jtrain(θ)关于迭代次数的函数图像, 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 {J_{train}}(\theta ) = {1 \over {2{m_{train}}}}\sum\limits_{i = 1}^{{m_{train}}} {{{({h_\theta }({x_{train}}^{(i)}) - {y_{train}}^{(i)})}^2}} Jtrain(θ)=2mtrain1i=1∑mtrain(hθ(xtrain(i))−ytrain(i))2, m m m很大,不好计算
-
随机梯度下降法
- cos t ( θ , ( x ( i ) , y ( i ) ) ) = 1 2 m ( h θ ( x ( i ) ) − y ( i ) ) 2 \cos t(\theta ,({x^{(i)}},{y^{(i)}})) = {1 \over {2m}}{({h_\theta }({x^{(i)}}) - {y^{(i)}})^2} cost(θ,(x(i),y(i)))=2m1(hθ(x(i))−y(i))2
- 学习期间,每次更新 θ \theta θ之前使用 ( x ( i ) , y ( i ) ) ({x^{(i)}},{y^{(i)}}) (x(i),y(i))计算 cos t ( θ , ( x ( i ) , y ( i ) ) ) \cos t(\theta ,({x^{(i)}},{y^{(i)}})) cost(θ,(x(i),y(i)))
- 每1000次迭代绘制过去1000次 cos t ( θ , ( x ( i ) , y ( i ) ) ) \cos t(\theta ,({x^{(i)}},{y^{(i)}})) cost(θ,(x(i),y(i)))平均值的图像
对于随机梯度下降法,如果图像波动过大,可增大迭代次数取平均;如果上升趋势,调小学习率;如果下降,良好;如果平直,出错。
学习率可以缓慢下降。
17.5 在线学习
适合大量数据流下,每次使用一个数据,用过即弃。
能够实时跟随用户偏好,例如CTR学习。
不使用固定数据集,而是连续的数据集。
17.6 减少映射与数据并行
Hadoop开源平台
18. 第十八章 应用示例:照片OCR
18.1 问题描述与OCR流水线
照片光学字符识别(Photo Optical Character Recognition)
OCR流程
18.2 滑动窗口(Sliding Windows)
-
文本识别
首先训练好一个可以对小图片中是否有字符进行分类的分类器,然后用窗口滑动框出原始图片的小区域,进行分类,最后将相邻很近且都有文字的地方连接成大矩阵(二维滑动,监督学习)。
-
再用一维滑动窗口分割出每个字符
-
字符分类(监督学习,多分类)
18.3 获取大量数据:人工数据合成
-
从零开始自行生成
对于OCR任务,可以获取不同的字库,将字体放到不同的背景上,然后用模糊算子或者仿射变换得到数据集。
-
通过引入失真来合成数据
例如:拉伸压缩变换
引入的失真应该代表测试集中的噪声/失真类型。
通常情况下,向你的数据添加纯粹的随机/无意义的噪音是没有帮助的。
-
讨论得到更多数据
在花费精力之前,请确保你有一个低偏差的分类器(绘制学习曲线)。例如,不断增加神经网络中的特征数/隐藏单元数,直到你有一个低偏差的分类器。
要获得10倍于我们目前所拥有的数据,会有多少工作?
- 人工合成数据
- 自己收集
- 众包(亚马逊众包平台)
18.4 顶层分析:每一部分工作怎么样
估算每个组成部分造成的误差(上限分析)。
核心思想:假设一个模快是完美的,看看它对提升整个系统的性能的增益是多少?值不值得花费大量的时间,避免浪费时间。木桶效应。不要凭直觉决定要干什么!!!
19. 第十九章 总结与感想
总结主要章节:
- 监督学习
- 线性回归;逻辑回归;神经网络,SVM
- 无监督学习
- k-means;PCA;异常检测
- 具体应用
- 推荐系统;大规模机器学习
- 构建机器学习系统的利器
- 偏差方差分析;正则化;决定下一步做什么;评估学习算法;学习曲线;误差分析;上限分析
有朝一日能够造福其他人的生活!!!