LibFM使用手册中文版

英文版原文:http://www.libfm.org/libfm-1.42.manual.pdf

自己翻译

libFM 1.4.2 - 指南

Steffen Rendle [email protected] http://www.libfm.org/  2014年9月14日

目录

1.说明

 Linux 按照第 1.1 说明编译 libFM 
 MacOS x︰ 按照第 1.1 说明编译 libFM 
 Windows  libfm-1.40.windows.zip (2013-07-12) 下载已编译可执行文件可以第 1.1 
注意已编译可执行文件版本 libFM 1.4.0 这个版本 libFM 1.4.2 相同功能不同许可证。

1.1编译

libFM 已经与 GNU 编译器 GNU 测试过Linux  MacOS X上两者应该可用
使用以下步骤可以构建 libFM:
1.下载 libFM 源代码 http://www.libfm.org/libfm-1.42.src.tar.gz
2.解压缩 例如焦油-xzvf libfm-1.42.src.tar.gz
3.输入目录 libfm 1.42.src 编译工具 make all

文件概述

 history.txt 版本历史记录更改
 readme.pdf libfm的手册
 Makefile 使用make编译可执行文件
 bin executables(需要使用make来build,见1.1节)的文件夹
— — libFM: libFM 工具
— —  convert 将文字文件转换二进制格式工具
— — transpos 转换二进制设计矩阵一个工具
  scripts
— — ltriple format to libfm.pl 一个 Perl 脚本将逗号/制表符分隔数据集 转换成  libFM 格式。
 src 源文件 libFM 工具


2.数据格式

libFM 支持两种文件格式用于输入数据 文本格式二进制格式使用文本格式更容易的,所以推荐 libFM 用户使用。

2.1 文本格式

数据格式与SVMlite [3]  LIBSVM [1] 相同,每一行都都包含一个训练集(x,y),分别提供给实特征向量x和目标y。行首先规定y的值,然后是x的非零值。
对于二进制类型,y>0的类型被认为是积极的一类,y<=0被认为是消极的一类。
文件 包含 三个case:
第一 指出 三个case 每个 目标 ︰4是第一个case的, 2是 第二的,-1是 三个
在每个 目标 之后 包含 非零 元素x。如   0:1.5  表示 =   1.5  , 3 :-7.9   表示 =   −7.9 等等
即:左边的值是 x   索引 右边的是   的值   =  

总之,上述例子表示如下设计矩阵X和目标向量y;

2.1.1转变到推荐文件

推荐系统经常使用 userid, itemid, rating的这样的文件格式。
在script文件夹中的perl脚本是用来将这样格式的数据集转换成libFM的格式的。例如,将Movielens 1M里的rating.csv转换成libFM格式,
使用——
./triple_format_to_libfm.pl-in ratings.dat -target 2 -delete_column 3 -separator "::"
输出写入一个文件扩展名为.libfm的文件中。例如,写入toratings.dat.libfm中。
如果一个数据集包含多个文件如包含训练测试split,则使用——in后面包含多个文件
./triple_format_to_libfm.pl -in train.txt,test.txt-target 2 -separator "\t"

注意:
如果你为每个文件单独运行一次脚本,则变量(id)将不会匹配了。
例如,第一个文件中的第n个变量将和第二个文件中的第n个变量不一样了。

2.2二进制文件

除了标准文本格式libFM 支持二进制数据格式
二进制文件优点:
(1) 读的速度快
(2) 如果数据适合内存二进制数据格式 支持 数据 缓存 硬盘 内存 保留 只有 部分   (使用   — — 高速缓存 大小   libFM),
(3)如果 使用   ALS     mcmc 方法 可以 预先计算 换位 设计 矩阵, 可以节省读取数据 时间
 使用bin文件夹下的【如下】,可以将LibFM文本格式的文件转换为二进制格式的文件。


例如:
将前面提到的电影数据集转换成二级制格式:
./convert --ifile ratings.dat.libfm --ofilex ratings.x --ofiley ratings.y

输出两个文件: 
(1)包含设计矩阵X即预测器变量的文件
(2)包含预测目标y的文件
建议,分别以.x和.y作为文件拓展名

