zoukankan      html  css  js  c++  java
  • 机器学习公开课笔记(9):异常检测和推荐系统

    异常检测(Anomaly Detection)

    基本假设:多数情况下数据点落入正常的取值范围,但是当异常行为发生时,数据点的取值落入正常取值范围之外(如图1所示)。所以可以利用高斯分布,计算行为发生的概率,如果是概率小于给定阈值,则认为发生了异常行为。基本过程是利用训练数据点建立模型$p(x)$,对于新的数据点$x_{new}$, 如果$p(x_{new})<epsilon$则发生异常;否则正常。异常检测的应用包括:

    • 欺诈检测(Fraud detection)
    • 制造业(Manufacturing)
    • 数据中心监视电脑(Monitering computers in data center)

    图1 异常行为(Outlier Point)发生示例

    高斯分布

    对于一元高斯分布$x sim N(mu, sigma^2)$,表达式如下,其中$mu$表示均值,对应于分布的对称轴;$sigma$表示数据点的离散程度,$sigma$越大函数图像的下端张口越大峰值越低;反之$sigma$越小,图像下端张口越小,峰值越高,如图2所示。

    $$p(x;mu, sigma^2)=frac{1}{sqrt{2pi}sigma}exp(-frac{(x-mu)^2}{2sigma^2})$$

    图2 不同参数($mu, sigma$)取值下的一元高斯分布

    参数估计

    高斯分布的总体参数$mu$和$sigma$可以使用样本数据点进行估计,如下

    $$mu = frac{1}{m}sumlimits_{i=1}^{m}x^{(i)}$$
    $$sigma^2=frac{1}{m}sumlimits_{i=1}^{m}(x^{(i)}-mu)^2$$
    注意在统计学中,参数$sigma^2$的系数为$frac{1}{m-1}$而在机器学习中习惯使用$frac{1}{m}$.

    异常检测算法

    对于训练数据集${x^{(1)}, x^{(2)}, ldots, x^{(m)}}$,其中数据点$x^{(i)}in R^n$并假设每个特征均服从高斯分布,即$x^{(i)}_j sim N(mu, sigma^2)$,可如下建立模型$p(x)$

    egin{align*}p(x)&=p(x_1; mu_1, sigma_1^2)p(x_2; mu_2, sigma_2^2)ldots p(x_n; mu_n, sigma_n^2) \ &= prodlimits_{j=1}^n p(x_j; mu_j, sigma_j^2)end{align*}

    算法步骤:

    1. 特征选择:选择能够指示异常行为的特征

    2. 参数估计:用训练数据集估计每个特征的整体均值$mu_j$和方差$sigma_j^2$,即$mu_j = frac{1}{m}sumlimits_{i=1}^{m}x^{(i)}_j$, $sigma^2_j=frac{1}{m}sumlimits_{i=1}^{m}(x^{(i)}_j-mu_j)^2$

    3. 用估计得到的参数$mu_1, mu_2, ldots, mu_n$,  $sigma^2_1, sigma^2_2, ldots, sigma^2_n$建立模型$p(x)$;

    4. 对于给定新的数据点$x_{new}$, 计算$p(x_{new})$;如果$p(x_{new})<epsilon$则发生异常,否则正常。

    算法评估:

    给定训练数据集(去掉标签建立模型)中${x^{(1)}, x^{(2)}, ldots, x^{(m)}}$,训练模型$p(x)$。在交叉验证集(带标签)中,如果$p(x_{cv})<epsilon$,则预测$y=1$;否则预测$y=0$。最后计算指标Precision/Recall/F1Score等来评估算法性能。注意:也可以用验证集来选择阈值$epsilon$.

    异常检测与监督式学习对比:

    特征选择:

    选择的特征需要近似服从于高斯分布,如果明显不服从高斯分布,可以做适当的转换,例如$log(x), log(x+c), sqrt{x}, x^{1/3}$等

    多元高斯分布

    之前的模型假设各个特征之间是相互独立的,因此模型$p(x)$将各特征取值的概率相乘【$P(AB)=P(B)P(A|B)=P(A)P(B|A)$,当且仅当事件AB相互独立时才有$P(AB)=P(A)P(B)$】;然而当各个特征之间存在依赖关系时,一元的高斯模型将不能很好的刻画$p(x)$,需要多元高斯模型。模型$p(x)$的建立不再是各个概率相乘,而直接用多元高斯分布进行刻画$$p(x;mu, Sigma)=frac{1}{(2pi)^{n/2}|Sigma|^{1/2}}expleft(-frac{1}{2}(x-mu)^TSigma^{-1}(x-mu) ight)$$ 其中$mu$是$n$维行向量,$mu=frac{1}{m}sumlimits_{i=1}^{m}x^{(i)}$; $Sigma$是$n imes n$协方差矩阵,$Sigma=frac{1}{m}sumlimits_{i=1}^{m}(x^{(i)}-mu)(x^{(i)}-mu)^T$,图3给出了在不同参数取值下的二维高斯模型及其对应的等高线图。

    图3 二维高斯分布及其对应的等高线图

    多元高斯模型和一元高斯模型的关系:当协方差矩阵$Sigma$是对角阵且对角线元为一元高斯分布的估计参数$sigma_j^2$时,两个模型是等价的。区别在于前者能够自动获取特征之间的依赖关系而后者不能(后者假设特征之间是独立的)。当特征数$n$很大时,前者计算代价高昂而后者计算速度快。前者适用于$m>n$(一般要求$m>10n$)的情况,而后者当$m$很小时依然适用。

    推荐系统

    电影推荐系统问题:根据用户对已看过电影的打分,对用户未看过的电影(下表中以?表示)进行打分估计,以给其推荐合适的电影。

    符号说明:

    • $n_u$表示用户数量
    • $n_m$表示电影数量
    • $r(i, j)$是符号变量,如果用户$j$已经对电影$i$进行评分则$r(i, j)=1$;反之,如果用户$j$尚未对电影$i$进行评分则$r(i, j)=0$.
    • $y^{(i, j)}$表示用户$j$对电影$i$的评分(如果用户$j$对电影$i$已经评分,即$r(i, j)=1$).
    Movie User1 User2 User3 User4 x1 x2
    movie1 5 5 0 0 0.9 0
    movie2 5 ? ? 0 1.0 0.01
    movie3 ? 4 0 ? 0.99 0
    movie4 0 0 5 4 0.1 1.0
    movie5 0 0 5 ? 0 0.9

    基于内容的推荐

    对每一部电影$i$抽出若干特征,然后每个用户$j$学习一个参数向量$ heta^{(j)}$,然后用$( heta^{(j)})^Tx^{(i)}$来估计用户$j$对电影$i$的评分。例如对于上面的表格,我们对每一个电影抽取出2个特征$x_1,x_2$(对应表格最后2列),然后每个用户$j$学习一个参数向量$ heta^{(j)}in R^3$(包含bias项$ heta_0=1$以及$x_1, x_2$的系数$ heta_1, heta_2$),然后就可以用$( heta^{(j)})^Tx^{(i)}$来预测评分。为了学习参数$ heta$,定义代价函数为$$J( heta^{(1)}, heta^{(2)},ldots, heta^{(n_u)})=frac{1}{2}sumlimits_{j=1}^{n_u}sumlimits_{i:r(i,j)=1}(( heta^{(j)})^Tx^{(i)}-y^{(i,j)})^2+frac{lambda}{2}sumlimits_{j=1}^{n_u}sumlimits_{k=1}^n( heta^{(j)}_k)^2$$

    梯度下降法的参数更新:$$ heta_k^{(j)}= heta_k^{(j)}-alphaleft(sumlimits_{i:r(i,j)=1}(( heta^{(j)})^Tx^{(i)}-y^{(i,j)})x_k^{(i)}+lambda heta_k^{(j)} ight)quad k > 0$$ $$ heta_k^{(j)}= heta_k^{(j)}-alphasumlimits_{i:r(i,j)=1}(( heta^{(j)})^Tx^{(i)}-y^{(i,j)})x_k^{(i)}quad k = 0$$

    协同过滤(Collaborative Filtering)

    基于内容的推荐假设电影的特征(如$x_1$, $x_2$)是已知的,仅需要学习参数$ heta$;然而实际中电影的特征是未知的,现在假定已知用户的参数$ heta$,需要学习电影的特征$x$,与上面的代价函数类似,定义$$J(x^{(1)},x^{(2)},ldots,x^{(n_m)})=frac{1}{2}sumlimits_{i=1}^{n_m}sumlimits_{i:r(i,j)=1}(( heta^{(j)})^Tx^{(i)}-y^{(i,j)})^2+frac{lambda}{2}sumlimits_{i=1}^{n_m}sumlimits_{k=1}^n(x^{(i)}_k)^2$$这样我们发现,给定电影特征$x$可以学习到用户参数$ heta$;反之给定用户参数$ heta$可以学习到特征$x$。因此可以先随机猜一个$ heta$,然后学习$x$,再由学习到的$x$学习$ heta$,然后不断重复即可。然而事实上,两个参数$x, heta$可以如下同时更新,从而得到协同过滤的推荐算法$$J(x^{(1)},x^{(2)},ldots,x^{(n_m)}, heta^{(1)}, heta^{(2)},ldots, heta^{(n_u)})=frac{1}{2}sumlimits_{i:r(i,j)=1}(( heta^{(j)})^Tx^{(i)}-y^{(i,j)})^2+frac{lambda}{2}sumlimits_{j=1}^{n_u}sumlimits_{k=1}^n( heta^{(j)}_k)^2+frac{lambda}{2}sumlimits_{i=1}^{n_m}sumlimits_{k=1}^n(x^{(i)}_k)^2$$

    协同过滤算法步骤:

    1. 初始化参数$x^{(1)},x^{(2)},ldots,x^{(n_m)}, heta^{(1)}, heta^{(2)},ldots, heta^{(n_u)}$为随机数,其中$xin R^n$表示电影特征,$ heta in R^n$表示用户参数(注:不包含bias参数$ heta_0$)

    2. 使用梯度下降或者其他高级优化算法,进行参数更新

    $$x_k^{(i)}=x_k^{(i)}-alphaleft(sumlimits_{i:r(i,j)=1}(( heta^{(j)})^Tx^{(i)}-y^{(i,j)})x_k^{(i)}+lambda x_k^{(i)} ight)$$
    $$ heta_k^{(j)}= heta_k^{(j)}-alphaleft(sumlimits_{i:r(i,j)=1}(( heta^{(j)})^Tx^{(i)}-y^{(i,j)})x_k^{(i)}+lambda heta_k^{(j)} ight)$$

    3. 用学习到的参数$ heta$和$x$预测电影评分$ heta^Tx$

    低秩矩阵分解(Low rank matrix factorization)

    协同过滤与低秩矩阵分解:协同过滤算法要求评分矩阵$Y$中元素$y^{(i,j)}$越接近$( heta^{(j)})^T x^{(i)}$越好,因此参数$ heta$和$x$的求解,实际上等价于寻找两个矩阵$X$和$Theta$使得$Y approx XTheta^T$,从而协同过滤问题可以转化为低秩矩阵分解问题。

    均值归一化:对于尚未评分任何电影的用户,可以对$Y$矩阵按行求平均值作为该用户的初始评分;用均值化矩阵$Y-mu$进行参数学习,然后用$( heta^{(j)})^T heta^{(i)}+mu_i$进行评分预测。

    参考文献

    [1] Andrew Ng Coursera 公开课第九周

    [2] Recommender Systems: Collaborative Filtering. http://recommender-systems.org/collaborative-filtering/

    [3] Wikipedia: Low-rank approximation https://en.wikipedia.org/wiki/Low-rank_approximation

  • 相关阅读:
    archlinux .bash_history
    Ubuntu环境下挂载新硬盘
    软碟通 UltraISO U启替代品 Win32DiskImager 无设备 无盘符 无u盘 无优盘 解决方案 之diskpart
    delphi Integer overflow
    MSBuild Tools offline
    delphi synedit免费的拼写检查器dll
    git 自定义命令行
    lua编译
    gcc ar
    Windows Subsystem for Linux (WSL)挂载移动硬盘U盘 卸载 c d 盘
  • 原文地址:https://www.cnblogs.com/python27/p/MachineLearningWeek09.html
Copyright © 2011-2022 走看看