【吴恩达机器学习笔记】9异常检测、推荐系统

15异常检测(Anomaly Detection)

15.1 问题的动机(Problem Motivation)

异常检测(Anomaly detection)问题是机器学习算法的一个常见应用。它虽然主要用于非监督学习问题,但从某些角度看,它又类似于一些监督学习问题。

什么是异常检测呢?给定数据集 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 是不是异常的,即这个测试数据不属于该组数据的几率如何。我们所构建的模型应该能根据该测试数据的位置告诉我们其属于一组数据的可能性 p ( x ) p(x) p(x)
在这里插入图片描述
上图中,在蓝色圈内的数据属于该组数据的可能性较高,而越是偏远的数据,其属于该组数据的可能性就越低。

这种方法称为密度估计,表达如下:

i f p ( x ) { < ε a n o m a l y   < = ε n o r m a l if \quad p(x) \begin{cases} < \varepsilon & anomaly \\ \ <= \varepsilon & normal \end{cases} ifp(x){<ε <=εanomalynormal

欺诈检测:

x ( i ) = 用 户 的 第 i 个 活 动 特 征 x^{(i)} = {用户的第i个活动特征} x(i)=i

模型 p ( x ) p(x) p(x) 为其属于一组数据的可能性,通过 p ( x ) < ε p(x) < \varepsilon p(x)<ε检测非正常用户。

异常检测主要用来识别欺骗:

  • eg1:在线采集而来的有关用户的数据,一个特征向量中可能会包含如:用户多久登录一次,访问过的页面,在论坛发布的帖子数量,甚至是打字速度等。尝试根据这些特征构建一个模型,可以用这个模型来识别那些不符合该模式的用户。
  • eg2:检测一个数据中心,特征可能包含:内存使用情况,被访问的磁盘数量,CPU的负载,网络的通信量等。根据这些特征可以构建一个模型,用来判断某些计算机是不是有可能出错了。

15.2 高斯分布(Gaussian Distribution)

高斯分布,也称为正态分布。

如果认为变量 x x x 符合高斯分布 x ∼ N ( μ , σ 2 ) x \sim N(\mu, \sigma^2) xN(μ,σ2)则其概率密度函数为:
p ( x , μ , σ 2 ) = 1 2 π σ exp ⁡ ( − ( x − μ ) 2 2 σ 2 ) p(x,\mu,\sigma^2)=\frac{1}{\sqrt{2\pi}\sigma}\exp\left(-\frac{(x-\mu)^2}{2\sigma^2}\right) p(x,μ,σ2)=2π σ1exp(2σ2(xμ)2)

可以利用已有的数据来预测总体中的 μ μ μ σ 2 σ^2 σ2的计算方法如下:

μ = 1 m ∑ i = 1 m x ( i ) \mu=\frac{1}{m}\sum\limits_{i=1}^{m}x^{(i)} μ=m1i=1mx(i)

σ 2 = 1 m ∑ i = 1 m ( x ( i ) − μ ) 2 \sigma^2=\frac{1}{m}\sum\limits_{i=1}^{m}(x^{(i)}-\mu)^2 σ2=m1i=1m(x(i)μ)2
在这里插入图片描述
注:机器学习中对于方差通常只除以 m m m而非统计学中的 ( m − 1 ) (m-1) (m1)。在实际使用中,到底是选择使用 1 / m 1/m 1/m还是 1 / ( m − 1 ) 1/(m-1) 1/(m1)其实区别很小,只要有一个还算大的训练集,在机器学习领域大部分人更习惯使用 1 / m 1/m 1/m这个版本的公式。

15.3 算法 (Algorithm)

本节应用高斯分布开发异常检测算法。

异常检测算法:对于给定的数据集 x ( 1 ) , x ( 2 ) , . . . , x ( m ) x^{(1)},x^{(2)},...,x^{(m)} x(1),x(2),...,x(m),要针对每一个特征计算 μ \mu μ σ 2 \sigma^2 σ2 的估计值。

μ j = 1 m ∑ i = 1 m x j ( i ) \mu_j=\frac{1}{m}\sum\limits_{i=1}^{m}x_j^{(i)} μj=m1i=1mxj(i)

σ j 2 = 1 m ∑ i = 1 m ( x j ( i ) − μ j ) 2 \sigma_j^2=\frac{1}{m}\sum\limits_{i=1}^m(x_j^{(i)}-\mu_j)^2 σj2=m1i=1m(xj(i)μj)2

一旦获得了平均值和方差的估计值,给定新的一个训练实例,根据模型计算 p ( x ) p(x) p(x)

p ( x ) = ∏ j = 1 n p ( x j ; μ j , σ j 2 ) = ∏ j = 1 1 1 2 π σ j e x p ( − ( x j − μ j ) 2 2 σ j 2 ) p(x)=\prod\limits_{j=1}^np(x_j;\mu_j,\sigma_j^2)=\prod\limits_{j=1}^1\frac{1}{\sqrt{2\pi}\sigma_j}exp(-\frac{(x_j-\mu_j)^2}{2\sigma_j^2}) p(x)=j=1np(xj;μj,σj2)=j=112π σj1exp(2σj2(xjμj)2)

p ( x ) < ε p(x) < \varepsilon p(x)<ε时,为异常。
在这里插入图片描述
上图的三维图表示的是密度估计函数, z z z轴为根据两个特征的值所估计 p ( x ) p(x) p(x)值。选择一个 ε \varepsilon ε,将 p ( x ) = ε p(x) = \varepsilon p(x)=ε作为判定边界,当 p ( x ) > ε p(x) > \varepsilon p(x)>ε时预测数据为正常数据,否则为异常。

15.4 开发和评价一个异常检测系统(Developing and Evaluating an Anomaly Detection System )

异常检测算法是一个非监督学习算法,意味着无法根据结果变量 y y y 的值来判断数据是否真的是异常的。需要另一种方法来帮助检验算法是否有效。当开发一个异常检测系统时,从带标记(异常或正常)的数据着手,从其中选择一部分正常数据用于构建训练集,然后用剩下的正常数据和异常数据混合的数据构成交叉检验集和测试集。
在这里插入图片描述
具体的评价方法如下:

  1. 根据测试集数据,估计特征的平均值和方差并构建 p ( x ) p(x) p(x)函数
  2. 对交叉检验集,尝试使用不同的 ε \varepsilon ε值作为阀值,并预测数据是否异常,根据 F 1 F1 F1值或者查准率与查全率的比例来选择 ε \varepsilon ε
  3. 选出 ε \varepsilon ε 后,针对测试集进行预测,计算异常检验系统的 F 1 F1 F1值,或者查准率与查全率之比
    在这里插入图片描述

15.5 异常检测与监督学习对比( Anomaly Detection vs. Supervised Learning)

之前构建的异常检测系统也使用了带标记的数据,与监督学习有些相似,下面的对比有助于选择采用监督学习还是异常检测:

异常检测监督学习
非常少量的正向类(异常数据 y = 1 y=1 y=1), 大量的负向类( y = 0 y=0 y=0同时有大量的正向类和负向类
许多不同种类的异常,非常难。根据非常 少量的正向类数据来训练算法。有足够多的正向类实例,足够用于训练 算法,未来遇到的正向类实例可能与训练集中的非常近似。
未来遇到的异常可能与已掌握的异常、非常的不同。
例如: 欺诈行为检测 生产(例如飞机引擎)检测数据中心的计算机运行状况例如:邮件过滤器 天气预报 肿瘤分类

15.6 选择特征(Choosing What Features to Use)

对于异常检测算法,使用的特征是至关重要的,下面介绍如何选择特征:

异常检测假设特征符合高斯分布,如果数据的分布不是高斯分布,异常检测算法也能够工作,但是最好还是将数据转换成高斯分布,例如使用对数函数: x = l o g ( x + c ) x= log(x+c) x=log(x+c),其中 c c c 为非负常数; 或者 x = x c x=x^c x=xc c c c为 0-1 之间的一个分数,等方法。(在python中,通常用np.log1p()函数, l o g 1 p log1p log1p就是 l o g ( x + 1 ) log(x+1) log(x+1),可以避免出现负数结果,反向函数就是np.expm1())

误差分析: 一个常见的问题是一些异常的数据可能也会有较高的 p ( x ) p(x) p(x)值,因而被算法认为是正常的。这种情况下可以分析那些被算法错误预测为正常的数据,观察能否找出一些问题。可能能从问题中发现需要增加一些新的特征,增加这些新特征后获得的新算法能够更好地进行异常检测。

异常检测误差分析: 通常可以通过将一些相关的特征进行组合,来获得一些新的更好的特征(异常数据的该特征值异常地大或小),如在检测数据中心的计算机状况的例子中,可以用CPU负载与网络通信量的比例作为一个新的特征,如果该值异常地大,便有可能意味着该服务器是陷入了一些问题中。

15.7 多元高斯分布( Multivariate Gaussian Distribution)

假使有两个相关的特征,而且这两个特征的值域范围比较宽,这种情况下,一般的高斯分布模型可能不能很好地识别异常数据。原因在于一般的高斯分布模型尝试的是去同时抓住两个特征的偏差,因此创造出一个比较大的判定边界。

下图中是两个相关特征,洋红色的线(根据ε的不同其范围可大可小)是一般的高斯分布模型获得的判定边界,很明显绿色的X所代表的数据点很可能是异常值,但是其 p ( x ) p(x) p(x)值却仍然在正常范围内。多元高斯分布将创建像图中蓝色曲线所示的判定边界。
在这里插入图片描述
在一般的高斯分布模型中,计算 p ( x ) p(x) p(x) 的方法是:通过分别计算每个特征对应的几率然后将其累乘起来,在多元高斯分布模型中,将构建特征的协方差矩阵,用所有的特征一起来计算 p ( x ) p(x) p(x)

首先计算所有特征的平均值,然后再计算协方差矩阵:
p ( x ) = ∏ j = 1 n p ( x j ; μ , σ j 2 ) = ∏ j = 1 n 1 2 π σ j e x p ( − ( x j − μ j ) 2 2 σ j 2 ) p(x)=\prod_{j=1}^np(x_j;\mu,\sigma_j^2)=\prod_{j=1}^n\frac{1}{\sqrt{2\pi}\sigma_j}exp(-\frac{(x_j-\mu_j)^2}{2\sigma_j^2}) p(x)=j=1np(xj;μ,σj2)=j=1n2π σj1exp(2σj2(xjμj)2)

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

Σ = 1 m ∑ i = 1 m ( x ( i ) − μ ) ( x ( i ) − μ ) T = 1 m ( X − μ ) T ( X − μ ) \Sigma = \frac{1}{m}\sum_{i=1}^m(x^{(i)}-\mu)(x^{(i)}-\mu)^T=\frac{1}{m}(X-\mu)^T(X-\mu) Σ=m1i=1m(x(i)μ)(x(i)μ)T=m1(Xμ)T(Xμ)

其中 μ \mu μ 是一个向量,其每一个单元都是原特征矩阵中一行数据的均值。最后计算多元高斯分布的 p ( x ) p\left( x \right) p(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\left(-\frac{1}{2}(x-\mu)^T\Sigma^{-1}(x-\mu)\right) p(x)=(2π)2nΣ211exp(21(xμ)TΣ1(xμ))

其中: ∣ Σ ∣ |\Sigma| Σ是定矩阵, Σ − 1 \Sigma^{-1} Σ1 是逆矩阵。
在这里插入图片描述
上图是5个不同的模型,从左往右依次分析:

  1. 是一个一般的高斯分布模型
  2. 通过协方差矩阵,令特征1拥有较小的偏差,同时保持特征2的偏差
  3. 通过协方差矩阵,令特征2拥有较大的偏差,同时保持特征1的偏差
  4. 通过协方差矩阵,在不改变两个特征的原有偏差的基础上,增加两者之间的正相关性
  5. 通过协方差矩阵,在不改变两个特征的原有偏差的基础上,增加两者之间的负相关性

多元高斯分布模型与原高斯分布模型的关系:

原本的高斯分布模型是多元高斯分布模型的一个子集,即像上图中的第1、2、3,3个例子所示,如果协方差矩阵只在对角线的单位上有非零的值时,即为原本的高斯分布模型了。

原高斯分布模型和多元高斯分布模型的比较:

原高斯分布模型多元高斯分布模型
不能捕捉特征之间的相关性 但可以通过将特征进行组合的方法来解决自动捕捉特征之间的相关性
计算代价低,能适应大规模的特征计算代价较高 训练集较小时也同样适用
必须要有 m > n m>n m>n,不然的话协方差矩阵 Σ \Sigma Σ不可逆的,通常需要 m > 10 n ​ m>10n​ m>10n 另外特征冗余也会导致协方差矩阵不可逆

原高斯分布模型被广泛使用着,如果特征之间在某种程度上存在相互关联的情况,可以通过构造新新特征的方法来捕捉这些相关性。如果训练集不是太大,并且没有太多的特征,可以使用多元高斯分布模型。

15.8 使用多元高斯分布进行异常检测(Anomaly Detection using the Multivariate Gaussian Distribution)

参数拟合或参数估计问题:有一组样本 x ( 1 ) , x ( 2 ) , . . . , x ( m ) {{{ x^{(1)},x^{(2)},...,x^{(m)}} }} x(1),x(2),...,x(m)是一个 n n n维向量,猜想样本来自一个多元高斯分布。如何尝试估计参数 μ \mu μ Σ \Sigma Σ 以及标准公式?

设置 μ \mu μ 是训练样本的平均值: μ = 1 m ∑ i = 1 m x ( i ) \mu=\frac{1}{m}\sum_{i=1}^{m}x^{(i)} μ=m1i=1mx(i)

并设置 Σ \Sigma Σ
Σ = 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=1m(x(i)μ)(x(i)μ)T
在这里插入图片描述
在这里插入图片描述

16推荐系统(Recommender Systems)

16.1 问题形式化(Problem Formulation)

介绍推荐系统有两个原因:

  • 它是机器学习中的一个重要的应用。它在学术界它占了很小的份额。但是许多有能力构建这些系统的科技企业,他们似乎在很多企业中占据很高的优先级。
  • 推荐系统是类型设置的一个例子。通过推荐系统可以领略一小部分特征学习的思想。

我们从一个例子开始定义推荐系统的问题。假使我们是一个电影供应商,有 5 部电影和 4 个用户,要求用户为电影打分。希望构建一个算法来预测每个人可能会给他们没看过的电影打多少分,并以此作为推荐的依据。

下面引入一些标记:

n u n_u nu 代表用户的数量

n m n_m nm 代表电影的数量

r ( i , j ) r(i, j) r(i,j) 如果用户j给电影 i i i 评过分则 r ( i , j ) = 1 r(i,j)=1 r(i,j)=1

y ( i , j ) y^{(i, j)} y(i,j) 代表用户 j j j 给电影 i i i的评分

m j m_j mj代表用户 j j j 评过分的电影的总数

16.2 基于内容的推荐系统(Content Based Recommendations)

在一个基于内容的推荐系统算法中,假设对于希望推荐的东西有一些数据,这些数据是有关这些东西的特征。

例子中,可以假设每部电影都有两个特征,如 x 1 x_1 x1代表电影的浪漫程度, x 2 x_2 x2 代表电影的动作程度。则每部电影都有一个特征向量,如 x ( 1 ) x^{(1)} x(1)是第一部电影的特征向量为[0.9 0]。下面基于这些特征来构建一个推荐系统算法。

假设采用线性回归模型,可以针对每一个用户都训练一个线性回归模型,如 θ ( 1 ) {{\theta }^{(1)}} θ(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)

代价函数:

针对用户 j j j,该线性回归模型的代价为预测误差的平方和,加上正则化项:

min ⁡ θ ( j ) 1 2 ∑ i : r ( i , j ) = 1 ( ( θ ( j ) ) T x ( i ) − y ( i , j ) ) 2 + λ 2 ( θ k ( j ) ) 2 \min_{\theta (j)}\frac{1}{2}\sum_{i:r(i,j)=1}\left((\theta^{(j)})^Tx^{(i)}-y^{(i,j)}\right)^2+\frac{\lambda}{2}\left(\theta_{k}^{(j)}\right)^2 θ(j)min21i:r(i,j)=1((θ(j))Tx(i)y(i,j))2+2λ(θk(j))2

其中 i : r ( i , j ) i:r(i,j) i:r(i,j)表示只计算那些用户 j j j 评过分的电影。在一般的线性回归模型中,误差项和正则项应该都是乘以 1 / 2 m 1/2m 1/2m,在这里将 m m m去掉。并且不对方差项 θ 0 \theta_0 θ0进行正则化处理。

上面的代价函数只是针对一个用户的,为了学习所有用户,将所有用户的代价函数求和:

min ⁡ θ ( 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 \min_{\theta^{(1)},...,\theta^{(n_u)}} \frac{1}{2}\sum_{j=1}^{n_u}\sum_{i:r(i,j)=1}\left((\theta^{(j)})^Tx^{(i)}-y^{(i,j)}\right)^2+\frac{\lambda}{2}\sum_{j=1}^{n_u}\sum_{k=1}^{n}(\theta_k^{(j)})^2 θ(1),...,θ(nu)min21j=1nui:r(i,j)=1((θ(j))Tx(i)y(i,j))2+2λj=1nuk=1n(θk(j))2

如果要用梯度下降法来求解最优解,计算代价函数的偏导数后得到梯度下降的更新公式为:

θ k ( j ) : = θ k ( j ) − α ∑ i : r ( i , j ) = 1 ( ( θ ( j ) ) T x ( i ) − y ( i , j ) ) x k ( i ) ( for   k = 0 ) \theta_k^{(j)}:=\theta_k^{(j)}-\alpha\sum_{i:r(i,j)=1}((\theta^{(j)})^Tx^{(i)}-y^{(i,j)})x_{k}^{(i)} \quad (\text{for} \, k = 0) θk(j):=θk(j)αi:r(i,j)=1((θ(j))Tx(i)y(i,j))xk(i)(fork=0)

θ k ( j ) : = θ k ( j ) − α ( ∑ i : r ( i , j ) = 1 ( ( θ ( j ) ) T x ( i ) − y ( i , j ) ) x k ( i ) + λ θ k ( j ) ) ( for   k ≠ 0 ) \theta_k^{(j)}:=\theta_k^{(j)}-\alpha\left(\sum_{i:r(i,j)=1}((\theta^{(j)})^Tx^{(i)}-y^{(i,j)})x_{k}^{(i)}+\lambda\theta_k^{(j)}\right) \quad (\text{for} \, k\neq 0) θk(j):=θk(j)αi:r(i,j)=1((θ(j))Tx(i)y(i,j))xk(i)+λθk(j)(fork=0)

16.3 协同过滤(Collaborative Filtering)

在之前的基于内容的推荐系统中,对于每一部电影都掌握了可用的特征,使用这些特征训练出了每一个用户的参数。相反地,如果拥有用户的参数,可以学习得出电影的特征。

m i n 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 \mathop{min}\limits_{x^{(1)},...,x^{(n_m)}}\frac{1}{2}\sum_{i=1}^{n_m}\sum_{j{r(i,j)=1}}((\theta^{(j)})^Tx^{(i)}-y^{(i,j)})^2+\frac{\lambda}{2}\sum_{i=1}^{n_m}\sum_{k=1}^{n}(x_k^{(i)})^2 x(1),...,x(nm)min21i=1nmjr(i,j)=1((θ(j))Tx(i)y(i,j))2+2λi=1nmk=1n(xk(i))2

但是如果既没有用户的参数,也没有电影的特征,这两种方法都不可行了。协同过滤算法可以同时学习这两者。

优化目标便改为同时针对 x x x θ \theta θ进行。

J ( x ( 1 ) , . . . x ( n m ) , θ ( 1 ) , . . . , θ ( n u ) ) = 1 2 ∑ ( i : j ) : r ( i , j ) = 1 ( ( θ ( j ) ) T x ( i ) − y ( i , j ) ) 2 + λ 2 ∑ i = 1 n m ∑ k = 1 n ( x k ( j ) ) 2 + λ 2 ∑ j = 1 n u ∑ k = 1 n ( θ k ( j ) ) 2 J(x^{(1)},...x^{(n_m)},\theta^{(1)},...,\theta^{(n_u)})=\frac{1}{2}\sum_{(i:j):r(i,j)=1}((\theta^{(j)})^Tx^{(i)}-y^{(i,j)})^2+\frac{\lambda}{2}\sum_{i=1}^{n_m}\sum_{k=1}^{n}(x_k^{(j)})^2+\frac{\lambda}{2}\sum_{j=1}^{n_u}\sum_{k=1}^{n}(\theta_k^{(j)})^2 J(x(1),...x(nm),θ(1),...,θ(nu))=21(i:j):r(i,j)=1((θ(j))Tx(i)y(i,j))2+2λi=1nmk=1n(xk(j))2+2λj=1nuk=1n(θk(j))2

对代价函数求偏导数的结果如下:

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\left(\sum_{j:r(i,j)=1}((\theta^{(j)})^Tx^{(i)}-y^{(i,j)}\theta_k^{j}+\lambda x_k^{(i)}\right) xk(i):=xk(i)αj:r(i,j)=1((θ(j))Tx(i)y(i,j)θkj+λxk(i)

θ k ( i ) : = θ k ( i ) − α ( ∑ i : r ( i , j ) = 1 ( ( θ ( j ) ) T x ( i ) − y ( i , j ) x k ( i ) + λ θ k ( j ) ) \theta_k^{(i)}:=\theta_k^{(i)}-\alpha\left(\sum_{i:r(i,j)=1}((\theta^{(j)})^Tx^{(i)}-y^{(i,j)}x_k^{(i)}+\lambda \theta_k^{(j)}\right) θk(i):=θk(i)αi:r(i,j)=1((θ(j))Tx(i)y(i,j)xk(i)+λθk(j)

注:在协同过滤从算法中,通常不使用方差项,如果需要的话,算法会自动学得。

协同过滤算法使用步骤如下:

  1. 初始 x ( 1 ) , x ( 1 ) , . . . x ( n m ) ,   θ ( 1 ) , θ ( 2 ) , . . . , θ ( n u ) x^{(1)},x^{(1)},...x^{(nm)},\ \theta^{(1)},\theta^{(2)},...,\theta^{(n_u)} x(1),x(1),...x(nm), θ(1),θ(2),...,θ(nu)为一些随机小值
  2. 使用梯度下降算法最小化代价函数
  3. 在训练完算法后,预测 ( θ ( j ) ) T x ( i ) (\theta^{(j)})^Tx^{(i)} (θ(j))Tx(i)为用户 j j j 给电影 i i i 的评分

通过这个学习过程获得的特征矩阵包含了有关电影的重要数据,这些数据不总是人能读懂的,但是可以用这些数据作为给用户推荐电影的依据。

例如,如果一位用户正在观看电影 x ( i ) x^{(i)} x(i),我们可以寻找另一部电影 x ( j ) x^{(j)} x(j),依据两部电影的特征向量之间的距离 ∥ x ( i ) − x ( j ) ∥ \left\| {{x}^{(i)}}-{{x}^{(j)}} \right\| x(i)x(j)的大小。

16.4 协同过滤算法(Collaborative Filtering Algorithm)

协同过滤优化目标:

给定 x ( 1 ) , . . . , x ( n m ) x^{(1)},...,x^{(n_m)} x(1),...,x(nm),估计 θ ( 1 ) , . . . , θ ( n u ) \theta^{(1)},...,\theta^{(n_u)} θ(1),...,θ(nu)

min ⁡ θ ( 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 \min_{\theta^{(1)},...,\theta^{(n_u)}}\frac{1}{2}\sum_{j=1}^{n_u}\sum_{i:r(i,j)=1}((\theta^{(j)})^Tx^{(i)}-y^{(i,j)})^2+\frac{\lambda}{2}\sum_{j=1}^{n_u}\sum_{k=1}^{n}(\theta_k^{(j)})^2 θ(1),...,θ(nu)min21j=1nui:r(i,j)=1((θ(j))Tx(i)y(i,j))2+2λj=1nuk=1n(θk(j))2

给定 θ ( 1 ) , . . . , θ ( n u ) \theta^{(1)},...,\theta^{(n_u)} θ(1),...,θ(nu),估计 x ( 1 ) , . . . , x ( n m ) x^{(1)},...,x^{(n_m)} x(1),...,x(nm)

同时最小化 x ( 1 ) , . . . , x ( n m ) x^{(1)},...,x^{(n_m)} x(1),...,x(nm) θ ( 1 ) , . . . , θ ( n u ) \theta^{(1)},...,\theta^{(n_u)} θ(1),...,θ(nu)

J ( x ( 1 ) , . . . , x ( n m ) , θ ( 1 ) , . . . , θ ( n u ) ) = 1 2 ∑ ( i , 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 + λ 2 ∑ j = 1 n u ∑ k = 1 n ( θ k ( j ) ) 2 J(x^{(1)},...,x^{(n_m)},\theta^{(1)},...,\theta^{(n_u)})=\frac{1}{2}\sum_{(i,j):r(i,j)=1}((\theta^{(j)})^Tx^{(i)}-y^{(i,j)})^2+\frac{\lambda}{2}\sum_{i=1}^{n_m}\sum_{k=1}^{n}(x_k^{(i)})^2+\frac{\lambda}{2}\sum_{j=1}^{n_u}\sum_{k=1}^{n}(\theta_k^{(j)})^2 J(x(1),...,x(nm),θ(1),...,θ(nu))=21(i,j):r(i,j)=1((θ(j))Tx(i)y(i,j))2+2λi=1nmk=1n(xk(i))2+2λj=1nuk=1n(θk(j))2

min ⁡ x ( 1 ) , . . . , x ( n m )   θ ( 1 ) , . . . , θ ( n u ) J ( x ( 1 ) , . . . , x ( n m ) , θ ( 1 ) , . . . , θ ( n u ) ) \min_{x^{(1)},...,x^{(n_m)} \\\ \theta^{(1)},...,\theta^{(n_u)}}J(x^{(1)},...,x^{(n_m)},\theta^{(1)},...,\theta^{(n_u)}) x(1),...,x(nm) θ(1),...,θ(nu)minJ(x(1),...,x(nm),θ(1),...,θ(nu))

16.5 向量化:低秩矩阵分解(Vectorization:Low Rank Matrix Factorization)

本节介绍有关协同过滤算法的向量化实现以及有关该算法你可以做的其他事情。

  1. 当给出一件产品时,能否找到与之相关的其它产品。
  2. 一位用户最近看上一件产品,有没有其它相关的产品,可以推荐给他。

要做的是实现一种选择的方法,写出协同过滤算法的预测情况。

我们有关于五部电影的数据集,要做的是将这些用户的电影评分进行分组并存到一个矩阵中。

有五部电影以及四位用户,那么这个矩阵 Y Y Y 就是一个5行4列的矩阵,它将这些电影的用户评分数据都存在矩阵里:

推出评分:
在这里插入图片描述
找到相关影片:
在这里插入图片描述
既然已经对特征参数向量进行了学习,那么就会有一个很方便的方法来度量两部电影之间的相似性。如电影 i i i 有一个特征向量 x ( i ) x^{(i)} x(i),是否能找到一部不同的电影 j j j,保证两部电影的特征向量之间的距离 x ( i ) x^{(i)} x(i) x ( j ) x^{(j)} x(j)很小,那就能很有力地表明电影 i i i和电影 j j j 在某种程度上有相似。

16.6 推行工作上的细节:均值归一化(Implementational Detail:Mean Normalization)

让我们来看下面的用户评分数据:
在这里插入图片描述
如果新增一个用户 Eve,并且 Eve 没有为任何电影评分,那么以什么为依据为Eve推荐电影呢?

首先需要对结果 Y Y Y矩阵进行均值归一化处理,将每一个用户对某一部电影的评分减去所有用户对该电影评分的平均值:
在这里插入图片描述
然后利用这个新的 Y Y Y 矩阵来训练算法。
如果要用新训练出的算法来预测评分,则需要将平均值重新加回去,预测 ( θ ( j ) ) T x ( i ) + μ i (\theta^{(j)})^T x^{(i)}+\mu_i (θ(j))Tx(i)+μi,对于Eve,新模型会认为她给每部电影的评分都是该电影的平均分。

错题

在这里插入图片描述
B

  1. 如果你有一个带有许多正例子和许多负例子的训练集,那么异常检测算法的性能可能与有监督的学习算法(如支持向量机)一样好。(X)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值