xLearn机器学习库:安装与实践指南

在机器学习的领域里,不乏优秀的库和框架,如scikit-learn、TensorFlow和PyTorch等。然而,xLearn以其独特的优势,在处理特定类型的数据和问题时显得尤为出色。特别是对于那些需要处理大规模稀疏数据集的用户,如点击率预测(CTR)、推荐系统和反欺诈检测,xLearn提供了一个高效、易于使用的解决方案。

xlearn 是一个开源的机器学习库,专注于提供高效、灵活的算法来处理大规模稀疏数据。特别适用于点击率预测(CTR)、推荐系统、欺诈检测等场景。xlearn 的主要特点包括:

  • 算法支持:xlearn 支持多种流行的机器学习算法,包括线性模型(如线性回归、逻辑回归)、因子分解机(FM)、场感知因子分解机(FFM)等。
  • 稀疏数据优化:xlearn 专门为处理稀疏数据(如大量的零值特征)进行了优化,这在处理诸如用户-物品交互数据时非常有用。
  • 高性能:xlearn 使用了并行计算技术,包括多线程和GPU加速,可以快速处理大规模数据集。
  • 易于使用:xlearn 提供了简洁的Python API,使得模型的训练和预测变得非常简单。用户可以通过几行代码就完成模型的设置和训练。
  • 交叉验证:xlearn 支持交叉验证功能,帮助用户评估模型的泛化能力。
  • 模型保存与加载:训练好的模型可以保存到文件中,并在需要时重新加载,方便模型的部署和后续的预测。
  • 命令行工具:xlearn 还提供了一个命令行工具,使得用户可以在不写代码的情况下训练和预测模型。

安装

源码安装

git clone https://github.com/aksnzhy/xlearn.git

cd xlearn
mkdir build
cd build
cmake ../
make

如果编译成功,将在 build 文件夹下看到 xlearn_trainxlearn_predict 这两个可执行文件。可以通过如下命令检查 xLearn 是否安装成功:

./run_example.sh

常见问题:

  • 编译错误:确保您的系统上安装了CMake和GCC或Clang。
  • 缺少依赖:安装所需的依赖库,如OpenMP(用于多线程)。

pip安装

pip install xlearn

安装后,在Python中执行:

import xlearn as xl