2.2.1转置数据(Transpose data)

使用转置设计矩阵(transposed design matrix)来学习MCMC和ALS。
如果您使用的是文本格式,libFm内部会自动转换这些数据。
如果您使用的是二进制格式,二进制格式中必须存在转置数据。
使用transpose工具,将设计矩阵x转换为二级制格式:
例如:转换上述提到的电影数据集:
./transpose --ifile ratings.x --ofile ratings.xt
输出为设计矩阵x的一个转置复制,建议以.xt作为结尾。

3.libFm

libFm工具从训练数据集(-train)和验证数据集(-test)中训练FM模型。

libFm有如下选项:


3.1强制参数

 指定的 第一个 强制性 参数—— -task 要么是分类   (-task c )  要么就是 回归   (-任务   r)。

 第二训练数据 (-train) 测试数据 (-test) 必须存在。此处可以使用二进制文件,也可以使用libFm文本格式文件。

 第三分解维度需要用-dim来指定,由三个数字组成,
——来确定全局偏移是否要在模型中使用。
——来确定单向交互(one-way interactions)(为每个变量的偏移)即w是否要在模型中使用
——给出了用于成对相互作用因素个数,即k是

例如:一个FM,使用bias,1-way interactions,a factorization of k = 8 forpairwise interactions的回归任务——
/libFM -task r -train ml1m-train.libfm -test ml1m-test.libfm -dim ’1,1,8’

3.2可选参数

3.2.1基本参数

 out 训练完毕可以将测试数据集所有预测结果通过out写入指定的文件Out-file 文本格式,与测试数据集的行数相等,第i行的数据为第i个测试数据的结果。
请注意,对于分类,有积极类型的数据输出的概率。
 rlog 生成一个有关次迭代统计信息的日志文件文件 使用制表符分隔字段CSV 格式
请注意取决哪些字段报道学习方法
 verbosity 使用参数-详细级别 1,libFM 打印详细信息有用检查是否正确读取数据错误

3.2.1高阶参数

Grouping 
通过使用meta选项可以进行将输入变量group,grouping可以用来给ALS,MCMC,SGDA来确定更复杂的正则化模型。
每个group可以有一个单独的正则化参数。
为了使用group,元参数需要使用文本文件的文件名,和有很多输入变量和许多行一样。
每一行指定一个相应输入参数的group id。【需要注意的是】group的id需要是从0开始的数字。
例如:
例子1中的设计矩阵(一共7行,最大的id是6)的group文件,应该是这样的
表示的意义是:一共有三组,两个变量 设计矩阵最后是同一组,第四第六变量同一

进制数据和缓存

在2.2章节中提到,二进制文件中,设计矩阵以应以.x和目标以.y结尾,转置以.xt结尾。如果在libfm中使用二进制文件,那么不需要以这些格式结尾。

即:如果你有 compiled training (ml1m-train.x, ml1m-train.y,ml1m-train.xt) and 测试数据 (ml1m-test.x, ml1m-test.y, ml1m-test.xt) 
使用——
./libFM -task r -trainml1m-train -testml1m-test -dim ’1,1,8’

libFm会自动追加适当的扩展名,并为学习算法载入数据集

如果你的数据不适合进入内存,你可以指定libFM允许多大的文件允许保存在内存中
使用——
./libFM -task r -train ml1m-train -test ml1m-test -dim ’1,1,8’-cache_size 100000000

表示为100,000,000 Bytes (100 MB)的内存可以被.x或者.xt文件使用。

【注意】

.y文件通常完全地读入内存中。

如果没有指定参数cache-size,所有数据将都进入内存。

【注意】

只有当数据因为cache使用比读写内存慢很多的锁(harddisc)的时候而不适合进行内存,才使用caching。

Note: you should usecaching only if the data does not fit into memory because caching uses the harddisc which will be muchslower then memory access.

3.3学习方法

默认的学习方式是MCMC,因为MCMC是非常易于掌握的(没有学习速率,没有正则化项)
在libFM中你可以选择SGD,ALS, MCMC , SGDA。对于所有这些方法,迭代次数(iter)都需要指定

