上一篇文章简单了的介绍了下libfm的基本使用情况,这篇文章将介绍libffm的使用情况,还是老话先下载编译包
http://www.csie.ntu.edu.tw/~cjlin/libffm/在这个链接中下载编译包,下载到本地进行编译make,在这过程会发生
一个错误
g++ -Wall -O3 -std=c++0x -march=native -fopenmp -DUSEOMP -c -o ffm.o ffm.cpp
clang: error: unsupported option '-fopenmp'
make: *** [ffm.o] Error 1
这个错误解决比较简单,只要把makefile文件中的CXX = g++ 改为:
CXX ?= g++
CC ?= gcc
然后make即可以,编译好之后回产生
ffm-train ffm-predict两个可执行文件
libffm例子自带了数据,下面用简单的例子说明说下
./ffm-train
usage: ffm-train [options] training_set_file [model_file]
options:
-l <lambda>: set regularization parameter (default 0.00002)
-k <factor>: set number of latent factors (default 4)
-t <iteration>: set number of iterations (default 15)
-r <eta>: set learning rate (default 0.2)
-s <nr_threads>: set number of threads (default 1)
-p <path>: set path to the validation set
-v <fold>: set the number of folds for cross-validation
--quiet: quiet model (no output)
--no-norm: disable instance-wise normalization
--no-rand: disable random update
--on-disk: perform on-disk training (a temporary file <training_set_file>.bin will be generated)
--auto-stop: stop at the iteration that achieves the best validation loss (must be used with -p)
-l | 惩罚参数,缺省值0.00002 |
---|---|
-k | 隐变量的个数,缺省值4 |
-t | 模型训练时的迭代次数,缺省值15 |
-r | 初始学习率,缺省值0.2 |
-s | OpenMP的线程数,缺省值1 |
-p | Validation数据的路径 |
-v | 交叉验证中的折数 |
–quiet | 控制是否输出运行时信息 |
–no-norm | 关闭归一化功能,缺省是对样本进行归一化处理 |
–no-rand | 关闭随机更新功能 |
–on-disk | 当有这个参数时,不会将数据全部读入内存,而是将训练数据存储在磁盘,此时产生一个临时文件.bin |
–auto-stop: | 当达到最优的validation损失时自动停止,必须与-p参数一同使用 |
说明:
- –no-norm:缺省状态时用每个样本向量的2范数对样本中的每个元素进行归一化,如果设置了这个参数,则不进行归一化处理。
- –no-rand:缺省状态训练时随机从数据中选取训练样本,如果不想随机的抽取训练样本,而是想按照数据集中的样本顺序训练,则可以使用此参数,同时还要配合参数”-s
1”使用。 - –on-disk:如果训练数据较大内存无法加载全量数据,则可以使用此参数。需要注意的是,这种训练模式下不支持随机的抽取训练数据,所以此时需要设置参数“—no-rand”,同时这种模式下不支持交叉验证。同时还会在磁盘上产生临时的二进制文件[training_set_file].bin。
“`
训练
./ffm-train -l 0.001 -k 16 -t 30 -r 0.05 -s 4 bigdata.tr.txt model
预测
./ffm-predict bigdata.te.txt model output
模型文件:
n 9991
m 18
k 16
normalization 1
w0,0 1.95648e-06 0.0328844 0.188901 0.114663 0.133192 0.0547398 0.0117612 0.169716 0.169824 0.233673 0.0958755 0.129854 0.207741 0.00864303 0.0133654 0.132425
w0,1 0.167787 0.00192455 0.0958539 0.0167106 0.104371 0.171693 0.147244 0.232609 0.211542 0.131732 0.0229912 0.16348 0.104 0.175298 0.22758 0.19055
w0,2 0.074646 0.0209831 0.19113 0.0834052 0.167084 0.198092 0.258891 0.102135 0.0735934 0.250294 0.185886 0.190434 0.172146 0.0193426 0.163658 0.231631
w0,3 0.0731925 0.111001 0.19554 0.131297 0.0671442 0.0697965 0.101111 0.0478792 0.130567 0.235527 0.237891 0.0186342 0.230772 0.126537 0.130296 0.0899311
w0,4 0.255192 0.131299 0.0744555 0.0272959 0.241042 0.0271916 0.134238 0.100963 0.0733053 0.233488 0.13384 0.123466 0.23765 0.0245288 0.194973 0.200692
w0,5 0.218708 0.0338262 0.00699753 0.184125 0.223729 0.164005 0.191111 0.189071 0.260958 0.223078 0.062193 0.0835395 0.0880414 0.129263 0.150918 0.223234
预测结果
0.0219516
0.501304
0.541267
0.237357
0.00464773
0.622506
0.0901457
0.00820256
0.312857
0.169556
参考文献:http://blog.csdn.net/zc02051126/article/details/54614230