ML.NET 示例:推荐之One Class 矩阵分解
写在前面
准备近期将微软的machinelearning-samples翻译成中文,水平有限,如有错漏,请大家多多指正。
如果有朋友对此感兴趣,可以加入我:https://github.com/feiyun0112/machinelearning-samples.zh-cn
产品推荐 - 矩阵分解问题示例
| ML.NET 版本 | API 类型 | 状态 | 应用程序类型 | 数据类型 | 场景 | 机器学习任务 | 算法 |
|---|---|---|---|---|---|---|---|
| v0.8 | 动态 API | 最新版本 | 控制台应用程序 | .txt 文件 | 推荐 | 矩阵分解 | MatrixFactorizationTrainer (One Class) |
在这个示例中,您可以看到如何使用ML.NET来构建产品推荐方案。
本示例中的推荐方式基于共同购买或经常一起购买的产品,这意味着它将根据客户的购买历史向客户推荐一组产品。

在这个示例中,基于经常一起购买的学习模型来推荐产品。
问题
在本教程中,我们将使用亚马逊共同购买产品数据集。
我们将使用One-Class因式分解机来构建我们的产品推荐器,它使用协同过滤方法。
我们介绍的one-class和其他因式分解机的区别在于,在这个数据集中,我们只有购买历史的信息。
我们没有评分或其他详细信息,如产品描述等。
“协同过滤”是在一个基本假设的情况下运作的,即如果某人A在一个问题上与某人B具有相同的意见,则在另一个问题上,相对其他随机选择的人,A更倾向于B的观点。
数据集
原始数据来自SNAP:
https://snap.stanford.edu/data/amazon0302.html
ML 任务 - 矩阵分解 (推荐)
这个示例的ML任务是矩阵分解,它是一个执行协同过滤的有监督的机器学习任务。
解决方案
要解决此问题,您需要在现有训练数据上建立和训练ML模型,评估其有多好(分析获得的指标),最后您可以使用/测试模型来预测给定输入数据变量的需求。