3.3.1 Stochastic Gradient Descent (SGD)

通过使用-method sgd参数,可以实现SGD学习方法,对于此方法,以下参数可以选择。
• -learn rate:SGD学习速率的步长,需是一个非零且postive的值
• -regular:正则化参数,需是0或者postive的值
对于SGD,你可以通过以下方法来确定正则化的值:
– One value (-regular value):所有的参数模型使用统一的正则化值
– Three values (-regular ’value0,value1,value2’): 0-way interactions (w0) use value0 asregularization, 
1-way interactions (w) use value1 
pairwise ones (V ) use value2
– No value:使用-regular 0来表示没有指定正则化值
• -init stdev:标准偏差正态分布用于 初始化V 的参数在这里应该使用一个非零的、 postive的值。

慎重选择这些参数预测质量很大程度上取决于很好选择。
例如:
./libFM -task r -train ml1m-train.libfm -test ml1m-test.libfm -dim ’1,1,8’ -iter 1000-method sgd -learn_rate 0.01 -regular ’0,0,0.01’ -init_stdev 0.1

3.3.2 Alternating Least Squares (ALS)

通过使用-method als参数,可以实现SGD学习方法,对于此方法,以下参数可以选择。
• -regular:正则化参数,需是一个非零且postive的值
对于ALS可以使用以下方法来正则化:
– One value (-regular value):所有的参数模型使用统一的正则化值
– Three values (-regular ’value0,value1,value2’): 0-way interactions (w0) use value0 asregularization, 
1-way interactions (w) use value1 
pairwise ones (V ) use value2
– Group specific values (-regular ’value0,value1g1,...,value1gm,value2g1,...,value2gm’):例如,对于m groups如果输入变量是grouped的,对于每个group,
1-way and 2-way interaction 每一个正则化值都被使用,那么有1+2m个正则化值,
– No value:使用-regular 0来表示没有指定正则化值

• -init stdev:标准偏差正态分布用于初始化V 的参数在这里应该使用一个非零的、 postive的值。
慎重选择这些参数预测质量很大程度上取决于很好选择。
例如:
./libFM -task r -train ml1m-train.libfm -test ml1m-test.libfm -dim ’1,1,8’ -iter 1000-method als -regular ’0,0,10’ -init_stdev 0.1

3.3.3 Markov Chain Monte Carlo (MCMC)

通过使用-method mcmc参数,可以实现MCMC学习方法,对于此方法,以下参数可以选择。
• -init stdev:标准偏差正态分布用于初始化V 的参数在这里应该使用一个非零的、 postive的值。
慎重选择这些参数预测质量很大程度上取决于很好选择。
例如:
./libFM -task r -train ml1m-train.libfm -test ml1m-test.libfm -dim ’1,1,8’ -iter 1000-method mcmc -init_stdev 0.1

3.3.4 Adaptive SGD (SGDA)

通过使用-method sgda参数,可以实现SGDA学习方法。当采用SGDA时,正则化值(每组和每层)会被自动找到。
你需要去指定一个有效的集合去调优正则化值。
• -validation:包含训练样本的数据集用作验证集合来调优正则化值。此数据集需要与训练数据集区分开。
• -learn rate:学习速率的步长,需是一个非零且postive的值
• -init stdev: 标准 偏差 正态分布 用于初始化V 的参数在这里应该使用一个非零的、 postive的值。

慎重 选择 这些 参数 预测 质量 很大程度上 取决于 很好 选择。

例如:
./libFM -task r -train ml1m-train.libfm -test ml1m-test.libfm -dim ’1,1,8’ -iter 1000-method sgda -learn_rate 0.01 -init_stdev 0.1 -validation ml1m-val.libfm

4.块结构 (BS) 扩展



