見出し画像

Rustではじめる機械学習

はじめに


この記事ではRustを用いて機械学習を行います。Rustで機械学習を扱うためのライブラリとして有名どころはlinfaがありますが、この記事ではsmartcoreを用いて簡単な分類モデルを作ります。


また、Rustの環境ができている前提で進めますので事前にこちらの記事などを参考に環境構築してみてください。

SmartCoreとは

画像1

smartcoreとは、Rustの機械学習ライブラリです。
線形代数、数値計算、最適化のための一連のツールが提供されていて、主要な教師あり学習、教師なし学習アルゴリズムをサポートしています。

プロジェクトを作成する

まずはプロジェクトを作成します。
cargo new cargo new コマンドで作成が出来ます。

cargo new smartcore-sample

作成したプロジェクトに移動します。

cd smartcore-sample

Cargo.tomlを編集する


それではCargo.tomlにsmartcoreを記述していきましょう。
その前に、Cargoに関して触れておきます。
CargoはRustのビルドシステムかつパッケージマネージャです。rustの公式インストーラからインストールした場合、一緒にインストールされています。
そして、cargo newでプロジェクトを作成すると、Ccargo.tomlファイルやsrcフォルダが作成されます。
Cargo.tomlは構成ファイルでdependenciesセクションに使用したいパッケージを記載します。
中身は以下のようにします。

[package]
name = "smartcore-sample"
version = "0.1.0"
edition = "2018"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
smartcore = { version = "0.2.0", default-features = false, features=["nalgebra-bindings", "ndarray-bindings", "datasets"]}
rand = "0.3.0"

こちらを参考に作成致しました。

main.rsにプログラムを記述する

それでは、src配下のmain.rsに機械学習のプログラムを記述していきます。
今回は、Irisデータセットをロジスティック回帰にて分類し、正解率で性能評価するプログラムを作成します。

main.rs

use smartcore::dataset::iris;
use smartcore::linalg::naive::dense_matrix::DenseMatrix;
use smartcore::linear::logistic_regression::LogisticRegression;
use smartcore::model_selection::train_test_split;
use smartcore::metrics::accuracy;

fn main() {
    let iris_data = iris::load_dataset();
    let x = DenseMatrix::from_array(
        iris_data.num_samples,
        iris_data.num_features,
        &iris_data.data,
    );
    let y = iris_data.target;

    let (x_train, x_test, y_train, y_test) = train_test_split(&x, &y, 0.2, true);

    let model = LogisticRegression::fit(
        &x_train,
        &y_train,
        Default::default(),
    ).unwrap();

    let pred = model.predict(&x_test).unwrap();
    println!("{}", accuracy(&y_test, &pred));
}

実行

cargo runで実行します。cargo runコマンドでは、コードをコンパイルし、実行可能ファイルをこのコマンドで実行してくれます。

cargo run


出力結果

0.96666664
*実行結果は毎回異なります。

おわりに

smartcoreには教師あり学習アルゴリズムと教師なし学習アルゴリズムやといデータセットや性能評価指標に関する関数等が実装されているため、scikit-learnを使ったことがある方には馴染みやすいライブラリだと感じました。
今回はロジスティック回帰しか使っていませんが、KNN、ラッソ、リッジ、ナイーブベイズ、決定木、ランダムフォレスト など使えるので、小規模な機械学習データに対しては活用できそうだなと感じました。是非皆様もRustで機械学習試してみてください。

おすすめ書籍



この記事が気に入ったらサポートをしてみませんか?