如下两个数据框
> recommendation
user item val
1 1 104 30.5
2 1 105 12.5
3 1 106 7.5
4 2 105 13.0
5 2 106 9.0
6 3 103 24.5
7 3 106 10.5
8 3 102 8.0
9 4 105 22.0
10 4 102 20.5
11 4 106 12.5
12 5 102 16.0
> testing
user item pref
11 3 107 5
15 4 106 4
17 5 102 3
现在要利用这两个数据框进行数据分析:
precision=推荐正确率 就是说 3 107 在recommendation中没有推荐 则0/3 (3是向user=3的用户推荐的item 数)
4 106 在recommendation中有推荐 1/3
5 102 在recommendation中有推荐1/1
(4/3)/3(和除以测试用户数)=4/9
recall=喜好正确率 就是说 0+1(对于用户4来说,只喜欢106,也推荐了106,所以是1)+1(对于用户5来说,102同理)=2
2/3(和除以测试用户数)即r值
那么,请问这种怎么用r语言写出来,因为可能涉及循环(需要验证testing中的user、item是否属于recommendation),并不是特别懂,特来询问,望回复解答,非常感谢![precision&recall已经解决 非常感谢高手解答!]
还有一个问题求助:
还有一个值auc
auc=(testing在recommendation的序列/用户推荐长度)/测试用户总数
比如 3 107没有推荐 就是 0
4 106 排第三个 就是 3/3
5 102 排第一个 就是 1/1
然后加起来除以testing总数 这个序列又如何操作?
用一楼的大神代码:
each_precision =sapply(unique(m[,1]),function(x) nrow(subset(m,m[,1]==x&m[,2]==m[,4]))/sum(m[,1]==x))
#nrow是行数 所以只需要将行数 改成在m中的user索引序列
但是索引这边总出问题 还请高手回复
谢谢谢谢!


雷达卡




谢谢谢谢!
京公网安备 11010802022788号







