<address id="ousso"></address>
<form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
  1. C語言

    C#實現協同過濾算法的實例代碼

    時間:2025-05-02 04:56:08 C語言 我要投稿
    • 相關推薦

    C#實現協同過濾算法的實例代碼

      還在找C#實現協同過濾算法的代碼嗎?下面小編為大家整理了C#實現協同過濾算法的實例代碼,希望能幫到大家!

      復制代碼 代碼如下:

      using System;

      using System.Collections.Generic;

      using System.Linq;

      using System.Text;

      namespace SlopeOne

      {

      public class Rating

      {

      public float Value { get; set; }

      public int Freq { get; set; }

      public float AverageValue

      {

      get { return Value / Freq; }

      }

      }

      public class RatingDifferenceCollection : Dictionary

      {

      private string GetKey(int Item1Id, int Item2Id)

      {

      return (Item1Id < Item2Id) ? Item1Id + "/" + Item2Id : Item2Id + "/" + Item1Id ;

      }

      public bool Contains(int Item1Id, int Item2Id)

      {

      return this.Keys.Contains(GetKey(Item1Id, Item2Id));

      }

      public Rating this[int Item1Id, int Item2Id]

      {

      get {

      return this[this.GetKey(Item1Id, Item2Id)];

      }

      set { this[this.GetKey(Item1Id, Item2Id)] = value; }

      }

      }

      public class SlopeOne

      {

      public RatingDifferenceCollection _DiffMarix = new RatingDifferenceCollection(); // The dictionary to keep the diff matrix

      public HashSet_Items = new HashSet(); // Tracking how many items totally

      public void AddUserRatings(IDictionaryuserRatings)

      {

      foreach (var item1 in userRatings)

      {

      int item1Id = item1.Key;

      float item1Rating = item1.Value;

      _Items.Add(item1.Key);

      foreach (var item2 in userRatings)

      {

      if (item2.Key <= item1Id) continue; // Eliminate redundancy

      int item2Id = item2.Key;

      float item2Rating = item2.Value;

      Rating ratingDiff;

      if (_DiffMarix.Contains(item1Id, item2Id))

      {

      ratingDiff = _DiffMarix[item1Id, item2Id];

      }

      else

      {

      ratingDiff = new Rating();

      _DiffMarix[item1Id, item2Id] = ratingDiff;

      }

      ratingDiff.Value += item1Rating - item2Rating;

      ratingDiff.Freq += 1;

      }

      }

      }

      // Input ratings of all users

      public void AddUerRatings(IListRatings)

      {

      foreach(var userRatings in Ratings)

      {

      AddUserRatings(userRatings);

      }

      }

      public IDictionaryPredict(IDictionaryuserRatings)

      {

      DictionaryPredictions = new Dictionary();

      foreach (var itemId in this._Items)

      {

      if (userRatings.Keys.Contains(itemId)) continue; // User has rated this item, just skip it

      Rating itemRating = new Rating();

      foreach (var userRating in userRatings)

      {

      if (userRating.Key == itemId) continue;

      int inputItemId = userRating.Key;

      if (_DiffMarix.Contains(itemId, inputItemId))

      {

      Rating diff = _DiffMarix[itemId, inputItemId];

      itemRating.Value += diff.Freq * (userRating.Value + diff.AverageValue * ((itemId < inputItemId) ? 1 : -1));

      itemRating.Freq += diff.Freq;

      }

      }

      Predictions.Add(itemId, itemRating.AverageValue);

      }

      return Predictions;

      }

      public static void Test()

      {

      SlopeOne test = new SlopeOne();

      DictionaryuserRating = new Dictionary();

      userRating.Add(1, 5);

      userRating.Add(2, 4);

      userRating.Add(3, 4);

      test.AddUserRatings(userRating);

      userRating = new Dictionary();

      userRating.Add(1, 4);

      userRating.Add(2, 5);

      userRating.Add(3, 3);

      userRating.Add(4, 5);

      test.AddUserRatings(userRating);

      userRating = new Dictionary();

      userRating.Add(1, 4);

      userRating.Add(2, 4);

      userRating.Add(4, 5);

      test.AddUserRatings(userRating);

      userRating = new Dictionary();

      userRating.Add(1, 5);

      userRating.Add(3, 4);

      IDictionaryPredictions = test.Predict(userRating);

      foreach (var rating in Predictions)

      {

      Console.WriteLine("Item " + rating.Key + " Rating: " + rating.Value);

      }

      }

      }

      }

    【C#實現協同過濾算法的實例代碼】相關文章:

    c#實現輪詢算法實例代碼05-31

    c#實現sunday算法實例08-07

    KMP算法的C#實現方法04-11

    快速排序算法及C#版的實現示例07-03

    C語言中實現KMP算法實例08-09

    C語言選擇排序算法及實例代碼07-25

    C語言插入排序算法及實例代碼07-02

    C語言奇偶排序算法詳解及實例代碼04-05

    C#數據結構之循環鏈表的實例代碼03-15

    <address id="ousso"></address>
    <form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
    1. 日日做夜狠狠爱欧美黑人