<delect id="sj01t"></delect>
  1. <em id="sj01t"><label id="sj01t"></label></em>
  2. <div id="sj01t"></div>
    1. <em id="sj01t"></em>

            <div id="sj01t"></div>
            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

            <delect id="sj01t"></delect>
            1. <em id="sj01t"><label id="sj01t"></label></em>
            2. <div id="sj01t"></div>
              1. <em id="sj01t"></em>

                      <div id="sj01t"></div>
                      黄色视频在线观看