ホームページ >バックエンド開発 >C#.Net チュートリアル >C#でレコメンデーションアルゴリズムを実装する方法
レコメンデーション アルゴリズムの中核はユーザー行動データにあります。開発者は、ユーザーの過去の閲覧記録、購入記録、評価記録など、十分なユーザー行動データを収集する必要があります。等C# では、データベースまたはファイルを使用してこれらのデータを保存し、API またはログを通じてリアルタイムで記録できます。
アイテムベースの協調フィルタリング アルゴリズムは、レコメンデーション システムで最も一般的に使用されるアルゴリズムの 1 つです。その中心的なアイデアは、ユーザーの過去の行動データに基づいて、ユーザーが興味のあるアイテムに非常に類似したアイテムを見つけて、これらの類似したアイテムをユーザーに推奨することです。
public class ItemBasedCF { // 计算物品相似度 public static Dictionary<int, Dictionary<int, double>> CalculateSimilarity(Dictionary<int, Dictionary<int, double>> userItems) { // 构建物品到用户的倒排表 Dictionary<int, List<int>> itemUsers = new Dictionary<int, List<int>>(); foreach (var userItem in userItems) { int userId = userItem.Key; foreach (var itemRating in userItem.Value) { int itemId = itemRating.Key; if (!itemUsers.ContainsKey(itemId)) { itemUsers[itemId] = new List<int>(); } itemUsers[itemId].Add(userId); } } // 计算物品相似度矩阵 Dictionary<int, Dictionary<int, double>> itemSimilarity = new Dictionary<int, Dictionary<int, double>>(); foreach (var item1 in itemUsers.Keys) { itemSimilarity[item1] = new Dictionary<int, double>(); foreach (var item2 in itemUsers.Keys) { if (item1 == item2) continue; int commonUserCount = itemUsers[item1].Intersect(itemUsers[item2]).Count(); if (commonUserCount > 0) { double similarity = (double)commonUserCount / Math.Sqrt(itemUsers[item1].Count * itemUsers[item2].Count); itemSimilarity[item1][item2] = similarity; } } } return itemSimilarity; } // 根据物品相似度推荐物品 public static List<int> RecommendItems(int userId, Dictionary<int, Dictionary<int, double>> userItems, Dictionary<int, Dictionary<int, double>> itemSimilarity) { List<int> recommendedItems = new List<int>(); Dictionary<int, double> userRatings = userItems[userId]; // 获取用户未评分的物品 List<int> unratedItems = itemSimilarity.Keys.Except(userRatings.Keys).ToList(); foreach (var unratedItem in unratedItems) { double ratingSum = 0; double similaritySum = 0; // 遍历用户已评分的物品 foreach (var ratedItem in userRatings.Keys) { if (itemSimilarity.ContainsKey(ratedItem) && itemSimilarity[ratedItem].ContainsKey(unratedItem)) { double rating = userRatings[ratedItem]; double similarity = itemSimilarity[ratedItem][unratedItem]; ratingSum += rating * similarity; similaritySum += similarity; } } if (similaritySum > 0) { double predictedRating = ratingSum / similaritySum; if (predictedRating > 0) { recommendedItems.Add(unratedItem); } } } return recommendedItems; } }3. ユーザーベースの協調フィルタリング アルゴリズム
ユーザーベースの協調フィルタリング アルゴリズムもよく使用されます。レコメンデーションアルゴリズム。その中心的なアイデアは、ユーザーの過去の行動データに基づいて同様の興味を持つユーザーを見つけ、これらの類似したユーザーが好むアイテムをユーザーに推奨することです。
public class UserBasedCF { // 计算用户相似度 public static Dictionary<int, Dictionary<int, double>> CalculateSimilarity(Dictionary<int, Dictionary<int, double>> userItems) { // 构建用户-物品倒排表 Dictionary<int, List<int>> itemUsers = new Dictionary<int, List<int>>(); foreach (var userItem in userItems) { int userId = userItem.Key; foreach (var itemRating in userItem.Value) { int itemId = itemRating.Key; if (!itemUsers.ContainsKey(itemId)) { itemUsers[itemId] = new List<int>(); } itemUsers[itemId].Add(userId); } } // 计算用户相似度矩阵 Dictionary<int, Dictionary<int, double>> userSimilarity = new Dictionary<int, Dictionary<int, double>>(); foreach (var user1 in userItems.Keys) { userSimilarity[user1] = new Dictionary<int, double>(); foreach (var user2 in userItems.Keys) { if (user1 == user2) continue; int commonItemCount = itemUsers.Keys.Intersect(userItems[user1].Keys.Intersect(userItems[user2].Keys)).Count(); if (commonItemCount > 0) { double similarity = (double)commonItemCount / Math.Sqrt(userItems[user1].Count * userItems[user2].Count); userSimilarity[user1][user2] = similarity; } } } return userSimilarity; } // 根据用户相似度推荐物品 public static List<int> RecommendItems(int userId, Dictionary<int, Dictionary<int, double>> userItems, Dictionary<int, Dictionary<int, double>> userSimilarity) { List<int> recommendedItems = new List<int>(); Dictionary<int, double> userRatings = userItems[userId]; // 获取用户未评分的物品 List<int> unratedItems = userItems.Keys.Except(userRatings.Keys).ToList(); foreach (var unratedItem in unratedItems) { double ratingSum = 0; double similaritySum = 0; // 遍历与用户兴趣相似的其他用户 foreach (var similarUser in userSimilarity[userId].Keys) { if (userItems[similarUser].ContainsKey(unratedItem)) { double rating = userItems[similarUser][unratedItem]; double similarity = userSimilarity[userId][similarUser]; ratingSum += rating * similarity; similaritySum += similarity; } } if (similaritySum > 0) { double predictedRating = ratingSum / similaritySum; if (predictedRating > 0) { recommendedItems.Add(unratedItem); } } } return recommendedItems; } }上記のコードは単なる例であり、特定の推奨アルゴリズムの実装は、次の基準に従って調整および最適化する必要があります。実際の状況。 概要: C# 言語を使用すると、アイテムベースの協調フィルタリング アルゴリズムやユーザーベースの協調フィルタリング アルゴリズムなど、さまざまな推奨アルゴリズムを実装できます。実際のアプリケーションでは、開発者は必要に応じて適切な推奨アルゴリズムを選択し、特定のビジネス ロジックと組み合わせてカスタマイズされた開発を実行できます。レコメンデーション アルゴリズムの実装は、ユーザー エクスペリエンスを向上させるだけでなく、Web サイトや製品により多くのトラフィックと収益をもたらすことができます。
以上がC#でレコメンデーションアルゴリズムを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。