#机器学习 #绑定 #catboost #yandex #梯度 #提升

catboost-rs

猫boost的非官方Rust绑定(来自Yandex的机器学习梯度提升库)

8 个版本

0.1.8 2022年10月21日
0.1.7 2022年10月18日
0.1.2 2022年9月9日

机器学习 分类中排名 314

Download history 8/week @ 2024-04-03 55/week @ 2024-05-29 139/week @ 2024-06-05 73/week @ 2024-06-12 12/week @ 2024-06-19 13/week @ 2024-06-26 38/week @ 2024-07-03 34/week @ 2024-07-10 32/week @ 2024-07-17

每月下载 118
3 个crate中使用(通过 jams-core

MIT/Apache

70KB
876

CatBoost Rust 包

Cargo 包

Cargo包可以在这里找到

历史背景

  • 这最初是尝试将catboost绑定发布到cargo
  • 最终决定非官方地拆分代码并维护独立的Rust绑定,类似于 onnxruntime-rs
  • 请注意,这是自愿维护的,尚未得到官方catboost团队的认可

与官方 Rust 包 的不同之处

  • 进行了必要的更改,以发布crate而不是引用git仓库,这相当大
  • 官方的 catboost-sys 尝试重新构建共享库,而此版本则从GitHub发行版页面下载。
  • build.rs 脚本假定已经单独下载了 libcatboost 共享库。
  • 还标记了模型为 Send,使其可以在多个线程中跨线程使用,因为文档表明它是线程安全的。请注意,这尚未经过广泛的测试。
  • 到目前为止,catboost版本是硬编码的,当前版本为1.0.6。

如果您需要bindgen的依赖项

apt-get install -y curl build-essential pkg-config libssl-dev libclang-dev clang cmake

安装libcatboost

  • https://github.com/catboost/catboost/releases/tag/v1.0.6下载catboost二进制文件。
    • 如果您使用Linux,请下载 libcatboostmodel.so
    • 如果您使用MacOS,请下载 libcatboostmodel.dylib
    • 将文件放置在/usr/lib/
    • 创建指向 x.x.1 的软链接,例如:sudo ln -s libcatboostmodel.so libcatboostmodel.so.1

基本使用示例

  1. 在您的 Cargo.toml 中添加依赖项
[dependencies]
catboost-rs = "0.1.6"
  1. 要使用 catboost,它假定共享库可用。您需要从官方 发布页面 下载共享库。如果您使用的是 Linux,请下载 libcatboostmodel.so。如果您使用的是 Mac,请下载 libcatboostmodel.dylib。目前,仅支持 1.0.6 版本。
  2. 将这些库移动到 /usr/lib
  3. 现在您可以在代码中应用预训练模型
// Bring catboost module into the scope
use catboost_rs as catboost;

fn main() {
    // Load the trained model
    let model = catboost::Model::load("tmp/model.bin").unwrap();

    println!("Number of cat features {}", model.get_cat_features_count());
    println!("Number of float features {}", model.get_float_features_count());

    // Apply the model
    let prediction = model
        .calc_model_prediction(
            vec![
                vec![-10.0, 5.0, 753.0],
                vec![30.0, 1.0, 760.0],
                vec![40.0, 0.1, 705.0],
            ],
            vec![
                vec![String::from("north")],
                vec![String::from("south")],
                vec![String::from("south")],
            ],
        )
        .unwrap();
    println!("Prediction {:?}", prediction);
}

文档

catboost/rust-package 目录中运行 cargo doc --open

测试

catboost/rust-package 目录中运行 cargo test

依赖项

~0–2MB
~40K SLoC