推荐系统之余弦相似度及其Java实现


我们常常用余弦来度量两个个体的相似度,公式如下:


而未知的评分估计值可按照如下公式计算:


下面看一个例子:

例1设有五个用户U1,U2,U3,U4,U5,对四个物品I1,I2,I3,I4的评分如下表("-"代表用户没有对物品进行打分):


I1 I2 I3 I4
U1 5 3 - 1
U2 4 - - 1
U3 1 1 - 5
U4 1 - - 4
U5 - 1 5 4


  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
余弦相似度算法是一种常用的衡量两个向量之间相似度的方法,它可以用于文本相似度计算、推荐系统等领域。在Java中,可以通过以下步骤来实现余弦相似度算法: 1. 首先,需要将文本转换为向量表示。可以使用词袋模型或者TF-IDF等方法将文本转换为向量。 2. 计算两个向量的内积。内积可以通过遍历两个向量的对应维度,将对应维度的值相乘后累加得到。 3. 计算两个向量的模长。模长可以通过遍历向量的每个维度,将对应维度的值平方后累加得到,再对结果进行开方。 4. 计算余弦相似度。将步骤2中计算得到的内积除以步骤3中计算得到的模长乘积即可得到余弦相似度。 下面是一个简单的Java代码示例: ```java import java.util.HashMap; import java.util.Map; public class CosineSimilarity { public static double calculateCosineSimilarity(Map<String, Integer> vector1, Map<String, Integer> vector2) { double dotProduct = 0.0; double magnitude1 = 0.0; double magnitude2 = 0.0; for (String key : vector1.keySet()) { if (vector2.containsKey(key)) { dotProduct += vector1.get(key) * vector2.get(key); } magnitude1 += Math.pow(vector1.get(key), 2); } for (String key : vector2.keySet()) { magnitude2 += Math.pow(vector2.get(key), 2); } magnitude1 = Math.sqrt(magnitude1); magnitude2 = Math.sqrt(magnitude2); return dotProduct / (magnitude1 * magnitude2); } public static void main(String[] args) { // 示例向量 Map<String, Integer> vector1 = new HashMap<>(); vector1.put("apple", 2); vector1.put("banana", 3); vector1.put("orange", 1); Map<String, Integer> vector2 = new HashMap<>(); vector2.put("apple", 1); vector2.put("banana", 2); vector2.put("grape", 4); double similarity = calculateCosineSimilarity(vector1, vector2); System.out.println("余弦相似度:" + similarity); } } ``` 这段代码中,我们定义了一个`calculateCosineSimilarity`方法来计算余弦相似度。通过传入两个向量的词频统计结果,即`Map<String, Integer>`类型的`vector1`和`vector2`,可以得到它们之间的余弦相似度

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值