1. 建立模型
建立模型包括:
从 https://snap.stanford.edu/data/amazon0302.html 下载并复制数据集文件Amazon0302.txt。
使用以下内容替换列名:ProductID ProductID_Copurchased
在读取器中,我们已经提供了KeyRange,并且产品ID已经编码,我们需要做的就是使用几个额外的参数调用MatrixFactorizationTrainer。
下面是用于建立模型的代码:
//STEP 1: Create MLContext to be shared across the model creation workflow objects
var ctx = new MLContext();
//STEP 2: Create a reader by defining the schema for reading the product co-purchase dataset
// Do remember to replace amazon0302.txt with dataset from
https://snap.stanford.edu/data/amazon0302.html
var reader = ctx.Data.TextReader(new TextLoader.Arguments()
{
Separator = "tab",
HasHeader = true,
Column = new[]
{
new TextLoader.Column("Label", DataKind.R4, 0),
new TextLoader.Column("ProductID", DataKind.U4, new [] { new TextLoader.Range(0) }, new KeyRange(0, 262110)),
new TextLoader.Column("CoPurchaseProductID", DataKind.U4, new [] { new TextLoader.Range(1) }, new KeyRange(0, 262110))
}
});
//STEP 3: Read the training data which will be used to train the movie recommendation model
var traindata = reader.Read(new MultiFileSource(TrainingDataLocation));
//STEP 4: Your data is already encoded so all you need to do is call the MatrixFactorization Trainer with a few extra hyperparameters:
// LossFunction, Alpa, Lambda and a few others like K and C as shown below.
var est = ctx.Recommendation().Trainers.MatrixFactorization("ProductID", "CoPurchaseProductID",
labelColumn: "Label",
advancedSettings: s =>
{
s.LossFunction = MatrixFactorizationTrainer.LossFunctionType.SquareLossOneClass;
s.Alpha = 0.01;
s.Lambda = 0.025;
// For better results use the following parameters
//s.K = 100;
//s.C = 0.00001;
});
2. 训练模型
一旦定义了评估器,就可以根据可用的训练数据对评估器进行训练。
这将返回一个训练过的模型。
//STEP 5: Train the model fitting to the DataSet
//Please add Amazon0302.txt dataset from https://snap.stanford.edu/data/amazon0302.html to Data folder if FileNotFoundException is thrown.
var model = est.Fit(traindata);
3. 使用模型
我们将通过创建预测引擎/函数来执行此模型的预测,如下所示。
public class Copurchase_prediction
{
public float Score { get; set; }
}
public class ProductEntry
{
[KeyType(Contiguous = true, Count = 262111, Min = 0)]
public uint ProductID { get; set; }
[KeyType(Contiguous = true, Count = 262111, Min = 0)]
public uint CoPurchaseProductID { get; set; }
}
一旦创建了预测引擎,就可以预测两个产品被共同购买的分数。
//STEP 6: Create prediction engine and predict the score for Product 63 being co-purchased with Product 3.
// The higher the score the higher the probability for this particular productID being co-purchased
var predictionengine = model.MakePredictionFunction<ProductEntry, Copurchase_prediction>(ctx);
var prediction = predictionengine.Predict(
new ProductEntry()
{
ProductID = 3,
CoPurchaseProductID = 63
});
ML.NET 示例:推荐之One Class 矩阵分解的更多相关文章
- 推荐算法之用矩阵分解做协调过滤——LFM模型
隐语义模型(Latent factor model,以下简称LFM),是推荐系统领域上广泛使用的算法.它将矩阵分解应用于推荐算法推到了新的高度,在推荐算法历史上留下了光辉灿烂的一笔.本文将对 LFM ...
- HAWQ + MADlib 玩转数据挖掘之(四)——低秩矩阵分解实现推荐算法
一.潜在因子(Latent Factor)推荐算法 本算法整理自知乎上的回答@nick lee.应用领域:"网易云音乐歌单个性化推荐"."豆瓣电台音乐推荐"等. ...
- 机器学习笔记7:矩阵分解Recommender.Matrix.Factorization
目录 1矩阵分解概述 1.1用在什么地方 1.2推荐的原理 2矩阵分解的原理 2.1目标函数 2.2 损失函数 2.3 通过梯度下降的方法求得结果 3 代码实现 参考地址: 贪心学院:https:// ...
- ML.NET 示例:推荐之矩阵分解
写在前面 准备近期将微软的machinelearning-samples翻译成中文,水平有限,如有错漏,请大家多多指正. 如果有朋友对此感兴趣,可以加入我:https://github.com/fei ...
- ML.NET 示例:推荐之场感知分解机
写在前面 准备近期将微软的machinelearning-samples翻译成中文,水平有限,如有错漏,请大家多多指正. 如果有朋友对此感兴趣,可以加入我:https://github.com/fei ...
- 【Math for ML】矩阵分解(Matrix Decompositions) (下)
[Math for ML]矩阵分解(Matrix Decompositions) (上) I. 奇异值分解(Singular Value Decomposition) 1. 定义 Singular V ...
- ML.NET 示例:开篇
写在前面 准备近期将微软的machinelearning-samples翻译成中文,水平有限,如有错漏,请大家多多指正. 如果有朋友对此感兴趣,可以加入我:https://github.com/fei ...
- ML.NET 示例:目录
ML.NET 示例中文版:https://github.com/feiyun0112/machinelearning-samples.zh-cn 英文原版请访问:https://github.com/ ...
- 用Spark学习矩阵分解推荐算法
在矩阵分解在协同过滤推荐算法中的应用中,我们对矩阵分解在推荐算法中的应用原理做了总结,这里我们就从实践的角度来用Spark学习矩阵分解推荐算法. 1. Spark推荐算法概述 在Spark MLlib ...
随机推荐
- 企业建立成功 DevOps 模式所需应对的5个挑战
[编者按]本文作者为 Kevin Goldberg,主要介绍要想成功部署 DevOps 模式,企业所需应对的5大挑战与问题.文章系国内 ITOM 管理平台 OneAPM 编译呈现. 要给 DevOps ...
- java中获取系统的当前时间
转自:http://www.cnblogs.com/Matrix54/archive/2012/05/01/2478158.html 一. 获取当前系统时间和日期并格式化输出: import java ...
- Spring MVC HelloWorld入门及运行机制 (一)
完整的项目案例: springmvc.zip 介绍 SpringMVC是一款Web MVC框架. 它跟Struts框架类似,是目前主流的Web MVC框架之一. 文章通过实例来介绍SpringMVC的 ...
- Java线程相关的热门面试题
---恢复内容开始--- 下面是Java线程相关的热门面试题,你可以用它来好好准备面试. 1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序 ...
- 开发nginx启动脚本及开机自启管理(case)
往往我们在工作中需要自行写一些脚本来管理服务,一旦服务异常或宕机等问题,脚本无法自行管理,当然我们可以写定时任务或将需要管理的脚本加入自启等方法来避免这种尴尬的事情,case适用与写启动脚本,下面给大 ...
- 同步下的资源互斥:停运保护(Run-Down Protection)机制
背景 近期在学习ProcessHacker的源码,Process Hacker是一个免费的.功能强大的"任务管理器",可用于监听系统资源的使用情况,调试软件以及检测恶意程序.使用中 ...
- PAT乙级题:1003我要通过!
#include <iostream> #include <string> #include <vector> #include <algorithm> ...
- Beta冲刺博客汇总(麻瓜制造者)
Beta冲刺博客 Beta冲刺(1/5)(麻瓜制造者) Beta冲刺(2/5)(麻瓜制造者) Beta冲刺(3/5)(麻瓜制造者) Beta冲刺(4/5)(麻瓜制造者) Beta冲刺(5/5)(麻瓜制 ...
- MYSQL基本操作(上)
很久之前,就想做个Mysql的小结,毕竟数据库知识是软件研发的基本技能,这里话不多说,开始总结一波. 数据库基本概念 数据库为高效的存储和处理数据的介质(主要分为磁盘和内存两种),一般关系型数据库存储 ...
- gear gym 思维题
题目:https://vj.69fa.cn/1fc993e7e0e1e6fa7ce4640b8d46ef8d?v=1552762626 这个题目,之前有一点思路,但是呢,后来又不知道怎么去执行,然后就 ...