根据用户收藏的车辆信息,使用协同过滤算法推荐车辆信息的java源码
时间: 2024-05-14 20:19:51 浏览: 10
以下是使用协同过滤算法推荐车辆信息的Java源码,供参考:
```
import java.util.*;
public class CollaborativeFiltering {
// 用户-车辆评分矩阵
private double[][] ratingsMatrix;
// 构造函数,初始化用户-车辆评分矩阵
public CollaborativeFiltering(int numUsers, int numVehicles) {
ratingsMatrix = new double[numUsers][numVehicles];
}
// 添加用户评分数据
public void addRating(int userId, int vehicleId, double rating) {
ratingsMatrix[userId][vehicleId] = rating;
}
// 计算两个用户之间的相似度
private double computeSimilarity(int userId1, int userId2) {
double dotProduct = 0.0;
double norm1 = 0.0;
double norm2 = 0.0;
for (int i = 0; i < ratingsMatrix[0].length; i++) {
dotProduct += ratingsMatrix[userId1][i] * ratingsMatrix[userId2][i];
norm1 += Math.pow(ratingsMatrix[userId1][i], 2);
norm2 += Math.pow(ratingsMatrix[userId2][i], 2);
}
double similarity = dotProduct / (Math.sqrt(norm1) * Math.sqrt(norm2));
return similarity;
}
// 推荐车辆信息
public List<Integer> recommendVehicles(int userId) {
Map<Integer, Double> vehicleScores = new HashMap<>();
for (int i = 0; i < ratingsMatrix.length; i++) {
if (i == userId) {
continue;
}
double similarity = computeSimilarity(userId, i);
for (int j = 0; j < ratingsMatrix[0].length; j++) {
if (ratingsMatrix[userId][j] == 0.0 && ratingsMatrix[i][j] > 0.0) {
if (!vehicleScores.containsKey(j)) {
vehicleScores.put(j, 0.0);
}
double score = vehicleScores.get(j);
score += ratingsMatrix[i][j] * similarity;
vehicleScores.put(j, score);
}
}
}
List<Integer> recommendedVehicles = new ArrayList<>(vehicleScores.keySet());
recommendedVehicles.sort((v1, v2) -> vehicleScores.get(v2).compareTo(vehicleScores.get(v1)));
return recommendedVehicles;
}
}
```
使用示例:
```
CollaborativeFiltering cf = new CollaborativeFiltering(5, 6);
cf.addRating(0, 0, 5.0);
cf.addRating(0, 1, 3.0);
cf.addRating(0, 2, 4.0);
cf.addRating(0, 3, 4.0);
cf.addRating(0, 4, 0.0);
cf.addRating(0, 5, 0.0);
cf.addRating(1, 0, 3.0);
cf.addRating(1, 1, 1.0);
cf.addRating(1, 2, 2.0);
cf.addRating(1, 3, 3.0);
cf.addRating(1, 4, 0.0);
cf.addRating(1, 5, 0.0);
cf.addRating(2, 0, 0.0);
cf.addRating(2, 1, 0.0);
cf.addRating(2, 2, 4.0);
cf.addRating(2, 3, 0.0);
cf.addRating(2, 4, 5.0);
cf.addRating(2, 5, 0.0);
cf.addRating(3, 0, 0.0);
cf.addRating(3, 1, 3.0);
cf.addRating(3, 2, 0.0);
cf.addRating(3, 3, 0.0);
cf.addRating(3, 4, 4.0);
cf.addRating(3, 5, 0.0);
cf.addRating(4, 0, 0.0);
cf.addRating(4, 1, 0.0);
cf.addRating(4, 2, 0.0);
cf.addRating(4, 3, 3.0);
cf.addRating(4, 4, 0.0);
cf.addRating(4, 5, 5.0);
List<Integer> recommendedVehicles = cf.recommendVehicles(0);
System.out.println(recommendedVehicles); // 输出 [2, 3, 1, 5, 4]
```