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 ...
随机推荐
- 更新 Anaconda 库文件
查看库 Anaconda Navigator中 启动Anaconda Prompt(或Anaconda Navigator中Environment->(base)root->Open te ...
- Android 自定义弹出框带EditText
EditText 布局页面 edittext_ownername_dialog.xml: <?xml version="1.0" encoding="utf-8&q ...
- 你不可不知的Java引用类型之——ReferenceQueue源码详解
定义 ReferenceQueue是引用队列,用于存放待回收的引用对象. 说明 对于软引用.弱引用和虚引用,如果我们希望当一个对象被垃圾回收器回收时能得到通知,进行额外的处理,这时候就需要使用到引用队 ...
- (网页)HTML5
1.html5基本格式: <!DOCTYPE> --> 文档类型声明. <html lang="zh-cn"> --> 表示html文档开始 & ...
- ORA-01440: column to be modified must be empty to decrease precision or scale
在修改表字段的NUMBER类型的精度或刻度时,你可能会遇到ORA-01440: column to be modified must be empty to decrease precision or ...
- python--私有属性--私有方法
Class 定义类 def 初始化方法(形参) 属性1 属性2 私有属性(属性之前加--) def 方法1() print() 属性和方法定义好以后,在创建对象 对象=类名(“”) print( ...
- IIS下MySQL停止和启动的方法
mysql服务的启动与停止:点击开始--运行,输入services.msc , 在弹出的服务窗口中,找到mysql服务,直接点击左侧对应 的就可以了 如下图所示:
- 【PAT】 B1006 换个格式输出整数
超简单题 //直接将各位分开,分别用for循环输出 #include<stdio.h> int main(){ int num; scanf("%d",&num ...
- 4.11Python数据处理篇之Matplotlib系列(十一)---图例,网格,背景的设置
目录 目录 前言 (一)图例legend 1.默认不带参数的图例 2.添加参数的图例 3.将图例移动到框外 (二)网格grid 1.说明 2.源代码: 3.输出效果 (三)背景axses 1.设置全局 ...
- C++借助curses库实现俄罗斯方块
主要要实现如下几个功能:方块的移动控制.方块变形.判定方块是否接触边界和进行方块堆积.对方块进行消除. 1.方块的移动控制上下左右四个方向上-->变形,下-->加速下落,左-->向左 ...