Java实现协同过滤推荐算法 - 完整示例代码
协同过滤推荐算法是一种常用的推荐算法,可以基于用户的历史行为数据和其他用户的行为数据来预测用户对物品的喜好程度。
下面是一个简单的Java实现协同过滤推荐算法的示例:
import java.util.*;
public class CollaborativeFiltering {
// 用户-物品评分矩阵
private double[][] ratings;
public CollaborativeFiltering(double[][] ratings) {
this.ratings = ratings;
}
// 计算两个用户之间的相似度(余弦相似度)
private double similarity(int user1, int user2) {
double dotProduct = 0.0;
double norm1 = 0.0;
double norm2 = 0.0;
for (int i = 0; i < ratings[user1].length; i++) {
dotProduct += ratings[user1][i] * ratings[user2][i];
norm1 += Math.pow(ratings[user1][i], 2);
norm2 += Math.pow(ratings[user2][i], 2);
}
return dotProduct / (Math.sqrt(norm1) * Math.sqrt(norm2));
}
// 根据用户的历史评分数据预测用户对物品的评分
public double predictRating(int user, int item) {
double numerator = 0.0;
double denominator = 0.0;
for (int i = 0; i < ratings.length; i++) {
if (i != user && ratings[i][item] != 0) {
double sim = similarity(user, i);
numerator += sim * ratings[i][item];
denominator += sim;
}
}
if (denominator == 0) {
return 0;
} else {
return numerator / denominator;
}
}
public static void main(String[] args) {
// 示例数据
double[][] ratings = {
{5, 3, 0, 1, 4},
{1, 0, 0, 5, 2},
{4, 1, 5, 1, 0},
{0, 0, 4, 0, 5}
};
CollaborativeFiltering cf = new CollaborativeFiltering(ratings);
// 预测用户1对物品2的评分
double predictedRating = cf.predictRating(1, 2);
System.out.println('Predicted rating for user 1 and item 2: ' + predictedRating);
}
}
在上述示例中,我们首先定义了一个用户-物品评分矩阵,然后实现了similarity方法来计算两个用户之间的相似度(使用余弦相似度),最后实现了predictRating方法来根据用户的历史评分数据预测用户对物品的评分。
在main方法中,我们使用示例数据创建了一个CollaborativeFiltering对象,并调用predictRating方法预测用户1对物品2的评分。
请注意,这只是一个简单的示例实现,实际应用中可能需要考虑更多的因素,比如数据的稀疏性、评分的缺失值处理、算法的优化等。
原文地址: https://www.cveoy.top/t/topic/pfKU 著作权归作者所有。请勿转载和采集!