当前位置: 首页 > 工具软件 > LibFM > 使用案例 >

libFM安装、使用以及pywFM使用问题

孙渝
2023-12-01

libFM安装

1.下载libFM源码包: 源包
2.解压压缩包libfm-1.42.src(为方便后续操作,将文件重命名为libfm)
3.在终端输入命令行:cd /Users/xxx/Desktop/libfm/,即到libfm放置的目录下,我是将源包放置在了桌面上。
4.在进入到指定目录之后,继续输入命令行:make all,即可安装成功。
(libFM具体使用指导手册:manual.pdf

pywFM安装及使用

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:
 类似资料: