下面是一个用Java实现的协同过滤算法的示例代码:
import java.util.*;
public class CollaborativeFiltering {
// 用户评分矩阵
private double[][] ratings;
// 构造函数
public CollaborativeFiltering(double[][] ratings) {
this.ratings = ratings;
}
// 计算两个用户之间的欧氏距离
private double calculateEuclideanDistance(double[] user1, double[] user2) {
double distance = 0.0;
for (int i = 0; i < user1.length; i++) {
distance += Math.pow(user1[i] - user2[i], 2);
}
return Math.sqrt(distance);
}
// 查找最相似的用户
private int findMostSimilarUser(double[] user) {
int mostSimilarUser = -1;
double minDistance = Double.MAX_VALUE;
for (int i = 0; i < ratings.length; i++) {
if (Arrays.equals(user, ratings[i])) {
continue; // 跳过自身
}
double distance = calculateEuclideanDistance(user, ratings[i]);
if (distance < minDistance) {
minDistance = distance;
mostSimilarUser = i;
}
}
return mostSimilarUser;
}
// 预测用户对电影的评分
public double predictRating(int userIndex, int movieIndex) {
double[] user = ratings[userIndex];
int mostSimilarUser = findMostSimilarUser(user);
return ratings[mostSimilarUser][movieIndex];
}
// 示例
public static void main(String[] args) {
double[][] ratings = {
{5, 3, 4, 4, 5},
{4, 1, 2, 3, 2},
{2, 5, 2, 1, 5},
{1, 2, 4, 4, 3}
};
CollaborativeFiltering cf = new CollaborativeFiltering(ratings);
double predictedRating = cf.predictRating(0, 1);
System.out.println("Predicted rating: " + predictedRating);
}
}
在上述代码中,我们首先定义了一个CollaborativeFiltering
类,它包含了用户评分矩阵ratings
和一些基本的方法。其中,calculateEuclideanDistance
方法用于计算两个用户之间的欧氏距离,findMostSimilarUser
方法用于查找最相似的用户,predictRating
方法用于预测用户对电影的评分。
在示例中,我们使用一个4x5的评分矩阵作为输入数据,并预测用户0对电影1的评分。输出结果为预测的评分值。你可以根据自己的需求修改输入数据和预测的用户和电影索引。