推荐系统学习04-LibMF

介绍

  LibMF的作者是大名鼎鼎的台湾国立大学,他们在机器学习领域享有盛名,近年连续多届KDD Cup竞赛上均获得优异成绩,并曾连续多年获得冠军。业界常用的LibSVM, Liblinear等都是他们开发的,开源代码的效率和质量都非常高。

LibMF是在潜在空间使用两个矩阵,接近一个不完全矩阵。(不知怎么翻译,原句是:LIBMF is an open source tool for approximating an incomplete matrix using the product of two matrices in a latent space.)

矩阵分解(MF)通常在推荐系统中使用。LibMF有如下特点:

providing solvers for real-valued matrix factorization, binary matrix factorization, and one-class matrix factorization(为实值矩阵分解,二元矩阵分解和一类矩阵分解提供解决办法)

parallel computation in a multi-core machine (多核机器中并行计算)

using CPU instructions (e.g., SSE) to accelerate vector operations(可使用CPU指令,比如SSE来加速向量运算)

taking less than 20 minutes to converge to a reasonable level on a data set of 1.7B ratings(在1.7B等级大小的数据上花不到20分钟来聚集到一个合理的级数)

cross validation for parameter selection(参数选择的交叉验证)

supporting disk-level training, which largely reduces the memory usage(支持磁盘级训练,大大减小内存使用)

编译

在Ubuntu14.04上进行。环境需要g++4.6及以上。

将下载的压缩文件上传至Ubuntu,解压。

进入目录,输入“make”进行编译。

编译后可看到这些文件

数据格式

<row_idx> <col_idx> <value>

在demo目录中,文件real_matrix.tr.txt‘ 和 `real_matrix.te.txt‘是真值矩阵分解real-valued
matrix factorization (RVMF)演示的训练和测试数据集。二元矩阵分解binary matrix factorization (BMF)中,`binary_matrix.tr.txt‘ 和`binary_matrix.te.txt.‘中<value>集是{-1, 1}。在一类矩阵分解(one-class MF)中,所有的<value>都是正的。

模型格式

LibMF把一个训练矩阵R变为一个k-by-m的矩阵 `P‘和一个k-by-n的矩阵 `Q‘,也就是R近似于 P‘Q。训练过程结束后,这两个因子矩阵P和Q被存到一个模型文件中。这个文件以如下打头:

  `f‘: the loss function of the solved MF problem

`m‘: the number of rows in the training matrix,

`n‘: the number of columns in the training matrix,

`k‘: the number of latent factors,

`b‘: the average of all elements in the training matrix.

从第五行开始,P和Q的列就被一行接一行的存储。每一行,都有两个领导标志跟在一列值后面。第一个标志是被存储列的名字,第二个标志表明值的类型。如果第二个标志是‘T’,列是真值。否则,列的所有值是NaN。举个例子:

[1 NaN 2]        
    [-1 -2]

P = |3 NaN 4|,     Q = |-3 -4|,

[5 NaN 6]             [-5 -6]

并且b=0.5,则模型文件的内容是:

--------model
file--------

m 3

n  2

k  3

b 0.5

p0 T 1 3 5

p1 F 0 0 0

p2 T 2 4 6

q0 T -1 -3 -5

q1 T -2 -4 -6

--------------------------

使用

`mf-train‘

用法: mf-train [options] training_set_file [model_file]

“mf-train”是LibMF最主要的训练命令。每次迭代,下列信息都被打印出来:

- iter: the index of iteration

- tr_xxxx: xxxx is the evaluation criterion on the training set

- va_xxxx: the same criterion on the validation set if `-p‘ is set

- obj: objective function value

这里的`tr_xxxx‘ 和 `obj‘ 都是估计的,因为计算真的值太耗时间了。

对于不同的损失,标准如下:

<loss>: <evaluation criterion>

-       0: root mean square error (RMSE)

-       1: mean absolute error (MAE)

-       2: generalized KL-divergence (KL)

-       5: logarithmic loss

-   6 & 7: accuracy

- 10 & 11: pair-wise logarithmic loss (BprLoss)

