机器学习公开课笔记(9):异常检测和推荐系统

异常检测(Anomaly Detection)

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

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

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

 

高斯分布

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

p(x;μ,σ2)=12πσexp((xμ)22σ2)

图2 不同参数(μ,σ)取值下的一元高斯分布

参数估计

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

μ=1mi=1mx(i)
σ2=1mi=1m(x(i)μ)2
注意在统计学中,参数σ2的系数为1m1而在机器学习中习惯使用1m.

异常检测算法

对于训练数据集{x(1),x(2),,x(m)},其中数据点x(i)Rn并假设每个特征均服从高斯分布,即xj(i)N(μ,σ2),可如下建立模型p(x)

p(x)=p(x1;μ1,σ12)p(x2;μ2,σ22)p(xn;μn,σn2)=j=1np(xj;μj,σj2)

算法步骤:

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

2. 参数估计:用训练数据集估计每个特征的整体均值μj和方差σj2,即μj=1mi=1mxj(i), σj2=1mi=1m(xj(i)μj)2

3. 用估计得到的参数μ1,μ2,,μn,  σ12,σ22,,σn2建立模型p(x)

4. 对于给定新的数据点xnew, 计算p(xnew);如果p(xnew)<ϵ则发生异常,否则正常。

算法评估:

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

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

特征选择:

选择的特征需要近似服从于高斯分布,如果明显不服从高斯分布,可以做适当的转换,例如log(x),log(x+c),x,x1/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;μ,Σ)=1(2π)n/2|Σ|1/2exp(12(xμ)TΣ1(xμ)) 其中μn维行向量,μ=1mi=1mx(i)Σn×n协方差矩阵,Σ=1mi=1m(x(i)μ)(x(i)μ)T,图3给出了在不同参数取值下的二维高斯模型及其对应的等高线图。

 

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

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

推荐系统

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

符号说明:

  • nu表示用户数量
  • nm表示电影数量
  • 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学习一个参数向量θ(j),然后用(θ(j))Tx(i)来估计用户j对电影i的评分。例如对于上面的表格,我们对每一个电影抽取出2个特征x1,x2(对应表格最后2列),然后每个用户j学习一个参数向量θ(j)R3(包含bias项θ0=1以及x1,x2的系数θ1,θ2),然后就可以用(θ(j))Tx(i)来预测评分。为了学习参数θ,定义代价函数为J(θ(1),θ(2),,θ(nu))=12j=1nui:r(i,j)=1((θ(j))Tx(i)y(i,j))2+λ2j=1nuk=1n(θk(j))2

梯度下降法的参数更新:θk(j)=θk(j)α(i:r(i,j)=1((θ(j))Tx(i)y(i,j))xk(i)+λθk(j))k>0 θk(j)=θk(j)αi:r(i,j)=1((θ(j))Tx(i)y(i,j))xk(i)k=0

协同过滤(Collaborative Filtering)

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

协同过滤算法步骤:

1. 初始化参数x(1),x(2),,x(nm),θ(1),θ(2),,θ(nu)为随机数,其中xRn表示电影特征,θRn表示用户参数(注:不包含bias参数θ0

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

xk(i)=xk(i)α(i:r(i,j)=1((θ(j))Tx(i)y(i,j))xk(i)+λxk(i))
θk(j)=θk(j)α(i:r(i,j)=1((θ(j))Tx(i)y(i,j))xk(i)+λθk(j))

3. 用学习到的参数θx预测电影评分θTx

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

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

均值归一化:对于尚未评分任何电影的用户,可以对Y矩阵按行求平均值作为该用户的初始评分;用均值化矩阵Yμ进行参数学习,然后用(θ(j))Tθ(i)+μ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

posted @   python27  阅读(6329)  评论(2编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示