libFM初尝试

libFM使用

要使用LibFM训练数据,发现要用libvsm格式数据

但libvsm格式的数据要求时一行一个样本,第一列是标签,其余列是feature特征,但我们的数据是有三个标签,于是设法分别对三个标签单独训练三次,向其他博客主请教后发现这种思路可行。
于是通过execl宏转换生成对应格式,比如对于第一个标签,我们得到的形式如下对应的libvsm格式。
在这里插入图片描述
列举其中一个输入训练文件的样式。
在这里插入图片描述

按照博客要求进行训练时发现异常错误

在网上都没有较好的解答
也没有找到libFM常用的训练数据,后根据一篇博客找到libvsm格式的数据网站,比对两个libvsm格式数据,表面上未发现不同,但是自己生成的数据就是过不去。于是使用网上下载地数据文件地外衣,将自己生成的数据内容放进去,发现可以运行。
数据网站地址https://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/binary.html#ijcnn1

当测试集标签为NAN时发现会提示无法识别NAN的错误提示
ERROR: cannot parse line "Nan    1:.847222222222222      2:.381909547738693      3:.242424242424242" at character N

于是使用1看看,modeltxt里的内容是这样的。

0.185232
0.225945
0.0824995
0.0812175
0.0811083
0.0621622

执行过程截图为
在这里插入图片描述
当将test文档里的Nan都替换成0,modeltxt里的内容为

0.184451
0.224322
0.0837344
0.0826313
0.0815337
0.0633914

执行过程截图为
在这里插入图片描述
当讲test文档里的Nan替换成-1,modeltxt里的内容为

0.184796
0.225034
0.0831882
0.0820146
0.0813276
0.0628483

执行过程截图为
在这里插入图片描述

得到的结果大都相同,对于他们的含义,博客给出的解答是一个概率。 我原本以为得到的概率是指其属于+1类或者-1类的概率,但其输出的结果相近使我太不明白数据结果的含义。

之后再对其他两个标签进行训练,默认NAN为-1
第二个标签训练结果
第二个标签训练结果如上。
生成model2文件,
概率为

0.0586492
0.0699962
0.0322672
0.0282077
0.0377533
0.026012

在这里插入图片描述
第三个标签训练结果如上。
model3文件显示的概率为

0.182937
0.221114
0.078506
0.0778148
0.0751594
0.0576001

哈哈哈,我又回来了,经过一段时间得探索发现,略懂了一点点
在两个方面有所学习

libFM得savemodel 板块

对于原先版本是没有的,其功能模块包含在libfm-master中,下载解压编译后在libfm可执行文件中包含savemode 等功能,如下图所示。

在这里插入图片描述

libFM对测试集进行预测:

我们使用一个回归模型来作为例子
比如训练集如下
每一行代表一个样本。第一题是回归标签,后面是三个特征取值。
在这里插入图片描述
测试集也是相同格式:

0.434343434343434	 1:.636363636363636	 2:.47	 3:.843137254901961
0.474747474747475	 1:9.09090909090909E-02	 2:.64	 3:.705882352941177
0.676767676767677	 1:1	 2:.74	 3:.823529411764706
0.696969696969697	 1:.636363636363636	 2:.97	 3:.862745098039216
0.707070707070707	 1:.636363636363636	 2:1	 3:.980392156862745
0.525252525252525	 1:.727272727272727	 2:.04	 3:.274509803921569

可能会疑惑明明是预测,第一列的标签不应该啥都没有吗?但是为了输入的格式能被识别,标签不能为NAN,不能为空,可以随意设置一个数,比如0,1,问题不大,对结果并不影响。

预测

对于回归问题进行预测:

./libFM -task r -method mcmc -train ijcnn1tr.txt -test ijcnn1ts.txt -iter 100 -dim ‘1,1,2-out output.libfm

task -r 代表是回归任务
task - c 代表的是分类任务
-train 后面跟着是训练集
-test 后面跟着的是测试集
-method 是相应的训练方法,在网上的中文文档中有涉及,这里具体不展开。
-iter 代表模型训练的迭代次数
这里是一百次,当程序运行时会在屏幕上打印出来。
-out 则代表将预测结果输出到哪一个文件之中。
其中各个文件格式可以选择txt ,也可以选择libfm
都可以,不影响结果
在这里插入图片
上图为迭代过程。
下图为预测结果,也就是预测得到的标签。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值