• ML.NET 示例:推荐之场感知分解机


    写在前面

    准备近期将微软的machinelearning-samples翻译成中文,水平有限,如有错漏,请大家多多指正。
    如果有朋友对此感兴趣,可以加入我:https://github.com/feiyun0112/machinelearning-samples.zh-cn

    Movie Recommender

    ML.NET 版本 API 类型 状态 应用程序类型 数据类型 场景 机器学习任务 算法
    v0.7 动态 API 需要升级到v0.8 终端应用程序 .csv 电影推荐 推荐 场感知分解机

    Alt Text

    概述

    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中找到。

    模型训练遵循以下四个步骤来构建模型。 您可以先跳过代码并继续。

    Build -> Train -> Evaluate -> Consume

    使用模型

    通过以下步骤在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
  • 相关阅读:
    泛型与非泛型
    C# 调用CMD,执行DOS命令
    数据库设计随笔(ZZ)
    关于三层开发(zz)
    三层架构学习(转)
    Node.js & child_process All In One
    HTML5 Canvas Tag Cloud All In One
    macOS & VSCode terminal show current git branch All In One
    飞书 excel 固定列 All In One
    git diff one of committed file All In One
  • 原文地址:https://www.cnblogs.com/feiyun0112/p/10115917.html
Copyright © 2020-2023  润新知