Scikit-learn包装器,用于正则化贪婪森林
项目描述
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=$HOME,temp_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.exe 和 forest_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_python 的 docker 镜像。
# 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以确认已成功安装包。
然后请随意创建新问题。
已知问题
常见问题解答(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 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 256885634e94412820c1d95ee8f765207d663d5b64c4bb4cf62d361698a32acc |
|
MD5 | d920377f3671f318e408665673f7133f |
|
BLAKE2b-256 | 8e76f54da5d5adb09db12ea4dbf28ee038f7b6978ac04d006f8e0561974abf05 |
rgf_python-3.12.0-py3-none-win_amd64.whl 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 4ede4a61f0a478bbc8f3c326a31a099cc654702ede7e3f2099329b1cdca9ee17 |
|
MD5 | eab066c41051db9e728599a57edf9da5 |
|
BLAKE2b-256 | 1b0b41ab9b6be4c04cf95d17e4688bb7308bbe1c00d786647ce21b2d3934a3cb |
哈希值 用于 rgf_python-3.12.0-py3-none-manylinux1_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7b6d0a1f9e9463b056d234e3a181178f3f19d721dc2d1cc180c600f1a9f7a83e |
|
MD5 | d88be58140c65875f9621aaf5ed10e52 |
|
BLAKE2b-256 | ad144c5c69054ef1fc2a76b2824a8fc272541ccd17cef417d077e74fe6725dfb |
哈希值 用于 rgf_python-3.12.0-py3-none-macosx_10_15_x86_64.macosx_11_6_x86_64.macosx_12_0_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 112838cc99cd312253cdd33c2ad42332dc5c697a9a2117e9694da9f44fba3249 |
|
MD5 | 7a6869b619e35c1b9550178799ad1625 |
|
BLAKE2b-256 | ce7ec43ac7b0ae984ab859837c26e8bee7729e855389974b2a1166304427ebd7 |