FFM/libffm在Windows上的使用

FFM 的作者Yu-Chin Juan在GitHub上开源了C++版本的代码libffm,由于日常的数据处理都是Python环境,所以期望能找到Python版本的FFM。相关的项目Github上有很多,比如这个:A Python wrapper for LibFFM。该项目在Windows的安装方式为:

  • 将项目下载到本地,并解压。
  • 安装mingw32环境。conda install mingw32
  • 在环境变量PATH中添加mingw32路径:C:\RBuildTools\3.5\mingw_32\bin
  • 修改Python中的编译设置,D:\ProgramData\Anaconda3\Lib\distutils\ cfg如果没有此文件则自己创建,添加内容为:

  • 在项目目录中执行:python setup.py install

但在使用的时候,会报如下错误。主要原因是在Windows上进行安装的时候并没有编译生成libffm.so文件,其他类似的项目均如此。

Libffm在Windows上的编译

由于使用Python包时遇到问题,所以想着直接使用C++版本的代码进行编译。看了下项目介绍,只有v1.21版本的libffm才支持Windows环境:

我按照上面的流程进行安装,遇到的第一个报错:无法找到“nmake”

我能想到大初步解决方案为将“nmake”所在目录添加到环境变量PATH中。然而,执行后还是会报错,这次报错的主要把内容是无法加载到引用的文件:

网上搜索了下,发现VC++设置环境变量的水还是比较深的,需要添加PATH、LIB和INCLUDE这三个环境变量。主要的原因是VS2015里面加入了ucrt这个东西,所以需要额外引入Windows 10的SDK,还有uuid.lib得在Windows 8.x的SDK里找到,所以配置起来还是蛮麻烦的。

  • PATH  C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin;C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE
  • LIB  C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\lib;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10240.0\ucrt\x86;C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x86
  • INCLUDE  C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include;C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt

具体路径按照自己安装的位置进行相应的调整。完成后再次执行即可成功编译。如下,只出现了一些警告信息:

编译完成后会在源文件文件夹下新建一个windows的文件夹,并生成2个exe文件:

  • ffm-predict.exe
  • ffm-train.exe

ffm-train.exe与ffm-predict.exe的使用

比较简单的方法时在命令行直接调用,使用方法如项目文档中所述:

另外也可通过Python调用命令行的方式来使用:

示例代码所用到的训练文件地址为:https://github.com/keyunluo/python-ffm/tree/master/example/libffm-format

如上调用非常的麻烦,我另外找到了一个开源的项目对其进行了进一步封装:https://github.com/gatapia/py_ml_utils,封装的代码为:

总之,整体上在Windows环境下使用libffm非常的困难,不管是编译还是调用,如果环境许可,建议还是在Linux环境下使用。

微信支付标点符 wechat qrcode
支付宝标点符 alipay qrcode

使用Python检测符号及乱码字符

最近在进行关键词的分析,中间涉及到对一些特殊的字符进行过滤的需求。包括带符号的(有部分还是SQL注入),并且存

PHP版本升级记录(7.0到7.4)

服务器上原先安装的版本为PHP 7.0.33, WordPress后台建议安装的最小版本为7.3,所以打算直接

WordPress LaTeX插件更换记录

由于自己的博客要插入很多的公式,所以需要依赖LaTeX插件来帮忙实现。先前一直使用的是WP QuickLaTe

发表评论

电子邮件地址不会被公开。 必填项已用*标注