推荐系统学习之mahout 学习评分计算
2013-05-14 09:51
309 查看
mahout 学习评分计算
一、基于item的推荐的评分计算方法
1 目标用户已评价的Item集合,UserItem{item1,item2} 评分为p1、p2 需预测的item3 item3与item1和item2的相似度为s1、s2
(p1*s1+p2*s2)/(s1+s2) 限定分数在最大分和最小分之间
二、基于用户的推荐的评分计算方法
同item类似 计算目标用户最近n个邻居的相似度,最近的2个邻居为user1,user2。user1,user2对item1的 评分p1、p2 与目标用户相似度为s1、s2
预测评分为(p1*s1+p2*s2)/(s1+s2) 限定分数在最大分和最小分之间
三、 knnItem推荐 预测评分的计算法
1 UserItem{item1,item2,item3} 评分为p1、p2、p3 需预测的item4 UserItem中与item4最相似的的2个Item为
item1和item2相似度为s1和s2 计算item1和item2权重为w1和w2 (p1*w1+p2*w2)/(w1+w2)
2 权重的的计算方法
theneighborhood={item1,item2,item4}
usersRatedNeighborhood={user1,user2}同时对theneighborhood有兴趣的用户集合(不包含目标用户)用户个数为numUsers
itemneighborhood ={item1,item2} item个数为k
aMatrix为k*k阶矩阵 aMatrix[i][j] ,i为 itemneighborhood的第i个item,j为 itemneighborhood的第j个item
vki为usersRatedNeighborhood中第K个用户对itemi的评分 vkj为usersRatedNeighborhood中第K个用户对itemj的评分
aMatrix[i][j]=(v1i*v1j +...+vki*vkj )/numUsers
b为k*1阶矩阵
vk为usersRatedNeighborhood中第K个用户对需预测的item的评分
b[i][1] = (v1i*v1+...+vki*vk)/numUsers
diagonalA diagonalB为aMatrix中对角线元素的和
avgDiagonal = Math.max(diagonalA, diagonalB) / k
avgMatrixA = aMatrix[i][j]的和(i!=j) avgMatrixA /= k * k - k;
avgVectorB = b[i]的和 avgVectorB /= k;
numUsersPlusBeta = numUsers + BETA;
aMatrix[i][j] = (numUsers * aMatrix[i][j] + BETA * average) / numUsersPlusBeta;(i==j ,average = avgDiagonal;i!=j ,average = avgMatrixA;)
b[i] = (numUsers * b[i] + BETA * avgVectorB) / numUsersPlusBeta;
optimize(aMatrix,b)
Arrays.fill(x0, 3.0 / k);
* function [x] = conjgrad(A,b,x0)
x = x0;
r = b - A*x0;
w = -r;
for i = 1:size(A);
z = A*w;
a = (r'*w)/(w'*z);
x = x + a*w;
r = r - a*z;
if ( norm(r) < 1e-10 )
break;
end
B = (r'*z)/(w'*z);
w = -r + B*w;
end
end
一、基于item的推荐的评分计算方法
1 目标用户已评价的Item集合,UserItem{item1,item2} 评分为p1、p2 需预测的item3 item3与item1和item2的相似度为s1、s2
(p1*s1+p2*s2)/(s1+s2) 限定分数在最大分和最小分之间
二、基于用户的推荐的评分计算方法
同item类似 计算目标用户最近n个邻居的相似度,最近的2个邻居为user1,user2。user1,user2对item1的 评分p1、p2 与目标用户相似度为s1、s2
预测评分为(p1*s1+p2*s2)/(s1+s2) 限定分数在最大分和最小分之间
三、 knnItem推荐 预测评分的计算法
1 UserItem{item1,item2,item3} 评分为p1、p2、p3 需预测的item4 UserItem中与item4最相似的的2个Item为
item1和item2相似度为s1和s2 计算item1和item2权重为w1和w2 (p1*w1+p2*w2)/(w1+w2)
2 权重的的计算方法
theneighborhood={item1,item2,item4}
usersRatedNeighborhood={user1,user2}同时对theneighborhood有兴趣的用户集合(不包含目标用户)用户个数为numUsers
itemneighborhood ={item1,item2} item个数为k
aMatrix为k*k阶矩阵 aMatrix[i][j] ,i为 itemneighborhood的第i个item,j为 itemneighborhood的第j个item
vki为usersRatedNeighborhood中第K个用户对itemi的评分 vkj为usersRatedNeighborhood中第K个用户对itemj的评分
aMatrix[i][j]=(v1i*v1j +...+vki*vkj )/numUsers
b为k*1阶矩阵
vk为usersRatedNeighborhood中第K个用户对需预测的item的评分
b[i][1] = (v1i*v1+...+vki*vk)/numUsers
diagonalA diagonalB为aMatrix中对角线元素的和
avgDiagonal = Math.max(diagonalA, diagonalB) / k
avgMatrixA = aMatrix[i][j]的和(i!=j) avgMatrixA /= k * k - k;
avgVectorB = b[i]的和 avgVectorB /= k;
numUsersPlusBeta = numUsers + BETA;
aMatrix[i][j] = (numUsers * aMatrix[i][j] + BETA * average) / numUsersPlusBeta;(i==j ,average = avgDiagonal;i!=j ,average = avgMatrixA;)
b[i] = (numUsers * b[i] + BETA * avgVectorB) / numUsersPlusBeta;
optimize(aMatrix,b)
Arrays.fill(x0, 3.0 / k);
* function [x] = conjgrad(A,b,x0)
x = x0;
r = b - A*x0;
w = -r;
for i = 1:size(A);
z = A*w;
a = (r'*w)/(w'*z);
x = x + a*w;
r = r - a*z;
if ( norm(r) < 1e-10 )
break;
end
B = (r'*z)/(w'*z);
w = -r + B*w;
end
end
相关文章推荐
- mahout:推荐系统入门学习(一)
- mahout之推荐系统源码笔记(2) ---相似度计算之RowSimilarityJob
- [推荐系统]mahout中实现的几种相似度计算方法
- mahout:推荐系统入门学习(二)
- 推荐系统评分矩阵稀疏性计算
- 【甘道夫】通过Mahout构建推荐系统--通过IDRescorer扩展评分规则
- 【甘道夫】通过Mahout构建推荐系统--通过IDRescorer扩展评分规则
- 个人喜欢的关于模式识别、机器学习、推荐系统、图像特征、深度学习、数值计算、目标跟踪等方面个人主页及博客
- 随时更新———个人喜欢的关于模式识别、机器学习、推荐系统、图像特征、深度学习、数值计算、目标跟踪等方面个人主页及博客
- 【甘道夫】通过Mahout构建推荐系统--通过IDRescorer扩展评分规则
- mahout学习(二)--基于Mahout的电影推荐系统
- [推荐系统]Mahout中相似度计算方法介绍
- 推荐系统中常见的几种相似度计算方法和其适用数据
- Mahout--最基本的推荐系统的JAVA代码
- 推荐系统学习-LibMF
- 推荐系统学习笔记之一 综述
- [推荐系统]mahout支持的对推荐引擎的评价方法
- 基于Mahout的电影推荐系统
- 推荐系统学习(2)——基于TF-IDF的改进
- 八、机器学习系统设计笔记之对回归:改进的推荐