协同过滤推荐算法-Java电商商品推荐案例
import java.util.*;
// 商品类
class Item {
int id;
String name;
public Item(int id, String name) {
this.id = id;
this.name = name;
}
}
// 用户类
class User {
int id;
String name;
Map<Item, Integer> ratings; // 用户对商品的评分
public User(int id, String name) {
this.id = id;
this.name = name;
this.ratings = new HashMap<>();
}
// 为商品添加评分
public void addRating(Item item, int rating) {
ratings.put(item, rating);
}
// 获取用户对商品的评分
public Integer getRating(Item item) {
return ratings.get(item);
}
}
// 商品推荐器类
class ItemRecommender {
List<User> users;
public ItemRecommender(List<User> users) {
this.users = users;
}
// 基于用户的协同过滤推荐算法
public List<Item> recommendItems(User user) {
Map<Item, Double> scores = new HashMap<>();
Map<Item, Integer> frequency = new HashMap<>();
// 计算用户之间的相似度
for (User otherUser : users) {
if (otherUser != user) {
for (Item item : otherUser.ratings.keySet()) {
if (!user.ratings.containsKey(item)) {
int rating = otherUser.getRating(item);
scores.put(item, scores.getOrDefault(item, 0.0) + rating);
frequency.put(item, frequency.getOrDefault(item, 0) + 1);
}
}
}
}
// 计算推荐得分
Map<Item, Double> recommendations = new HashMap<>();
for (Item item : scores.keySet()) {
double score = scores.get(item);
int freq = frequency.get(item);
recommendations.put(item, score / freq);
}
// 排序推荐结果
List<Map.Entry<Item, Double>> sortedRecommendations = new ArrayList<>(recommendations.entrySet());
sortedRecommendations.sort((a, b) -> Double.compare(b.getValue(), a.getValue()));
// 返回推荐商品
List<Item> recommendedItems = new ArrayList<>();
for (Map.Entry<Item, Double> entry : sortedRecommendations) {
recommendedItems.add(entry.getKey());
}
return recommendedItems;
}
}
public class CollaborativeFiltering {
public static void main(String[] args) {
// 创建用户和商品
User user1 = new User(1, "Alice");
User user2 = new User(2, "Bob");
Item item1 = new Item(1, "手机");
Item item2 = new Item(2, "平板电脑");
Item item3 = new Item(3, "耳机");
// 用户对商品的评分
user1.addRating(item1, 5);
user1.addRating(item2, 4);
user2.addRating(item1, 4);
user2.addRating(item3, 5);
// 构建用户列表
List<User> users = new ArrayList<>();
users.add(user1);
users.add(user2);
// 创建商品推荐器
ItemRecommender recommender = new ItemRecommender(users);
// 对用户进行商品推荐
List<Item> recommendedItems = recommender.recommendItems(user1);
// 输出推荐结果
System.out.println("为用户 " + user1.name + " 推荐的商品是:");
for (Item item : recommendedItems) {
System.out.println(item.name);
}
}
}