上图表示:
(a)   LibFM   数据 文件   (=   设计 矩阵   X   表示形式   可能 包含 重复 图案
(b)   libFM  的 BS   扩展 允许 使用 紧凑 表示 数据 文件来表示曾经描述过的 重复 图案 哪里 只是 曾经 描述了 (图 改编   [7])

在相关背景下, 设计 矩阵 可能 包含 重复 模式   (见   1a)。 这可能导致设计矩阵非常大,以至于学习速度慢而且占用很多内存。
在libFM的BS扩展中,允许在设计矩阵中定义和利用块结构。BS数据类型取代传统的数据类型所用时间和所占内存都会成线性。
来自相关数据的大的设计矩阵的具体细节详情见[7]

4.1数据格式

BS   扩展 允许 定义   (例如   B1   B2   B3     1) 在  libFM   使用 它们
每个 定义 包括
  设计 矩阵   (libFM 文件)     (例如   XB1   1)。
  从训练 (或 测试)case   映射   (例如   φ   B1   1)。
  设计 矩阵  中的可选分组 (比较 第  3.2.2     对于 每个 预计 以下 文件

4.2使用BS数据来启动LibFm

使用--relation参数来传递命令行参数,假设已经定义了两块(rel.user andrel.item)则使用
./libFM -task r -train ml1m-train -test ml1m-test -dim ’1,1,8’ --relation rel.user,rel.item

注意:上面文件中列出的每一块都必须出现。(i.e. rel.user.x, rel.user.xt,rel.user.train, rel.user.test, (rel.user.groups), rel.item.x, rel.item.xt, etc.).

4.3在libFm中使用BS的注意事项

 BS 支持 MCMC  ALS/CD
 甚至当 使用   BS   , --train ,--test 参数 仍旧 强制执行, 文件 必须 在此处 指定 LibFM   文件 通过 --train ,--test 可以 预测 变量 以及 可能  空。
  文件可以是二进制形式,可以是文本形式
  BS 设计矩阵变量 id 命名空间不同
• 在BS文件中group的命名空间是不同的。每一个组文件可以有从0开始的组。 – overlaps are resolved the same way as with predictor ids.
• If no group files are passed, each block is automatically assumed to have a different group


5.许可证

If you use libFM in your work, please cite the following paper:

@article{rendle:tist2012,author = {Rendle, Steffen},title = {Factorization Machines with {libFM}},journal = {ACM Trans. Intell. Syst. Technol.},issue_date = {May 2012},volume = {3},number = {3},month = May,year = {2012},issn = {2157-6904},pages = {57:1--57:22},articleno = {57},numpages = {22},publisher = {ACM},address = {New York, NY, USA},}

References
[1] Chih-Chung Chang and Chih-Jen Lin. Libsvm: A library for support vector machines. ACM Trans.Intell. Syst. Technol., 2:27:1–27:27, May 2011.
[2] Christoph Freudenthaler, Lars Schmidt-Thieme, and Steffen Rendle. Bayesian factorization machines.In NIPS workshop on Sparse Representation and Low-rank Approximation, 2011.
[3] Thorsten Joachims. Making large-scale support vector machine learning practical, pages 169–184. MITPress, Cambridge, MA, USA, 1999.
[4] Steffen Rendle. Factorization machines. In Proceedings of the 10th IEEE International Conferenceon Data Mining. IEEE Computer Society, 2010.
[5] Steffen Rendle. Factorization machines with libFM. ACM Trans. Intell. Syst. Technol., 3(3):57:1–57:22, May 2012.
[6] Steffen Rendle. Learning recommender systems with adaptive regularization. In WSDM ’12: Proceedingsof the third ACM international conference on Web search and data mining, New York, NY,USA, 2012. ACM.
[7] Steffen Rendle. Scaling factorization machines to relational data. In Proceedings of the 39th internationalconference on Very Large Data Bases, PVLDB’13, pages 337–348. VLDB Endowment,2013.
[8] Steffen Rendle, Zeno Gantner, Christoph Freudenthaler, and Lars Schmidt-Thieme. Fast contextawarerecommendations with factorization machines. In Proceedings of the 34th ACM SIGIR Conferenceon Reasearch and Development in Information Retrieval. ACM, 2011.


推荐系统学习05-libFM - 风萧萧兮 - 博客频道 - CSDN.NET
http://blog.csdn.net/chenKFKevin/article/details/51066214

你可能感兴趣的:(libFM)