Anomaly Detection and Recommender Systems[异常检测&推荐系统]
2015-03-26 17:23
405 查看
这是学习coursera上ML的一份笔记整理,梳理一下的思路。
其实说来很简单,就是看各个feature的高斯分布的位置(概率),然后乘起来。直观理解就是所有的feature值都很高的话说明是大概率,还是看图比较直接。
m计算过程就是算出各个feature的 μ,σ\mu, \sigma,然后计算这个sample的 ∏p(x;μ,σ2)\prod p(x;\mu, \sigma^2)
得到μ,σ2\mu, \sigma^2再带入上面的高斯分布,再连乘,就搞定了,计算出这个sample的代表该sample是否正常的值。这里整理的挺好的,直接贴上来额。
接下来找阈值ϵ\epsilon
这里用cross validation set(交叉验证集),这里的交叉验证机是有监督的,也就是有对应的“标准答案”的。
挺直观的,一点一点增加epsilon的值,对于每一个epsilon,predictions存放预测的异常点,然后计算其F1F_1-score,选择F1F_1-score最高时epsilon的值。
接下来是一些直方图不符合高斯分布的数据该怎么办的问题。这里用log, 开方等,只要让其变形之后长得像高斯分布咋样都行。
下面是多维高斯分布的概率密度函数
总的来说,多维高斯分布在sample分布“倾斜”的时候很有效,这时候∏p\prod p很可能检测不出这样的异常点。但是多维高斯分布要计算协方差矩阵,计算量太大,并且有重复特征的时候协方差矩阵容易变成奇异阵,导致错误。总的来说,各有优缺点,一般情况下,∏p(x;μ,σ)\prod p(x; \mu, \sigma)的表现已经能让人满意(应该很多情况sample都是“正的”吧)。
第一次写,果然把简单的问题讲的复杂了。
上图中?号表示没有评分。
其中r(i,j),y(i,j)r(i, j), y^{(i,j)}是已知的,θ(j),x(i)\theta ^{(j)}, x^{(i)}未知,是要求的,这也是问题的关键,得到这两个参数就能知道user(j)对movie(i)的预测评分,从而进行推荐。那么问题来了,如何求θ(j),x(i)\theta ^{(j)}, x^{(i)}呢?
这个问题先放一放,先看看J(x(1),...,x(nm),θ(1),...,θ(nu))J(x^{(1)}, ..., x^{(n_m)}, \theta ^{(1)}, ..., \theta ^{(n_u)})如何计算。直接上公式:
意思就是在有用户评分的地方拿 预测值 - 实际值 的平方和,121\over 2就是个系数,总之意思很好理解。
加上正则项后:
J算出来了,接下来算grad
加上正则项后
加正则项应该是和之前的目的一样防止过拟合(使θ,x的取值尽量小\theta , x 的取值尽量小),但是这里Andrew的作业里并没有对他们加上那个“1”,所以这里的正则化的意义有点不明朗,有清楚的朋友还望告知,thanks~
下面贴上这部分代码(正则化之后的):
之后用梯度下降计算出θ(j),x(i)\theta ^{(j)}, x^{(i)}就可以用来预测了,这里用正态分布产生随机数初始化了θ,x\theta, x矩阵,feature个数也是自己选择的,Y用的是YnormY_{norm}也就是减去了每行的已评价的平均数。最后就可以用预测的分数排序后推荐了。
总结一下,其实主要步骤就几步:
1,完成 J, grad[包括gradx,gradθgrad_x, grad_\theta的计算],其中x,θx, \theta可以用正态分布初始化;
2,用梯度下降等方法优化;
3,有了x,θx, \theta就能计算出预测值,从而推荐。
就这么简单。
第一次写博客,算是对知识的一次整理,文笔凌乱,原本简单的东西可能说的复杂了,各位轻拍。
异常检测(Anomaly Detection)
就是通过看sample的各个feature的值,判断该点是不是异常点。这里Andrew采用Gaussian分布,原因记得是概率论与数理统计中的大数定律貌似。其实说来很简单,就是看各个feature的高斯分布的位置(概率),然后乘起来。直观理解就是所有的feature值都很高的话说明是大概率,还是看图比较直接。
m计算过程就是算出各个feature的 μ,σ\mu, \sigma,然后计算这个sample的 ∏p(x;μ,σ2)\prod p(x;\mu, \sigma^2)
mu = mean(X)'; sigma2 = var(X) * (m-1) / m;
得到μ,σ2\mu, \sigma^2再带入上面的高斯分布,再连乘,就搞定了,计算出这个sample的代表该sample是否正常的值。这里整理的挺好的,直接贴上来额。
接下来找阈值ϵ\epsilon
这里用cross validation set(交叉验证集),这里的交叉验证机是有监督的,也就是有对应的“标准答案”的。
stepsize = (max(pval) - min(pval)) / 1000; for epsilon = min(pval):stepsize:max(pval) predictions = (pval < epsilon); tp = sum((predictions == 1) & (yval == 1)); fp = sum((predictions == 1) & (yval == 0)); fn = sum((predictions == 0) & (yval == 1)); prec = tp/(tp+fp); rec = tp/(tp+fn); F1 = 2 * prec * rec / (prec + rec); % ============================================================= if F1 > bestF1 bestF1 = F1; bestEpsilon = epsilon; end end
挺直观的,一点一点增加epsilon的值,对于每一个epsilon,predictions存放预测的异常点,然后计算其F1F_1-score,选择F1F_1-score最高时epsilon的值。
Anomaly detection & Supervise learning的区别
Andrew总结了一些,我直观感觉Anomaly detection都不需要“学习”,只是计算∏p\prod p,然后计算F1F_1-score,找到最佳阈值ϵ\epsilon,就可以判断异常点。接下来是一些直方图不符合高斯分布的数据该怎么办的问题。这里用log, 开方等,只要让其变形之后长得像高斯分布咋样都行。
Multivariate Gaussian distribution
其实学习的过程中就注意到了,为什么不直接用多维高斯分布,这个应该更科学,比如解决下面这种情况下面是多维高斯分布的概率密度函数
总的来说,多维高斯分布在sample分布“倾斜”的时候很有效,这时候∏p\prod p很可能检测不出这样的异常点。但是多维高斯分布要计算协方差矩阵,计算量太大,并且有重复特征的时候协方差矩阵容易变成奇异阵,导致错误。总的来说,各有优缺点,一般情况下,∏p(x;μ,σ)\prod p(x; \mu, \sigma)的表现已经能让人满意(应该很多情况sample都是“正的”吧)。
第一次写,果然把简单的问题讲的复杂了。
推荐系统(Recommender Systems)
推荐系统所做的事情就是预测出一个事物对另一个事物的评价(比如人对不同电影评分,尽管他没看过这个电影,然后按照预测的分数进行推荐),还是以Andrew的例子来说上图中?号表示没有评分。
其中r(i,j),y(i,j)r(i, j), y^{(i,j)}是已知的,θ(j),x(i)\theta ^{(j)}, x^{(i)}未知,是要求的,这也是问题的关键,得到这两个参数就能知道user(j)对movie(i)的预测评分,从而进行推荐。那么问题来了,如何求θ(j),x(i)\theta ^{(j)}, x^{(i)}呢?
这个问题先放一放,先看看J(x(1),...,x(nm),θ(1),...,θ(nu))J(x^{(1)}, ..., x^{(n_m)}, \theta ^{(1)}, ..., \theta ^{(n_u)})如何计算。直接上公式:
意思就是在有用户评分的地方拿 预测值 - 实际值 的平方和,121\over 2就是个系数,总之意思很好理解。
加上正则项后:
J算出来了,接下来算grad
加上正则项后
加正则项应该是和之前的目的一样防止过拟合(使θ,x的取值尽量小\theta , x 的取值尽量小),但是这里Andrew的作业里并没有对他们加上那个“1”,所以这里的正则化的意义有点不明朗,有清楚的朋友还望告知,thanks~
下面贴上这部分代码(正则化之后的):
J = sum(sum( 0.5 * (X * Theta' - Y) .^ 2 .* (R == 1))) + lambda/2 * (sum(Theta(:).^2) + sum(X(:).^2)); X_h = X * Theta'; X_grad = (X_h - Y) .* R * Theta + lambda * X; Theta_grad = (X_h - Y)' .* R' * X + lambda * Theta;
之后用梯度下降计算出θ(j),x(i)\theta ^{(j)}, x^{(i)}就可以用来预测了,这里用正态分布产生随机数初始化了θ,x\theta, x矩阵,feature个数也是自己选择的,Y用的是YnormY_{norm}也就是减去了每行的已评价的平均数。最后就可以用预测的分数排序后推荐了。
总结一下,其实主要步骤就几步:
1,完成 J, grad[包括gradx,gradθgrad_x, grad_\theta的计算],其中x,θx, \theta可以用正态分布初始化;
2,用梯度下降等方法优化;
3,有了x,θx, \theta就能计算出预测值,从而推荐。
就这么简单。
第一次写博客,算是对知识的一次整理,文笔凌乱,原本简单的东西可能说的复杂了,各位轻拍。
相关文章推荐
- Andrew NG 机器学习 笔记-week9-异常检测和推荐系统(Anomaly Detection and Recommender Systems)
- Andrew NG 机器学习 练习8-Anomaly Detection and Recommender Systems
- Machine Learning 第八波编程作业(完)——Anomaly Detection and Recommender Systems
- Machine Learning by Andrew Ng --- Anomaly Detection and Recommender systems
- Programming Exercise 8:Anomaly Detection and Recommender Systems 第二部分
- Programming Exercise 8: Anomaly Detection and Recommender Systems Machine Learning
- Coursera Machine Learning 第九周 quizProgramming Exercise 8: Anomaly Detection and Recommender Systems
- Machine Learning week 9 quiz: programming assignment-Anomaly Detection and Recommender Systems
- 【推荐系统论文笔记】Introduction To Recommender Systems: Algorithms and Evaluation
- Programming Exercise 8:Anomaly Detection and Recommender Systems第一部分
- 【读书笔记】《推荐系统(recommender systems An introduction)》第七章 评估推荐系统
- Coursera 《Machine Learning》 编程作业8:异常检测与推荐系统
- 在与sap系统集成时遇到的问题.sap系统发布一webservice,java(xfire)作为客户端调用,调用时抛出如下异常: Wrong Content-Type and empty HTTP-Body received: ("HTTP Code 20
- Anomaly Detection for Time Series Data with Deep Learning——本质分类正常和异常的行为,对于检测异常行为,采用预测正常行为方式来做
- Coursera-吴恩达-机器学习-(第9周笔记)异常检测和推荐系统
- 推荐系统介绍:(协同过滤)—Intro to Recommender Systems: Collaborative Filtering
- Andrew Ng机器学习笔记week9 异常检测、推荐系统
- machine learning week 9 异常检测 推荐系统
- Machine Learning第九周笔记:异常检测与推荐系统
- 机器学习公开课笔记(9):异常检测和推荐系统