ML.NET 示例:推荐之场感知分解机
写在前面
准备近期将微软的machinelearning-samples翻译成中文,水平有限,如有错漏,请大家多多指正。
如果有朋友对此感兴趣,可以加入我:https://github.com/feiyun0112/machinelearning-samples.zh-cn
Movie Recommender
| ML.NET 版本 | API 类型 | 状态 | 应用程序类型 | 数据类型 | 场景 | 机器学习任务 | 算法 |
|---|---|---|---|---|---|---|---|
| v0.7 | 动态 API | 需要升级到v0.8 | 终端应用程序 | .csv | 电影推荐 | 推荐 | 场感知分解机 |

概述
MovieRecommender是一个简单的应用程序,它构建和使用推荐模型。
这是一个关于如何使用推荐来增强现有ASP.NET应用程序的终端示例。
本示例从流行的Netflix应用程序中汲取了灵感,并且尽管这个示例主要关注电影推荐,但是可以很容易地应用于任何类型的产品推荐。
特点
Web应用程序
- 这是一个终端ASP.NET应用程序,它包含了三个用户'Ankit','Cesar','Gal'。然后,它使用ML.NET推荐模型给这三个用户提供建议。
推荐模型
- 应用程序使用MovieLens数据集构建推荐模型。模型训练代码使用基于协同过滤的推荐方法。
它如何工作?
训练模型
Movie Recommender 使用基于协同过滤的推荐方法。
协同过滤的基本假设是,如果A(例如Gal)在某个问题上与B(例如Cesar)具有相同的观点,则A(Gal)更有可能在另一个问题上具有和B(Cesar)相同的意见,而不是一个随机的人。
对于此示例,我们使用 http://files.grouplens.org/datasets/movielens/ml-latest-small.zip 数据集。
模型训练代码可以在MovieRecommender_Model中找到。
模型训练遵循以下四个步骤来构建模型。 您可以先跳过代码并继续。

