跳转到主要内容

Scikit-learn包装器,用于正则化贪婪森林

项目描述

License Python Versions PyPI Version Downloads

rgf_python

机器学习算法 正则化贪婪森林 (RGF) 的包装器 [1] 用于Python。

功能

Scikit-learn接口和多类别分类问题使用的可能性。

rgf_python 包含了来自论文 [1] 的原始 RGF 和 FastRGF 实现。

注意,FastRGF 是为使用大型(和稀疏)数据集而开发的,因此在小数据集上通常比原始 RGF 表现较差。

原始 RGF 实现仅适用于回归和二元分类,但 rgf_python 还可以通过“一对多”方法用于 多类别分类

示例

from sklearn import datasets
from sklearn.utils.validation import check_random_state
from sklearn.model_selection import StratifiedKFold, cross_val_score
from rgf.sklearn import RGFClassifier

iris = datasets.load_iris()
rng = check_random_state(0)
perm = rng.permutation(iris.target.size)
iris.data = iris.data[perm]
iris.target = iris.target[perm]

rgf = RGFClassifier(max_leaf=400,
                    algorithm="RGF_Sib",
                    test_interval=100,
                    verbose=True)

n_folds = 3

rgf_scores = cross_val_score(rgf,
                             iris.data,
                             iris.target,
                             cv=StratifiedKFold(n_folds))

rgf_score = sum(rgf_scores)/n_folds
print('RGF Classifier score: {0:.5f}'.format(rgf_score))

更多关于使用 RGF 估计器的示例可以在这里找到。

使用 FastRGF 估计器的示例可以在这里找到。

软件需求

  • Python (>= 3.7)

  • joblib

  • scikit-learn (>= 0.18)

安装

使用 PyPI 通过 pip 安装

pip install rgf_python

或从 GitHub

git clone https://github.com/RGF-team/rgf.git
cd rgf/python-package
python setup.py install

MacOS 用户,版本 3.10.0 及以后的 rgf_python 使用 g++-11 构建,无法在 g++-10 及更早的系统上运行。如果您不想从源代码构建或从 PyPI 安装 3.10.0 版本的 rgf_python(这是最后一个使用 g++-10 构建的版本),则应更新您的 g++ 编译器。

MacOS 用户,版本 3.8.0 及以后的 rgf_python 使用 g++-10 构建,无法在 g++-9 及更早的系统上运行。如果您不想从源代码构建或从 PyPI 安装 3.8.0 版本的 rgf_python(这是最后一个使用 g++-9 构建的版本),则应更新您的 g++ 编译器。

MacOS 用户,版本 3.5.0 及以后的 rgf_python 使用 g++-9 构建,无法在 g++-8 及更早的系统上运行。如果您不想从源代码构建或从 PyPI 安装 3.5.0 版本的 rgf_python(这是最后一个使用 g++-8 构建的版本),则应更新您的 g++ 编译器。

MacOS 用户,版本 3.1.0 及以后的 rgf_python 使用 g++-8 构建,无法在 g++-7 及更早的系统上运行。如果您不想从源代码构建或从 PyPI 安装 3.1.0 版本的 rgf_python(这是最后一个使用 g++-7 构建的版本),则应更新您的 g++ 编译器。

如果在上述方法安装时遇到任何问题,您应该从二进制文件中自行构建 RGF 和 FastRGF 可执行文件,并将编译的可执行文件放入包含在环境变量 ‘PATH’ 中的目录或安装包的目录中。或者,您可以通过配置文件 .rgfrc 中的相应标志指定可执行文件的实际位置和放置临时文件的目录,您应该将其创建在您的家目录中。默认值如下: rgf_location=$HOME/rgf (Windows 的 $HOME/rgf.exe),fastrgf_location=$HOMEtemp_location=tempfile.gettempdir() (有关 tempfile.gettempdir() 的更多详细信息)。请查看 .rgfrc 文件的示例。

rgf_location=C:/Program Files/RGF/bin/rgf.exe
fastrgf_location=C:/Program Files/FastRGF/bin
temp_location=C:/Program Files/RGF/temp

请注意,尽管 rgf_location 应指向一个具体的 RGF 可执行 文件,但 fastrgf_location 应指向一个包含 forest_train.exeforest_predict.exe FastRGF 可执行文件的 文件夹

您还可以直接指定不进行自动编译的安装

pip install rgf_python --install-option=--nocompilation

git clone https://github.com/RGF-team/rgf.git
cd rgf/python-package
python setup.py install --nocompilation

可能需要 sudo(或在 Windows 中的管理员权限)来执行安装命令。

有关如何从源文件构建 RGF 和 FastRGF 可执行文件的详细指南可以在它们的文件夹这里这里找到。

Docker 镜像

我们提供了包含已安装 rgf_pythondocker 镜像

