在当今的互联网时代,C++推荐算法被广泛应用于电商、视频平台和社交网络中,帮助用户发现他们可能感兴趣的内容。本教程将手把手教你如何使用 C++ 实现一个基础但实用的协同过滤推荐系统,即使你是编程小白,也能轻松上手!

推荐算法是一种根据用户历史行为(如评分、点击、购买)来预测其未来偏好的技术。其中最经典的方法之一是协同过滤(Collaborative Filtering),它分为两类:
本文将实现一个简单的基于用户的协同过滤系统,使用 C++ 编写。
你需要安装以下工具:
我们用一个二维数组表示用户对物品的评分。例如,假设有 4 个用户和 5 部电影:
// 用户-物品评分矩阵// 行:用户(0~3),列:物品(0~4)// 0 表示未评分int ratings[4][5] = { {5, 3, 0, 1, 0}, {4, 0, 0, 1, 3}, {1, 1, 0, 5, 0}, {0, 0, 4, 4, 5}};我们使用余弦相似度来衡量两个用户之间的相似程度。公式如下:
sim(u, v) = (Σ r_ui * r_vi) / (√Σr_ui² * √Σr_vi²)
下面是一个计算余弦相似度的 C++ 函数:
#include <iostream>#include <vector>#include <cmath>using namespace std;// 计算两个用户向量的余弦相似度double cosineSimilarity(const vector<int>& user1, const vector<int>& user2) { double dotProduct = 0.0, norm1 = 0.0, norm2 = 0.0; for (size_t i = 0; i < user1.size(); ++i) { if (user1[i] != 0 && user2[i] != 0) { dotProduct += user1[i] * user2[i]; norm1 += user1[i] * user1[i]; norm2 += user2[i] * user2[i]; } } if (norm1 == 0 || norm2 == 0) return 0.0; return dotProduct / (sqrt(norm1) * sqrt(norm2));}对目标用户未评分的物品,我们找出与其最相似的 K 个用户,加权平均他们的评分作为预测值。
// 为用户 targetUser 推荐物品void recommend(int targetUser, const vector<vector<int>>& ratings, int k = 2) { int numUsers = ratings.size(); int numItems = ratings[0].size(); // 存储相似用户及其相似度 vector<pair<double, int>> similarities; for (int u = 0; u < numUsers; ++u) { if (u != targetUser) { double sim = cosineSimilarity(ratings[targetUser], ratings[u]); similarities.push_back({sim, u}); } } // 按相似度降序排序 sort(similarities.rbegin(), similarities.rend()); // 预测评分 vector<double> predictions(numItems, 0.0); vector<double> similaritySum(numItems, 0.0); for (int i = 0; i < k && i < similarities.size(); ++i) { int similarUser = similarities[i].second; double sim = similarities[i].first; for (int item = 0; item < numItems; ++item) { if (ratings[targetUser][item] == 0 && ratings[similarUser][item] != 0) { predictions[item] += sim * ratings[similarUser][item]; similaritySum[item] += sim; } } } cout << "推荐结果(用户 " << targetUser << "):\n"; for (int item = 0; item < numItems; ++item) { if (ratings[targetUser][item] == 0 && similaritySum[item] > 0) { double pred = predictions[item] / similaritySum[item]; cout << " 物品 " << item << ": 预测评分 = " << pred << endl; } }}int main() { vector<vector<int>> ratings = { {5, 3, 0, 1, 0}, {4, 0, 0, 1, 3}, {1, 1, 0, 5, 0}, {0, 0, 4, 4, 5} }; // 为用户 0 推荐 recommend(0, ratings); return 0;}通过本教程,你已经掌握了如何用 C++ 实现一个基础的协同过滤推荐系统。虽然实际工业级的C++推荐算法会更复杂(涉及稀疏矩阵优化、矩阵分解、深度学习等),但这个入门项目为你打下了坚实的基础。
记住,C++编程教程的核心在于动手实践。尝试修改评分数据、调整 K 值,甚至扩展为基于物品的协同过滤,你会收获更多!
希望这篇关于推荐系统实现的文章对你有帮助。欢迎继续探索更高级的推荐算法技术!
本文由主机测评网于2025-12-29发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://vpshk.cn/20251213631.html