mahout中的LogLikelihoodSimilarity 分析
来源:互联网 发布:淘宝只能开一个店铺 编辑:程序博客网 时间:2024/04/29 18:13
参考: http://www.oschina.net/code/snippet_780962_24686
假设用户1偏好的产品集合(A空间)为k11, k12。 用户1非偏好的产品集合(B空间)为k21, k22.
用户2 在A空间中偏好的产品集合为k11(即与用户1的共同偏好的产品有k11个),用户2在A空间中非偏好的产品集合即为k12.
用户2在B空间中偏好的产品集合为k21,用户2在B空间中非偏好的集合为k22.
LogLikelihoodSimilarity利用每个空间中的选到偏好的产品概率分布满足二项分布,通过假设A空间与B空间独立不相关H1, 与假设A空间与B空间是相关的H2,计算
log(H) = log( L(H1) / L(H2) )
1. A空间与B空间独立不相关,则用户2的偏好不受用户1影响,用户2 选到喜欢产品的概率为 p = (k11 + k12) / N(按整个空间计算)。
L(H1) = b(k11; k11 + k12; p) * b(k21; k21+k22; p) //用户2在A空间选到喜欢产品的概率 * 用户2在B空间选到喜欢产品的概率
2. A空间与B空间相关,A与B空间具有不同的偏好概率(即用户1喜欢的,用户2一般也都喜欢,用户1不喜欢的,用户2往往也不会喜欢)。用户2在A空间选到喜欢产品的似然概率为
p1 = k11 / (k11 + k12), 用户2在B空间选到喜欢产品的概率为 p2 = k21 / (k21 + k22)。
L(H2) = b(k11; k11 + k12; p1) * b (k21; k21 + k22, p2)
log(H) = log (L(H1) / L(H2))
Sim = -2 log(H) // 因为p < p1, p < p2
源代码:
public static double logLikelihoodRatio(int k11, int k12, int k21, int k22) { double rowEntropy = entropy(k11, k12) + entropy(k21, k22); double columnEntropy = entropy(k11, k21) + entropy(k12, k22); double matrixEntropy = entropy(k11, k12, k21, k22); return 2 * (matrixEntropy - rowEntropy - columnEntropy); } public static double entropy(int... elements) { double sum = 0; for (int element : elements) { sum += element; } double result = 0.0; for (int x : elements) { if (x < 0) { throw new IllegalArgumentException( "Should not have negative count for entropy computation: (" + x + ')'); } int zeroFlag = (x == 0 ? 1 : 0); result += x * Math.log((x + zeroFlag) / sum); } return -result; }
- mahout中的LogLikelihoodSimilarity 分析
- mahout中的kmeans结果分析
- mahout源码分析-02
- Mahout笔记--代码分析
- mahout itemBase 源码分析
- Mahout Canopy源码分析
- mahout的RecommenderJob分析
- mahout中的org.apache.mahout.clas…
- mahout中的org.apache.mahout.classifier.sgd
- mahout中的相似度
- mahout中phase含义分析
- mahout分类源码分析-01
- mahout贝叶斯并行分类分析
- Mahout笔记--代码分析2
- mahout推荐引擎源码分析
- Mahout之SequenceFilesFromDirectory源码分析
- mahout bayes源码分析总结
- Mahout的BreimanExample例子分析
- 类中的静态成员,静态函数
- Codeforces Round #249 (Div. 2)——B. Pasha Maximizes
- Cocos2dx之使用UI库结合cocostudio
- Eclipse导入Github上的Robotium源码进行代码分析的步骤
- image magick用法总结
- mahout中的LogLikelihoodSimilarity 分析
- Java中byte[]与int之间的转化
- 502 Bad Gateway
- 数据归一化和两种常用的归一化方法
- eclipse里面快捷键大全
- 数据归一化和两种常用的归一化方法
- j2ee规范——Servlet
- C# using使用的小技巧
- hud 1754 I Hate It 线段树 点修改