您的位置:首页 > 其它

LibFM使用手册中文版

2016-12-05 13:12 260 查看
英文版原文:http://www.libfm.org/libfm-1.42.manual.pdf

自己翻译

libFM 1.4.2 - 指南

Steffen Rendle srendle@libfm.org 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: