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