java推荐算法代码
时间: 2024-11-03 07:20:19 浏览: 3
java协同过滤推荐算法
在Java中,推荐算法通常用于个性化推荐系统,例如电影推荐、商品推荐等。这里简单介绍一种常见的协同过滤算法——基于用户的协同过滤。以下是简单的代码示例:
```java
import java.util.*;
import java.lang.Math;
public class CollaborativeFiltering {
private List<Rating> ratings; // 用户对物品的评分列表
// 模拟用户和物品
class UserItem {
int user;
String item;
double rating;
UserItem(int user, String item, double rating) {
this.user = user;
this.item = item;
this.rating = rating;
}
}
// 对于基于用户的协同过滤,我们需要计算每个用户与其他所有用户的相似度
public double similarity(UserItem userA, UserItem userB) {
double sum = 0.0;
for (Rating r : ratings) {
if (r.getUser() == userA.user || r.getUser() == userB.user) {
sum += Math.pow(rating - r.getValue(), 2);
}
}
return 1 / (1 + sum);
}
// 推荐给用户items,基于他们与目标用户user的相似度最高的用户
public List<String> recommendForUser(int targetUser, List<String> items) {
Map<UserItem, Double> similarities = new HashMap<>();
for (Rating r : ratings) {
if (r.getUser() != targetUser && items.contains(r.getItem())) {
UserItem similarUser = new UserItem(r.getUser(), "", r.getValue());
similarities.put(similarUser, similarity(similarUser, new UserItem(targetUser, items.get(0), 0)));
}
}
// 根据相似度降序排序并返回前n个最相似用户喜欢的物品
List<Map.Entry<UserItem, Double>> sortedSimilarities = new ArrayList<>(similarities.entrySet());
Collections.sort(sortedSimilarities, (a, b) -> b.getValue().compareTo(a.getValue()));
List<String> recommendations = new ArrayList<>();
for (Map.Entry<UserItem, Double> entry : sortedSimilarities.subList(0, Math.min(5, sortedSimilarities.size()))) {
recommendations.add(entry.getKey().item);
}
return recommendations;
}
// 示例:添加评分记录
public void addRating(Rating rating) {
ratings.add(rating);
}
// 示例:用户评分模型中的一个实体
class Rating {
int user;
String item;
double value;
Rating(int user, String item, double value) {
this.user = user;
this.item = item;
this.value = value;
}
}
}
// 使用示例
ratingSystem.addRating(new Rating(0, "movie1", 4.5));
...
List<String> topRecommendations = ratingSystem.recommendForUser(0, Arrays.asList("movie1"));
```
这个例子展示了如何创建一个简单的基于用户的协同过滤模型。实际应用中,可能需要更复杂的处理如距离阈值、加权平均等。记住,这只是一个基础版本,实际推荐系统的实现可能会更复杂,包含更多的优化和考虑因素。
阅读全文