5 个版本

0.0.5 2024 年 8 月 5 日
0.0.4 2024 年 8 月 4 日
0.0.3 2024 年 5 月 20 日
0.0.2 2024 年 3 月 5 日
0.0.1 2023 年 6 月 16 日

#50机器学习 类别中

Download history 16/week @ 2024-04-27 1/week @ 2024-05-04 7/week @ 2024-05-11 243/week @ 2024-05-18 34/week @ 2024-05-25 160/week @ 2024-06-01 111/week @ 2024-06-08 99/week @ 2024-06-15 20/week @ 2024-06-22 1/week @ 2024-06-29 7/week @ 2024-07-06 25/week @ 2024-07-27 222/week @ 2024-08-03 16/week @ 2024-08-10

每月263次下载
用于 3 个 crate(通过 jams-core

MIT 许可证

150KB
2.5K SLoC

LGBM-rs

Crates.io Docs.rs Actions Status

LightGBM 的非官方 Rust 绑定

要求

Windows 或 Linux

  1. 安装 LightGBM 并根据 LightGBM 文档 进行构建。
  2. 设置环境变量 LIGHTGBM_LIB_DIR 为包含构建输出目录(Windows 上的 .dll.lib,Linux 上的 .so)。

MacOS

  1. 运行 brew install lightgbm 并在您的系统上安装 LightGBM。
  2. 设置环境变量 LIGHTGBM_LIB_DIR 为包含 lib_lightgbm.dylib 的目录。
brew install lightgbm
export LIGHTGBM_LIB_DIR=/opt/homebrew/Cellar/lightgbm/4.5.0/lib/

示例

Cargo.toml

[dependencies]
lgbm = "0.0.5"

main.rs

use lgbm::{
    parameters::{Objective, Verbosity},
    Booster, Dataset, Field, MatBuf, Parameters, PredictType,
};
use std::sync::Arc;

fn main() -> anyhow::Result<()> {
    let mut p = Parameters::new();
    p.push("num_class", 3);
    p.push("objective", Objective::Multiclass);
    p.push("verbosity", Verbosity::Fatal);

    let mut train = Dataset::from_mat(&MatBuf::from_rows(train_features()), None, &p)?;
    train.set_field(Field::LABEL, &train_labels())?;

    let mut valid = Dataset::from_mat(&MatBuf::from_rows(valid_features()), Some(&train), &p)?;
    valid.set_field(Field::LABEL, &valid_labels())?;

    let mut b = Booster::new(Arc::new(train), &p)?;
    b.add_valid_data(Arc::new(valid))?;
    for _ in 0..100 {
        if b.update_one_iter()? {
            break;
        }
    }
    let p = Parameters::new();
    let rs = b.predict_for_mat(
        &MatBuf::from_rows(test_features()),
        PredictType::Normal,
        0,
        None,
        &p,
    )?;
    println!("\n{rs:.5}");
    Ok(())
}
fn train_features() -> Vec<[f64; 1]> {
    (0..128).map(|x| [(x % 3) as f64]).collect()
}
fn train_labels() -> Vec<f32> {
    (0..128).map(|x| (x % 3) as f32).collect()
}
fn valid_features() -> Vec<[f64; 1]> {
    (0..64).map(|x| [(x % 3) as f64]).collect()
}
fn valid_labels() -> Vec<f32> {
    (0..64).map(|x| (x % 3) as f32).collect()
}
fn test_features() -> Vec<[f64; 1]> {
    (0..4).map(|x| [(x % 3) as f64]).collect()
}

输出

num_data  : 4
num_class : 3
num_2     : 1

   |    0    |    1    |    2    |
---|---------|---------|---------|
 0 | 0.99998 | 0.00001 | 0.00001 |
 1 | 0.00001 | 0.99998 | 0.00001 |
 2 | 0.00001 | 0.00001 | 0.99998 |
 3 | 0.99998 | 0.00001 | 0.00001 |

静态链接或动态链接

支持以下类型的链接。

os static dynamic
Windows
Linux
MacOS

在 Windows 上,如果 lib_lightgbm.dll 存在于 LIGHTGBM_LIB_DIR 指定的目录中,它将被动态链接。否则,它将被静态链接。

在 Linux 上,如果 lib_lightgbm.a 存在于 LIGHTGBM_LIB_DIR 指定的目录中,它将被静态链接。否则,它将被动态链接。

许可证

本项目采用 MIT 许可证。有关详细信息,请参阅 LICENSE 文件。

贡献

除非您明确声明,否则您有意提交以包含在本作品中的任何贡献都将根据 MIT 许可证进行,不附加任何额外条款或条件。

依赖项

~4–6MB
~92K SLoC