使用模型
通过以下步骤在Controller中使用训练的模型。
1. 创建ML.NET环境并加载已经训练过的模型
// 1. Create the ML.NET environment and load the MoviesRecommendation Model
var ctx = new MLContext();
ITransformer loadedModel;
using (var stream = new FileStream(_movieService.GetModelPath(), FileMode.Open, FileAccess.Read, FileShare.Read))
{
loadedModel = ctx.Model.Load(stream);
}
2. 创建预测函数以预测一组电影推荐
//3. Create a prediction function
var predictionfunction = loadedModel.MakePredictionFunction<RatingData, RatingPrediction>(ctx);
List<Tuple<int, float>> ratings = new List<Tuple<int, float>>();
List<Tuple<int, int>> MovieRatings = _profileService.GetProfileWatchedMovies(id);
List<Movie> WatchedMovies = new List<Movie>();
foreach (Tuple<int, int> tuple in MovieRatings)
{
WatchedMovies.Add(_movieService.Get(tuple.Item1));
}
RatingPrediction prediction = null;
foreach (var movie in _movieService._trendingMovies)
{
// Call the Rating Prediction for each movie prediction
prediction = predictionfunction.Predict(new RatingData { userId = id.ToString(), movieId = movie.MovieID.ToString()});
// Normalize the prediction scores for the "ratings" b/w 0 - 100
var normalizedscore = Sigmoid(prediction.Score);
// Add the score for recommendation of each movie in the trending movie list
ratings.Add(Tuple.Create(movie.MovieID, normalizedscore));
}
3. 为要显示的视图提供评分预测
ViewData["watchedmovies"] = WatchedMovies;
ViewData["ratings"] = ratings;
ViewData["trendingmovies"] = _movieService._trendingMovies;
return View(activeprofile);
替代方法
这个示例显示了许多可以用于ML.NET的推荐方法之一。根据您的特定场景,您可以选择以下任何最适合您的用例的方法。
| 场景 | 算法 | 示例链接 |
|---|---|---|
| 您想使用诸如用户Id、产品Id、评分、产品描述、产品价格等属性(特性)作为推荐引擎。在这种场景中,场感知分解机是一种通用的方法,您可以使用它来构建推荐引擎 | 场感知分解机 | 当前示例 |
| 你有用用户购买行为中的户ID,产品和评分。对于这种情况,您应该使用矩阵分解法 | 矩阵分解 | 矩阵分解 - 推荐 |
| 你仅有用户购买行为中用户Id和产品Id,但是没有评分。 这在来自在线商店的数据集中很常见,您可能只能访问客户的购买历史记录。 有了这种类型的推荐,你可以建立一个推荐引擎用来推荐经常购买的物品。 | One Class 矩阵分解 | Product Recommender |
ML.NET 示例:推荐之场感知分解机的更多相关文章
- ML.NET 示例:推荐之矩阵分解
写在前面 准备近期将微软的machinelearning-samples翻译成中文,水平有限,如有错漏,请大家多多指正. 如果有朋友对此感兴趣,可以加入我:https://github.com/fei ...
- ML.NET 示例:开篇
写在前面 准备近期将微软的machinelearning-samples翻译成中文,水平有限,如有错漏,请大家多多指正. 如果有朋友对此感兴趣,可以加入我:https://github.com/fei ...
- ML.NET 示例:目录
ML.NET 示例中文版:https://github.com/feiyun0112/machinelearning-samples.zh-cn 英文原版请访问:https://github.com/ ...
- 分解机(Factorization Machines)推荐算法原理
对于分解机(Factorization Machines,FM)推荐算法原理,本来想自己单独写一篇的.但是看到peghoty写的FM不光简单易懂,而且排版也非常好,因此转载过来,自己就不再单独写FM了 ...
- 机器学习算法系列:FM分解机
在线性回归中,是假设每个特征之间独立的,也即是线性回归模型是无法捕获特征之间的关系.为了捕捉特征之间的关系,便有了FM分解机的出现了.FM分解机是在线性回归的基础上加上了交叉特征,通过学习交叉特征的权 ...
- ML.NET 示例:推荐之One Class 矩阵分解
写在前面 准备近期将微软的machinelearning-samples翻译成中文,水平有限,如有错漏,请大家多多指正. 如果有朋友对此感兴趣,可以加入我:https://github.com/fei ...
- ML.NET 示例:深度学习之集成TensorFlow
写在前面 准备近期将微软的machinelearning-samples翻译成中文,水平有限,如有错漏,请大家多多指正. 如果有朋友对此感兴趣,可以加入我:https://github.com/fei ...
- ML.NET 示例:聚类之鸢尾花
写在前面 准备近期将微软的machinelearning-samples翻译成中文,水平有限,如有错漏,请大家多多指正. 如果有朋友对此感兴趣,可以加入我:https://github.com/fei ...
- ML.NET 示例:聚类之客户细分
写在前面 准备近期将微软的machinelearning-samples翻译成中文,水平有限,如有错漏,请大家多多指正. 如果有朋友对此感兴趣,可以加入我:https://github.com/fei ...
随机推荐
- IDEA基于Maven Struts2搭建配置及示例
1.web.xml加载struts框架即过滤器,要注意struts版本不同过滤器配置也不同. <!DOCTYPE web-app PUBLIC "-//Sun Microsystems ...
- 在线图片上传、预览、裁切、放大、缩小之 cropbox.js 的应用
cropbox.js 是一个实现了图像在线剪裁的 jQuery .YUI 插件和 JavaScript 库. 上DEMO: 上传的图片可以使用滚轮放大与缩小当前选择的图片,后点击“裁切”后,在右侧的预 ...
- MySQL8.0关于caching_sha2_password Plugin的一个Bug
今天在调试使用ansible进行标准化安装MySQL8.0时,发现关于caching_sha2_password plugin的一个bug. 在搭建主从复制时,按照手册说明需要创建用户: create ...
- JavaScript -- 时光流逝(十一):DOM -- Document 对象
JavaScript -- 知识点回顾篇(十一):DOM -- Document 对象 (1) document.activeElement: 返回文档中当前获得焦点的元素. <!doctype ...
- 持续集成-Jenkins常用插件安装
1. 更新站点修改 由于之前说过,安装Jenkins后首次访问时由于其他原因[具体未知]会产生离线问题.网上找了个遍还是不能解决,所以只能跳过常用插件安装这步.进入Jenkins后再安装这些插件. 在 ...
- LeetCode算法题-Number of Segments in a String(Java实现)
这是悦乐书的第226次更新,第239篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第93题(顺位题号是434).计算字符串中的段数,其中段定义为非空格字符的连续序列.请注 ...
- June 3. 2018 Week 23rd Sunday
You only get one shot; do not miss your chance to blow. 机会只有一次,不要错过. From Eminem, "Lose Yoursel ...
- 英语进阶系列-A03-英语升级练习一
古诗背诵 要求:根据诗句,先翻译成现代文,然后绘制图像. 词汇系列 要求:认真朗读单词,然后通过该单词联想2个词汇,然后给每个单词造句. 例子:class班级,联想到了classroom教室,clas ...
- 注册mySQL到JDBC驱动程序方法浅谈
一.注册方法(4种) 1)服务提供者框架: 符合JDBC 4.0规范的驱动程序包含了一个文件META-INF/services/java.sql.Driver,在这个文件中提供了JDBC驱动实现的类名 ...
- 【BZOJ1449】 球队收益
BZOJ1449 球队收益 Output 一个整数表示联盟里所有球队收益之和的最小值. Sample Input 3 3 1 0 2 1 1 1 10 1 0 1 3 3 1 2 2 3 3 1 Sa ...