足球游戏_中国足彩网¥体育资讯$

C#实现协同过滤算法的实例代码
来源:易贤网 阅读:1637 次 日期:2014-09-05 15:36:49
温馨提示:易贤网小编为您整理了“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<string, Rating>

{

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<string>(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<int> _Items = new HashSet<int>(); // Tracking how many items totally

public void AddUserRatings(IDictionary<int, float> userRatings)

{

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(IList<IDictionary<int, float>> Ratings)

{

foreach(var userRatings in Ratings)

{

AddUserRatings(userRatings);

}

}

public IDictionary<int, float> Predict(IDictionary<int, float> userRatings)

{

Dictionary<int, float> Predictions = new Dictionary<int, float>();

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();

Dictionary<int, float> userRating = new Dictionary<int, float>();

userRating.Add(1, 5);

userRating.Add(2, 4);

userRating.Add(3, 4);

test.AddUserRatings(userRating);

userRating = new Dictionary<int, float>();

userRating.Add(1, 4);

userRating.Add(2, 5);

userRating.Add(3, 3);

userRating.Add(4, 5);

test.AddUserRatings(userRating);

userRating = new Dictionary<int, float>();

userRating.Add(1, 4);

userRating.Add(2, 4);

userRating.Add(4, 5);

test.AddUserRatings(userRating);

userRating = new Dictionary<int, float>();

userRating.Add(1, 5);

userRating.Add(3, 4);

IDictionary<int, float> Predictions = test.Predict(userRating);

foreach (var rating in Predictions)

{

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

}

}

}

}

中国足彩网信息请查看IT技术专栏

中国足彩网信息请查看网络编程
易贤网手机网站地址:C#实现协同过滤算法的实例代码
由于各方面情况的不断调整与变化,易贤网提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 加入群交流 | 手机站点 | 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 足球游戏_中国足彩网¥体育资讯$ 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:hfpxwx
咨询QQ:526150442(9:00—18:00)版权所有:易贤网
云南网警报警专用图标