xl.hello()
-------------------------------------------------------------------------
         _
        | |
   __  _| |     ___  __ _ _ __ _ __
   \ \/ / |    / _ \/ _` | '__| '_ \
    >  <| |___|  __/ (_| | |  | | | |
   /_/\_\_____/\___|\__,_|_|  |_| |_|

      xLearn   -- 0.44 Version --
-------------------------------------------------------------------------

API列表

命令行接口
  • 训练
xlearn_train <train_file_path> [OPTIONS]

参数选项:

参数描述示例
-s <type>机器学习模型类型(默认为 0)对于分类任务:
0 – 线性模型 (GLM)
1 – 因子分解机 (FM)
2 – 面向字段的因子分解机 (FFM)
对于回归任务:
3 – 线性模型 (GLM)
4 – 因子分解机 (FM)
5 – 面向字段的因子分解机 (FFM)
-x <metric>指标可以是 ‘acc’、‘prec’、‘recall’、‘f1’、‘auc’(用于分类),以及 ‘mae’、‘mape’、‘rmsd (rmse)’(用于回归)。默认情况下,xLearn 不会打印任何评估指标信息(只打印损失值)
-p <opt_method>选择优化方法包括 ‘sgd’、‘adagrad’ 和 ‘ftrl’。默认情况下,xLearn 使用 ‘adagrad’ 优化方法
-v <validate_file>验证数据的路径此选项默认为空,xLearn 将不执行验证过程
-m <model_file>模型转储文件的路径默认情况下,模型文件名为 ‘train_file’ + ‘.model’。如果将此值设置为 ‘none’,则 xLearn 将不会转储模型检查点
-pre <pre-model>预训练模型的路径可用于在线学习
-t <txt_model_file>TEXT 模型检查点文件的路径默认情况下不设置此选项,xLearn 将不会转储 TEXT 模型。
-l <log_file>日志文件的路径默认情况下,xLearn 使用 ‘/tmp/xlearn_log.*’
-k <number_of_K>FM 和 FFM 任务使用的潜在因子数量默认使用 4。当将 k 设置为 1 和 4 时,将获得相同的模型大小。这是因为使用 SSE 指令,内存需要对齐。因此,即使将 k 设置为 1,仍然会从 k = 2 到 4 填充一些虚拟的零
-r <learning_rate>优化方法的学习率默认为 0.2,xLearn 可以使用自适应梯度下降(AdaGrad)来解决优化问题,如果选择 AdaGrad 方法,学习率将自适应更改
-b <lambda_for_regu>L2 正则项的 Lambda默认为 0.00002,可以通过将此值设置为零来禁用正则项
-alphaftrl 使用的超参数
-beta :ftrl 使用的超参数
-lambda_1ftrl 使用的超参数
-lambda_2ftrl 使用的超参数
-u <model_scale>用于初始化模型参数的超参数默认为 0.66
-e <epoch_number>训练过程的 epoch 数默认为 10,xLearn 将默认执行提前停止,因此此值只是一个上限
-f <fold_number>用于交叉验证的折数如果设置了 --cv 选项就是该数,默认为5
-nthread <thread_number>用于多线程无锁学习(Hogwild!)的线程数
-block <block_size>用于磁盘上的训练的块大小
-sw <stop_window>用于提前停止的停止窗口的大小默认为 2
-seed <random_seed>用于洗牌数据集的随机种子
--disk开启用于大规模机器学习问题的磁盘上的训练
--cv在训练任务中开启交叉验证如果使用此选项,xLearn 将忽略验证文件(由 -t 选项设置)
--dis-lock-free禁用无锁训练无锁训练可以加速训练,但结果是不确定的,建议在训练数据较大且稀疏使用
  • 预测
xlearn_predict <test_file_path> <model_file_path> [OPTIONS]

参数选项:

参数描述示例
-o <output_file>输出文件的路径默认情况下,此值将设置为 ‘test_file’ + ‘.out’
-l <log_file_path>日志文件的路径默认情况下,xLearn 使用 ‘/tmp/xlearn_log’
-nthread <thread number>用于多线程无锁学习(Hogwild!)的线程数
-block <block_size>用于磁盘上的预测的块大小
--sign将输出结果转换为 0 和 1
--sigmoid将输出结果转换为 0 ~ 1(概率)
--disk磁盘上的预测
--no-norm禁用逐实例的规范化默认情况下,xLearn 在训练和预测过程中都会使用逐实例的规范化
Python接口
  • API列表
import xlearn as xl      # 导入 xLearn 包

# 这部分是关于数据的
# X 是特征数据,可以是 pandas DataFrame 或 numpy.ndarray,
# y 是标签,默认为 None,可以是 pandas DataFrame\Series、数组或列表,
# field_map 是特征的字段映射,默认为 None,可以是 pandas DataFrame\Series、数组或列表
dmatrix = xl.DMatrix(X, y, field_map)

model = create_linear()  # 创建线性模型。

model = create_fm()      # 创建因子分解机。

model = create_ffm()     # 创建基于字段的因子分解机。

model.show()             # 显示模型信息。

model.fit(param, "model_path")   # 训练模型。

model.cv(param)    # 执行交叉验证。

# 用户可以选择以下两者之一
model.predict("model_path", "output_path")  # 进行预测,将结果输出到文件,返回 None。
model.predict("model_path")                 # 进行预测,通过 numpy.ndarray 返回结果。

# 用户可以选择以下两者之一
model.setTrain("data_path")      # 为 xLearn 从文件中设置训练数据。
model.setTrain(dmatrix)          # 为 xLearn 从 DMatrix 设置训练数据。

# 用户可以选择以下两者之一
# 注意:此验证类型必须与训练一致
# 也就是说,如果从文件设置了训练,必须从文件设置验证
model.setValidate("data_path")   # 为 xLearn 从文件中设置验证数据。
model.setValidate(dmatrix)       # 为 xLearn 从 DMatrix 设置验证数据。

# 用户可以选择以下两者之一
model.setTest("data_path")       # 为 xLearn 从文件中设置测试数据。
model.setTest(dmatrix)           # 为 xLearn 从 DMatrix 设置测试数据。

model.setQuiet()    # 设置 xLearn 为静默训练模型。

model.setOnDisk()   # 设置 xLearn 使用磁盘上的训练。

model.setNoBin()    # 不为训练和测试数据生成二进制文件。

model.setSign()     # 将预测转换为 0 和 1。

model.setSigmoid()  # 将预测转换为 (0, 1)。

model.disableNorm()  # 禁用逐实例规范化。

model.disableLockFree()   # 禁用无锁训练。

model.disableEarlyStop()  # 禁用早停。
  • 超参数列表
参数名类型描述适用任务
task字符串模型任务类型,‘binary’ 表示二分类,‘reg’ 表示回归。所有
metric字符串评估指标,分类任务可选 ‘acc’、‘prec’、‘recall’、‘f1’、‘auc’,回归任务可选 ‘mae’、‘mape’、‘rmse’、‘rmsd’。所有
lr浮点数学习率。所有
lambda浮点数L2正则化系数。所有
k整数FM 和 FFM 的潜在因子个数。FM、FFM
init浮点数模型初始化参数。所有
alpha浮点数FTRL 优化的超参数。FTRL
beta浮点数FTRL 优化的超参数。FTRL
lambda_1浮点数FTRL 优化的超参数。FTRL
lambda_2浮点数FTRL 优化的超参数。FTRL
nthread整数CPU 核心数,用于多线程计算。所有
epoch整数训练轮数。所有
fold整数交叉验证的折数。交叉验证
opt字符串优化方法,可选 ‘sgd’、‘adagrad’、‘ftrl’。所有
stop_window整数早停的窗口大小。所有
block_size整数磁盘训练的块大小。磁盘训练

实践样例

Criteo 在线广告预估

Kaggle 预测广告是否会被用户点击

在这个样例中,将使用xLearn来解决一个经典的机器学习问题:在线广告预估。给定一个用户和正在访问的页面,点击给定广告的概率是多少?我们将使用Criteo提供的数据集来训练和测试我们的模型。
python

样例数据在: https://github.com/aksnzhy/xlearn/demo/classification/criteo_ctr/,代码如下:

import xlearn as xl

# 训练任务
ffm_model = xl.create_ffm()  # 使用场感因式分解机
ffm_model.setTrain("./small_train.txt")  # 训练数据
ffm_model.setValidate("./small_test.txt")  # 验证数据

# 参数:
#  0. 二元分类
#  1. 学习率:0.2
#  2. 正则化 lambda:0.002
#  3. 评估指标:准确率
param = {'task': 'binary', 'lr': 0.2, 'lambda': 0.002, 'metric': 'acc'}

# 开始训练
# 训练得到的模型将保存在 model.out 文件中
ffm_model.fit(param, './model.out')

# 预测任务
ffm_model.setTest("./small_test.txt")  # 测试数据
ffm_model.setSigmoid()  # 将输出转换为 0-1

# 开始预测
# 输出结果将保存在 output.txt 文件中
ffm_model.predict("./model.out", "./output.txt")
蘑菇分类

数据集来自 UCI Machine Learning Repositpry

蘑菇分类是一个经典的二分类问题,从UCI机器学习数据集中获取数据。在这个问题中,将使用线性模型来预测蘑菇是否可食用。

样例数据在: https://github.com/aksnzhy/xlearn/demo/classification/mushroom/.

代码如下:

# 导入 xlearn 库
import xlearn as xl

# 训练任务
linear_model = xl.create_linear()  # 使用线性模型
linear_model.setTrain("./agaricus_train.txt")  # 训练数据
linear_model.setValidate("./agaricus_test.txt")  # 验证数据

# 参数:
#  0. 二分类任务
#  1. 学习率: 0.2
#  2. 正则化 lambda: 0.002
#  3. 评估指标: 准确度
#  4. 使用 sgd 优化方法
param = {'task': 'binary', 'lr': 0.2,
         'lambda': 0.002, 'metric': 'acc',
         'opt': 'sgd'}

# 开始训练
# 训练好的模型将保存在 model.out 文件中
linear_model.fit(param, './model.out')

# 预测任务
linear_model.setTest("./agaricus_test.txt")  # 测试数据
linear_model.setSigmoid()  # 将输出转换为 0-1

# 开始预测
# 预测结果将保存在 output.txt 文件中
linear_model.predict("./model.out", "./output.txt")
泰塔尼克生还预测

在这个挑战中,将使用xLearn来解决泰塔尼克生还预测问题。将使用Kaggle提供的数据集来训练和测试模型。(Kaggle链接

样例数据在: https://github.com/aksnzhy/xlearn/demo/classification/titanic/.

代码如下:

import xlearn as xl

# 训练任务
fm_model = xl.create_fm()  # 使用因子分解机
fm_model.setTrain("./titanic_train.txt")  # 训练数据

# 参数:
#  0. 二分类任务
#  1. 学习率: 0.2
#  2. Lambda: 0.002
#  3. 评估指标: 准确率
param = {'task':'binary', 'lr':0.2, 'lambda':0.002, 'metric':'acc'}

# 使用交叉验证
fm_model.cv(param)
房价预测

在这个挑战中,将使用xLearn来解决房价预测回归问题。将使用Kaggle提供的数据集来训练和测试模型。数据来自 Kaggle

样例数据在: https://github.com/aksnzhy/xlearn/demo/regression/house_price/.

代码如下:

import xlearn as xl

# 训练任务
ffm_model = xl.create_fm()  # 使用因子分解机
ffm_model.setTrain("./house_price_train.txt")  # 训练数据

# 参数:
#  0. 二元任务
#  1. 学习率: 0.2
#  2. 正则项 lambda: 0.002
#  4. 评价指标: rmse
param = {'task':'reg', 'lr':0.2, 'lambda':0.002, 'metric':'rmse'}

# 使用交叉验证
ffm_model.cv(param)

更新信息

自xLearn停止更新以来,可以看到市面上有许多新的机器学习库和框架的出现,它们提供了更多的功能和更好的性能。然而,尽管xLearn不再得到官方的支持,它在处理大规模稀疏数据方面仍然有其独特的价值和优势。

替代方案

  • scikit-learn:这是一个广泛使用的机器学习库,提供了大量的算法和工具,适用于各种机器学习任务
  • TensorFlow:这是一个由Google开发的深度学习框架,适用于复杂的神经网络模型
  • PyTorch:另一个流行的深度学习框架,以其动态计算图和易用性而闻名
  • LightGBM:这是一个由微软开发的高效的梯度增强框架,特别适合于分类和回归任务

xLearn的价值

尽管有新的工具出现,xLearn仍然在某些特定场景中具有价值,特别是在以下方面:

  • 处理稀疏数据:xLearn专门为处理稀疏数据(如大量的零值特征)进行了优化,这在处理诸如用户-物品交互数据时非常有用
  • 高效性:xLearn使用了并行计算技术,包括多线程和GPU加速,可以快速处理大规模数据集
  • 易于使用:xLearn提供了简洁的Python API,使得模型的训练和预测变得非常简单

尽管xLearn不再得到官方的支持,但它在处理大规模稀疏数据方面仍然有其独特的价值和优势。对于那些已经在使用xLearn或者想要探索其功能的用户来说,继续使用它仍然是一个可行的选择。同时,也可以考虑探索其他库,以利用它们提供的最新功能和性能改进。

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

uncle_ll

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值