1.下载libFM源码包: 源包
2.解压压缩包libfm-1.42.src(为方便后续操作,将文件重命名为libfm)
3.在终端输入命令行:cd /Users/xxx/Desktop/libfm/,即到libfm放置的目录下,我是将源包放置在了桌面上。
4.在进入到指定目录之后,继续输入命令行:make all,即可安装成功。
(libFM具体使用指导手册:manual.pdf)
1.pywFM可以直接利用libFM完成Factorization Machines的功能,减少了编写代码量,安装方法较为简单,直接在终端输入命令:pip3 install pywFM即可(python2使用pip)
2.在使用pywFM的过程,也可以直接下载pywFM的源码包:源码包,其中我下载的是最新版的0.12.1,打开下载的包中,在pywFM文件中找到__init__.py,将其中的代码复制,在需要使用到项目中新建一个例如:machine.py文件,将代码粘贴其中即可。使用的时候,在对应的py文件头加入:from machine import FM即可。
3.因为下载的pywFM源码包中有一个examples文件夹,其中的simple.py中包含一个简单的例子,可以来尝试运行。在运行之前,要将__init__.py文件中的235以及246行分别加入.decode(“utf-8”),否则会报错(如果是直接pip安装的pywFM,原始的__init__.py中是不需要加入的)。
4.在运行例子的时候,由于pywFM默认学习方法是"mcmc",运行会报错:EmptyDataError的错误,并且指出问题在于__init__.py中的274行:rlog = pd.read_csv(rlog_fd.name, sep=’\t’),如果要解决这个问题,目前我是将学习方法改为"sgd"或者"als"就不会报错。
最近的解决方法:因为mcmc是没有save_model的方法的,所以我们只需要将pywFM里的对应save_model注释掉就可以使用mcmc优化了,但是唯一缺点就是训练之后不能保存模型,不过无伤大雅
# needs further tests
subprocess.call(args, shell=False, stdout=stdout)
# reads output file
preds = [float(p) for p in out_fd.read().decode("utf-8").split('\n') if p] #注意此处的.decode("utf-8")需要自己添加
# "hidden" feature that allows users to save the model
# We use this to get the feature weights
# https://github.com/srendle/libfm/commit/19db0d1e36490290dadb530a56a5ae314b68da5d
import numpy as np
global_bias = None
weights = []
pairwise_interactions = []
# if 0 its global bias; if 1, weights; if 2, pairwise interactions
out_iter = 0
for line in model_fd.read().decode("utf-8").splitlines(): #注意此处的.decode("utf-8")需要自己添加
# checks which line is starting with #
if line.startswith('#'):
if "#global bias W0" in line:
out_iter = 0
elif "#unary interactions Wj" in line:
out_iter = 1
elif "#pairwise interactions Vj,f" in line: