一个网站可以做多个描述吗,免费网页设计作业文件,大气网站首页模板,seo网站设计多少钱题目描述#xff1a; 协同过滤是推荐系统中的一种常用技术#xff0c;其基本思想是利用用户之间的相似性或物品之间的相似性来进行推荐。本次面试题要求实现一个基于用户的协同过滤推荐算法。 具体要求#xff1a; 定义两个类#xff1a;User 和 Item#xff0c;分别表示用…题目描述 协同过滤是推荐系统中的一种常用技术其基本思想是利用用户之间的相似性或物品之间的相似性来进行推荐。本次面试题要求实现一个基于用户的协同过滤推荐算法。 具体要求 定义两个类User 和 Item分别表示用户和物品。 User 类包含用户ID和用户对各个物品的评分使用MapItem, Integer存储。 Item 类包含物品ID。 实现一个方法 calculateSimilarity(User user1, User user2)计算两个用户之间的相似度。相似度计算可以使用余弦相似度。 实现一个方法 recommendItems(User targetUser, ListUser otherUsers, int topN)为目标用户推荐N个最可能的物品。推荐逻辑是找出与目标用户最相似的K个用户然后根据这些用户的评分来推荐物品。 示例代码
import java.util.*;class User {private String userId;private MapString, Integer ratings;public User(String userId) {this.userId userId;this.ratings new HashMap();}public void addRating(String item, int rating) {ratings.put(item, rating);}public MapString, Integer getRatings() {return ratings;}public static double calculateSimilarity(User user1, User user2) {MapString, Integer ratings1 user1.getRatings();MapString, Integer ratings2 user2.getRatings();double similarity 0.0;for (String item : ratings1.keySet()) {if (ratings2.containsKey(item)) {similarity ratings1.get(item) * ratings2.get(item);}}return similarity / (Math.sqrt(ratings1.size() * ratings2.size());}public static ListString recommendItems(User targetUser, ListUser otherUsers, int topN) {MapUser, Double similarityScores new HashMap();for (User user : otherUsers) {if (!user.equals(targetUser)) {double similarity calculateSimilarity(targetUser, user);similarityScores.put(user, similarity);}}ListMap.EntryUser, Double sortedUsers new ArrayList(similarityScores.entrySet());sortedUsers.sort((a, b) - b.getValue().compareTo(a.getValue()));MapString, Integer targetRatings targetUser.getRatings();ListString recommendedItems new ArrayList();for (int i 0; i Math.min(topN, sortedUsers.size()); i) {User similarUser sortedUsers.get(i).getKey();MapString, Integer similarRatings similarUser.getRatings();for (String item : similarRatings.keySet()) {if (!targetRatings.containsKey(item)) {recommendedItems.add(item);}}return recommendedItems;}public static void main(String[] args) {// Example usageUser user1 new User(1);User user2 new User(2);User user3 new User(3);user1.addRating(item1, 5);user1.addRating(item2, 3);user2.addRating(item1, 4);user2.addRating(item3, 2);user3.addRating(item2, 5);user3.addRating(item3, 4);ListString recommendations recommendItems(user1, Arrays.asList(user2, user3), 2);System.out.println(Recommended items for user1: recommendations);}
}