请用java写一个协同过滤推荐算法程序
时间: 2023-08-01 10:06:47 浏览: 93
java协同过滤推荐算法
下面是一个基于用户的协同过滤推荐算法的 Java 实现:
```java
import java.util.*;
public class CollaborativeFiltering {
// 用户评分矩阵
private double[][] ratings;
// 用户之间的相似度矩阵
private double[][] similarity;
// 构造函数
public CollaborativeFiltering(double[][] ratings) {
this.ratings = ratings;
this.similarity = new double[ratings.length][ratings.length];
calculateSimilarity();
}
// 计算用户之间的相似度
private void calculateSimilarity() {
for (int i = 0; i < ratings.length; i++) {
for (int j = i + 1; j < ratings.length; j++) {
double numerator = 0.0;
double denominator1 = 0.0;
double denominator2 = 0.0;
for (int k = 0; k < ratings[i].length; k++) {
if (ratings[i][k] != 0 && ratings[j][k] != 0) {
numerator += ratings[i][k] * ratings[j][k];
denominator1 += ratings[i][k] * ratings[i][k];
denominator2 += ratings[j][k] * ratings[j][k];
}
}
double denominator = Math.sqrt(denominator1) * Math.sqrt(denominator2);
similarity[i][j] = numerator / denominator;
similarity[j][i] = similarity[i][j];
}
}
}
// 推荐函数
public double recommend(int user, int movie) {
double numerator = 0.0;
double denominator = 0.0;
for (int i = 0; i < ratings.length; i++) {
if (i != user && ratings[i][movie] != 0) {
numerator += similarity[user][i] * ratings[i][movie];
denominator += similarity[user][i];
}
}
return numerator / denominator;
}
// 测试函数
public static void main(String[] args) {
double[][] ratings = {{5, 3, 4, 4, 0}, {3, 1, 2, 3, 3}, {4, 0, 4, 3, 5}, {3, 1, 0, 5, 4}, {0, 5, 4, 4, 5}};
CollaborativeFiltering cf = new CollaborativeFiltering(ratings);
System.out.println(cf.recommend(0, 4)); // 输出推荐结果
}
}
```
在上面的代码中,我们首先定义了一个 CollaborativeFiltering 类,该类包含用户评分矩阵和用户之间的相似度矩阵。在构造函数中,我们传入用户评分矩阵,并计算用户之间的相似度。接着,我们定义了一个 recommend 函数,该函数接受一个用户和一个电影作为参数,返回该用户对该电影的推荐评分。
最后,我们在 main 函数中测试了推荐函数,输出了用户0对电影4的推荐评分。
请注意,这只是一个简单的示例,实际应用中需要考虑更多的因素,例如数据预处理、评价指标等。
阅读全文