# Run docker image
docker run -it rgfteam/rgf /bin/bash
# Run RGF example
python ./rgf/python-package/examples/RGF/comparison_RGF_and_RF_regressors_on_boston_dataset.py
# Run FastRGF example
python ./rgf/python-package/examples/FastRGF/FastRGF_classifier_on_iris_dataset.py

调整超参数

RGF

您可以根据以下步骤调整超参数。

  • max_leaf:合适的值依赖于数据,通常在1000到10000之间变化。

  • test_interval:为了效率,它必须是100的倍数或因数(默认优化区间的值)。

  • algorithm:可以选择“RGF”,“RGF Opt”或“RGF Sib”。

  • loss:可以选择“LS”,“Log”,“Expo”或“Abs”。

  • reg_depth:必须不小于1。当algorithm = “RGF Opt”或“RGF Sib”时使用。

  • l2:通常1,0.1或0.01会产生良好的结果,但在指数损失(loss = “Expo”)和对数损失(loss = “Log”)中,一些数据需要更小的值,如1e-10或1e-20。

  • sl2:默认值等于l2。在一些数据中,l2/100效果很好。

  • normalize:如果开启,则训练目标将被归一化,使平均值变为零。

  • min_samples_leaf:较小的值可能会减慢训练速度。过大的值可能会降低模型精度。

  • n_iter:坐标下降优化权重的迭代次数。

  • n_tree_search:要搜索分割节点的树的数目。首先搜索最近生成的树。

  • opt_interval:以叶子节点数量为单位的权重优化间隔。

  • learning_rate:在坐标下降中用于优化权重的牛顿更新的步长。

超参数调整的详细说明请见此处

FastRGF

  • n_estimators:典型范围是[100, 10000],典型值是1000。

  • max_depth:控制树深度。

  • max_leaf:控制树大小。

  • tree_gain_ratio:控制何时开始新树。

  • min_samples_leaf:控制树的生长过程。

  • loss:可以选择“LS”,“MODLS”或“LOGISTIC”。

  • l1:典型范围是[0, 1000],大值会导致稀疏性。

  • l2:使用较大的值,如1000或10000。值越大,所需的n_estimators越多:训练时间越长,得到的精度通常越好。

  • opt_algorithm:可以选择“rgf”或“epsilon-greedy”。

  • learning_rate:epsilon-greedy提升的步长。当opt_algorithm = “epsilon-greedy”时使用。

  • max_bin:密集数据的典型范围是[10, 65000],稀疏数据的典型范围是[10, 250]。

  • min_child_weight:控制离散化(创建分箱)的过程。

  • data_l2:控制离散化(创建分箱)的L2正则化程度。

  • sparse_max_features:典型范围是[1000, 10000000]。用于稀疏数据。

  • sparse_min_occurences:控制要选择哪个特征。用于稀疏数据。

在Kaggle核上使用

Kaggle核支持rgf_python。请参阅此页面

故障排除

如果遇到任何错误,请尝试运行test_rgf_python.py以确认已成功安装包。

然后请随意创建新问题

已知问题

  • 如果训练数据集太小(#data < 28),FastRGF会崩溃。(rgf#92

  • FastRGFClassifierFastRGFRegressor没有提供内置方法来计算特征重要性。(rgf#109

常见问题解答(FAQ)

  • 问题:临时文件在我的硬盘上占用太多空间(在拟合rgf_python模型时,Kaggle核的磁盘空间耗尽)。

    答案:请参阅rgf#75

  • 问题:GridSearchCV/RandomizedSearchCV/RFECV或其他带有n_jobs参数的scikit-learn工具在运行rgf_python估计器时挂起/冻结/崩溃。

    A: 这是在 Python 中多进程的一个已知通用问题。您应该设置估计器或 scikit-learn 工具的 n_jobs=1 参数。

许可

rgf_python 采用 MIT 许可证。请阅读文件 LICENSE 以获取更多信息。

非常感谢 Rie Johnson 和 Tong Zhang(RGF 的作者)。

其他

毫不掩饰,实现的一部分基于以下 代码。谢谢!

参考文献

[1] Rie Johnson 和 Tong Zhang. 使用正则化贪婪森林学习非线性函数。 IEEE 信号处理与机器智能杂志,36(5):942-954,2014 年 5 月

项目详情


下载文件

下载适合您平台的应用程序。如果您不确定要选择哪一个,请了解更多关于 安装包 的信息。

源分发

rgf_python-3.12.0.tar.gz (220.1 kB 查看哈希)

上传

构建分发

rgf_python-3.12.0-py3-none-win_amd64.whl (1.8 MB 查看哈希)

上传 Python 3 Windows x86-64

rgf_python-3.12.0-py3-none-manylinux1_x86_64.whl (757.8 kB 查看哈希)

上传 Python 3

rgf_python-3.12.0-py3-none-macosx_10_15_x86_64.macosx_11_6_x86_64.macosx_12_0_x86_64.whl (743.6 kB 查看哈希)

上传 Python 3 macOS 10.15+ x86-64 macOS 11.6+ x86-64 macOS 12.0+ x86-64

由以下支持