Rustではじめる機械学習
はじめに
この記事ではRustを用いて機械学習を行います。Rustで機械学習を扱うためのライブラリとして有名どころはlinfaがありますが、この記事ではsmartcoreを用いて簡単な分類モデルを作ります。
また、Rustの環境ができている前提で進めますので事前にこちらの記事などを参考に環境構築してみてください。
SmartCoreとは
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で機械学習試してみてください。
おすすめ書籍
この記事が気に入ったらサポートをしてみませんか?