`mf-predict‘

用法:mf-predict [options] test_file model_file output_file

示例

   在demo目录中,有一个“demo.sh”shell脚本,运行它可以用来演示。

下面做一些操作:

mf-train real_matrix.tr.txt model

train a model using the default parameters

mf-train -l1 0.05 -l2 0.01 real_matrix.tr.txt model

train a model with the following regularization coefficients:

coefficient of L1-norm regularization on P = 0.05
coefficient of L1-norm regularization on Q = 0.05
coefficient of L2-norm regularization on P = 0.01
coefficient of L2-norm regularization on Q = 0.01

mf-train -l1 0.015,0 -l2 0.01,0.005 real_matrix.tr.txt model

train a model with the following regularization coefficients:

coefficient of L1-norm regularization on P = 0.05
coefficient of L1-norm regularization on Q = 0
coefficient of L2-norm regularization on P = 0.01
coefficient of L2-norm regularization on Q = 0.03

mf-train -f 5 -l1 0,0.02 -k 100 -t 30 -r 0.02 -s 4 binary_matrix.tr.txt model

train a BMF model using logarithmic loss and the following parameters:

coefficient of L1-norm regularization on P = 0
coefficient of L1-norm regularization on Q = 0.01
latent factors = 100
iterations = 30
learning rate = 0.02
threads = 4

mf-train -p real_matrix.te.txt
real_
matrix.tr.txt model

use real_matrix.te.txt for hold-out validation

mf-train -v 5 real_matrix.tr.txt

do five fold cross validation

mf-train -f 2 --nmf real_matrix.tr.txt

do non-negative matrix factorization with generalized KL-divergence

mf-train --quiet real_matrix.tr.txt

do not print message to screen

mf-train --disk real_matrix.tr.txt

do disk-level training

mf-predict real_matrix.te.txt model output

do prediction

mf-predict -e 1 real_matrix.te.txt model output

do prediction and output MAE

运行完以上操作

希望操作过LibMF的人能给我一些建议,因为我在demo目录中运行"./demo.sh"时,第一次real_matrix可以运行出来:

可是在二元矩阵那里卡住了,后面再尝试,连real_matrix都卡住了。

时间: 2024-10-13 17:35:51

推荐系统学习04-LibMF的相关文章

Thinkphp学习04

原文:Thinkphp学习04 一.ThinkPHP 3 的输出      (重点) a.通过 echo 等PHP原生的输出方式在页面中输出 b.通过display方法输出   想分配变量可以使用assign方法 c.修改左右定界符   休要修改配置文件中的配置项   'TMPL_L_DELIM'=>'<{', //修改左定界符   'TMPL_R_DELIM'=>'}>', //修改右定界符 二.ThinkPHP 3 的模型使用  (重点)  需要在方法中通过new Model(

Java虚拟机JVM学习04 类的初始化

Java虚拟机JVM学习04 类的初始化 类的初始化 在初始化阶段,Java虚拟机执行类的初始化语句,为类的静态变量赋予初始值. 在程序中,静态变量的初始化有两种途径: 1.在静态变量的声明处进行初始化: 2.在静态代码块中进行初始化. 没有经过显式初始化的静态变量将原有的值. 静态变量的声明语句,以及静态代码块都被看做类的初始化语句,Java虚拟机会按照初始化语句在类文件中的先后顺序来依次执行它们. 类的初始化步骤 1.假如这个类还没有被加载和连接,那就先进行加载和连接. 2.假如类存在直接的

设计模式学习04—建造者模式

一.动机与定义 创建对象时,我们知道可以使用工厂方式来创建,使调用者和具体实现解耦,但是有一种情况,当要创建的多个对象之间重复性较大,只有创建步骤.组装顺序或者内部构件不同时,工厂模式就需要进一步的演化了,如我们去KFC,有很多种套餐,比如套餐1(薯条+可乐+汉堡),套餐2(鸡肉卷+薯条+可乐),这个套餐就是我们要获取的复杂对象,那么程序如何创建出这种对象呢. 我们看到套餐的内容很多是一样的,那么我们是不是可以考虑将创建单个食品(如鸡肉卷.可乐等)方法提取出来,使用单独一个类协调这些食品的组合比

JVM学习04:类的文件结构

JVM学习04:类的文件结构 写在前面:本系列分享主要参考资料是  周志明老师的<深入理解Java虚拟机>第二版. 类的文件结构知识要点Xmind梳理 原文地址:https://www.cnblogs.com/wobuchifanqie/p/10786296.html

爬虫学习 04.Python网络爬虫之requests模块(1)

爬虫学习 04.Python网络爬虫之requests模块(1) 引入 Requests 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用. 警告:非专业使用其他 HTTP 库会导致危险的副作用,包括:安全缺陷症.冗余代码症.重新发明轮子症.啃文档症.抑郁.头疼.甚至死亡. 今日概要 基于requests的get请求 基于requests模块的post请求 基于requests模块ajax的get请求 基于requests模块ajax的post请求 综合项目练习:爬取国家药品监

推荐系统学习07-Waffles

介绍 Waffles 英文原意是蜂蜜甜饼,在这里却指代一个很强大的机器学习的开源工具包. Waffles里包括的算法特别多.涉及机器学习的方方面面,推荐系统位于当中的Waffles_recommend  tool,大概仅仅占整个Waffles的1/10的内容,其他还有分类.聚类.採样.降维.数据可视化.音频处理等许很多多工具包,预计能与之媲美的也就数Weka了. 你能够在waffles看到关于这个工具的具体内容. 你还能够訪问waffles的github网站. waffles与其它的机器学习工具

推荐系统学习之评测指标

转自 http://blog.csdn.net/sinat_33741547/article/details/52704986 最近开始学习推荐系统,特记录一下学习过程并做个分享.推荐系统是什么不用多说,这里先介绍一下推荐系统的各种评测指标.1.用户满意度这个指标应该是最能体现一个推荐系统好坏的指标,但获取只能通过用户在线的反馈,类似用户问卷调查,或者用户对推荐物品的行为,比如购买.收藏.评分等判别.2.预测准确度在离线预测用户行为的评价上,这个指标相当重要.在统计学习中,也就是根据训练数据集学

【SpringMVC学习04】Spring、MyBatis和SpringMVC的整合

前两篇springmvc的文章中都没有和mybatis整合,都是使用静态数据来模拟的,但是springmvc开发不可能不整合mybatis,另外mybatis和spring的整合我之前学习mybatis的时候有写过一篇,但是仅仅是整合mybatis和spring,所以这篇文章我系统的总结一下spring.mybatis和springmvc三个框架的整合(后面学习到maven时,我会再写一篇使用maven整合的文章,这篇没有用到maven). 1. jar包管理 我之前有写过一篇spring.hi

推荐系统学习(2)——基于TF-IDF的改进

使用用户打标签次数*物品打标签次数做乘积的算法尽管简单.可是会造成热门物品推荐的情况.物品标签的权重是物品打过该标签的次数,用户标签的权重是用户使用过该标签的次数.从而导致个性化的推荐减少,而造成热门推荐. 运用TF-IDF的思想能够对算法进行改进.TF-IDF(term frequemcy-inverse documnet frequency)是一种用于资讯检索和文本挖掘的加权技术.用来评估一个词的重要程度.其主要思想是假设某个词或短语在一篇文章中出现的频率TF高,而且在其它文章中非常少出现,