Rust 초보자는 Mac에 환경을 구축하고 크레인 모듈을 사용하여 간단한 기계 학습을 한다

23413 단어 RustmacOStech

맥의 전제였지만 러스트를 도입해 추가 크레인 모듈을 시도하고 간단한 머신러닝을 실시했기 때문에 정리했다.
더 좋은 방법이 있을 것 같아서 차례대로 업데이트하고 싶어요.
코드는 여기.

환경 구조


터미널에서 다음 명령을 실행하여 Rust를 설치합니다.
curl https://sh.rustup.rs -sSf | sh
https://doc.rust-jp.rs/book-ja/ch01-01-installation.html
권한이 통과되지 않을 때 다음 명령을 실행하십시오.
curl https://sh.rustup.rs -sSf | sh -s -- --no-modify-path
https://qiita.com/Kazuki-Komori/items/0497799295ec044494c6
다음 명령을 실행하여 경로를 통과합니다.
source $HOME/.cargo/env
카고 버전을 확인하고 Rust가 설치되었는지 확인합니다.
cargo --version
버전만 출력하면 OK.
cargo 1.58.0  

프로젝트 작성


다음 명령을 실행하여 카고에 항목을 만듭니다.
cargo new ml_sample
다음 파일을 만듭니다.
|--ml_sample
    |-- src
    |    |-- main.rs
    |
    |-- Cargo.toml
    |-- .gitignore
만든 프로젝트 폴더로 이동합니다.
cd ml_sample 

외부 크레인 추가


crate.IO에서 기중기의 이름과 버전을 확인하세요. 카고.나는 Toml 파일에 보충할 것이다.
실제 사용한 후 기계 학습에 사용할 수 있는 스마트 코어를 넣어 보세요.
https://crates.io/crates/smartcore
Cargo.toml
[package]
name = "ml_sample"
version = "0.1.0"
edition = "2021"

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

[dependencies]
# ここにインストールする crate を書いていく
smartcore  = "0.2.0"

자체 제작 모듈


다음은 자신의 모듈을 추가하기 위해 새로운 프로젝트 Hello를 제작합니다.
cargo new hello
문서의 구성은 다음과 같다.
|--ml_sample
    |-- src
    |    |-- main.rs
    |
    |-- Cargo.toml
    |-- .gitignore
    |-- hello
         |-- src
         |    |-- main.rs
         |
         |-- Cargo.toml
hello/src 폴더 바로 아래의lib.rs를 만듭니다.
https://dackdive.hateblo.jp/entry/2020/12/09/103000
|--ml_sample
    |-- src
    |    |-- main.rs
    |
    |-- Cargo.toml
    |-- .gitignore
    |-- hello
         |-- src
         |    |-- main.rs
         |    |-- lib.rs
         |
         |-- Cargo.toml
lib.rs에 다음 코드를 기록합니다. 파라미터만 읽고 Hello, World의 간단한 모듈을 만듭니다.
hello/src/lib.rs
pub fn hello_world(word: &str) -> String {
  let greeding :String = "Hello, ".to_owned() + word + "!";
  return greeding
}
나는 아직mod를 어떻게 사용하는지 모른다.
https://dackdive.hateblo.jp/entry/2020/12/09/103000
Rust도 리턴을 명확하게 표시하지 않을 때가 있지만, 이 방면의 처리는 좀 더 배워야 한다.
https://doc.rust-jp.rs/rust-by-example-ja/fn.html
위쪽은 외부 크레인 모듈을 사용하지 않기 때문에 hello/Cargo를 부탁합니다.toml 파일을 업데이트하지 않습니다.
최초의 카고.toml 파일에 자체 제작 모듈의 정보를 추가합니다.
[dependencies.hello]
path = "./hello"
전체 기록은 다음과 같다.
Cargo.toml
[package]
name = "ml_sample"
version = "0.1.0"
edition = "2021"

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

[dependencies]
smartcore  = "0.2.0"

# 以下を追加
[dependencies.hello]
path = "./hello"
아래도 될 것 같은데.
[dependencies]
smartcore  = "0.2.0"
hello = {path = "./hello"} # 追加

파일 실행


main.업데이트
src/main.rs
extern crate hello;

fn main() {
  let word:&str = "World";
  println!("{:?}", hello::hello_world(word));
}
터미널에 다음 명령을 입력하고 구축합니다.
cargo build
터미널에서 다음 명령을 입력하여 구축된 실행 파일을 실행합니다.
target/debug/ml_sample
다음 내용을 출력하면 성공합니다.
Hello, World!

기계 학습


기계 학습 부분에서 아래 사이트의 코드를 약간 바꾸었다.
  • 데이터세트를 보스턴 주택가격(회귀)으로 설정했다.
  • train_test_spilit의 카드 세탁을 하지 않아 재현성을 보증합니다.
  • https://zenn.dev/mattn/articles/3290149a6fc18c
    src/main.rs
    // 機械学習用のクレート
    use smartcore::dataset::boston;
    use smartcore::linalg::naive::dense_matrix::DenseMatrix;
    use smartcore::model_selection::train_test_split;
    use smartcore::linear::linear_regression::{LinearRegression, LinearRegressionParameters, LinearRegressionSolverName};
    use smartcore::metrics::mean_squared_error;
    
    fn main() {
      // データセットのダウンロード
      let boston_data = boston::load_dataset();
    
      // 特徴量を arrayデータへ変換
      let x = DenseMatrix::from_array(
        boston_data.num_samples,
        boston_data.num_features,
        &boston_data.data,
      );
    
      // 目的変数
      let y = boston_data.target;
    
      // 評価データと訓練データに分割
      let (x_train, x_test, y_train, y_test) = train_test_split(
                                                        &x,    // training data
                                                        &y,    // target
                                                        0.2,   // test_size
                                                        false, // shuffle
                                                      );
      // 学習
      let model = LinearRegression::fit(
                                &x_train, 
                                &y_train,
                                LinearRegressionParameters::default().
                                  with_solver(LinearRegressionSolverName::QR)
                                ).unwrap();
    
      // 推論
      let y_pred = model.predict(&x_test).unwrap();
    
      // 評価
      let metrics = mean_squared_error(&y_test, &y_pred);
    
      // 評価結果を出力
      println!("mse:{}", metrics);
    }
    
    출력:
    mse:12.573088
    다음은 csv에서 표 데이터를 읽고 기계 학습을 시작하려고 합니다.
    이상은 끝까지 읽어주셔서 감사합니다.

    사이트 축소판 그림


    https://doc.rust-jp.rs/book-ja/ch01-03-hello-cargo.html
    https://qiita.com/AyachiGin/items/6d098d512e6766181a01
    https://zenn.dev/mattn/articles/3290149a6fc18c

    좋은 웹페이지 즐겨찾기