یادگیری ماشین با Rust!

امیدوارم که حالتون خوب باشه. البته میدونم خوب بودن یا حتی معمولی بودن توی این شرایط چقدر کار سخت و دشواریه. این خوب نبودن دلیل بر یاد نگرفتن و تجربه چیزای جدید نمیشه برای همین توی این پست قصد دارم درباره یادگیری ماشین با زبان جذاب Rust براتون بگم. توی پست قبلی درباره اینکه چطوری می‌تونید این زبان رو یاد بگیرید و تمرین کنید گفتم. برای شروع یه کمی از یادگیری ماشین و Rust میگم و بعد Linfa رو معرفی می‌کنم و در آخر با هم یه مثال رو انجام دادم رو بررسی می‌کنیم. این پست رو برای افرادی که به Rust آشنا هستند و همزمان میخوان یادگیری ماشین رو شروع به یادگیری کنند توصیه میکنم. همچنین کسایی که آشنا به یادگیری ماشین هستند و میخوان بدونند زبان‌های دیگه چه ابزاری برای این کار دارند این پست برای اونا هم هست.یادگیری ماشین و Rustیادگیری ماشین یکی از رشته‌های پرطرفدار و پرکاربرد در کامپیوتر به حساب میاد و به شخصه برام بی‌نهایت جذاب و دوست داشتنیه. فرق یک برنامه یادگیری ماشین با برنامه‌های دیگه اینه که ما در برنامه‌های دیگه ما قاعده و قوانین یا همون تابع رو مینویسم و ورودی را به برنامه می‌دهیم و خروجی میگیریم. اما در یادگیری ماشین ما ورودی و خروجی را میدهیم و تابع احتمالی را میگیریم.زبان پایتون و R و حتی julia برای یادگیری ماشین کلی ابزار و پکیج فوق‌العاده و قدرتمند داره که کار رو واقعا ساده میکنه. یکی از اون پکیج‌ها کتابخانه scikit-learn پایتون هست که شامل ابزارهایی برای کار کردن با دیتا و الگوریتم‌های یادگیری ماشین هست. اما خب هیچ یک از این زبان‌ها کامل نیستند و هر کدام مزایا و معایبی دارند. برای مثال زبان پایتون با تمام پکیج‌های فوق‌العاده و قدرتمندش یک عیب بزرگ داره اونم اینه که بهینه نیست. Rust یک زبان برنامه نویسی قدرتمند و کارآمد است. درسته که Rust یک اکوسیستم بالغ نداره، اما ماهیت این زبان برنامه نویسی آن را برای برنامه هایی که نیاز به سرعت و کارایی دارند عالی می کنه.معرفی Linfa زبان Rust روز به روز در حال پیشرفت و گسترش هست در هر زمینه جای خودشو پیدا میکنه. یکی از این زمینه‌ها که توسعه دهندگان خوشبین هستند که Rust در اون پیشرفت کنه یادگیری ماشین هست. Linfa یک پکیج برای یادگیری ماشین با زبان Rust هست که شامل الگوریتم‌های طبقه بندی، رگرسیون و خوشه‌بندی هست که کار رو برای برنامه نویسان ساده کرده. Linfa مشابه scikit-learn در پایتون هست و سعی در ساده کردن استفاده از الگوریتم‌های یادگیری ماشین داره. می‌تونید مستندات این کتابخانه در این لینک بخونید.بررسی یک مثال برای دید بهتر من یک مثال هم انجام دادم که الان صرفا به بخش یادگیری ماشین این مثال می‌پردازم و برای دیدن کامل کد میتونید به گیت‌هابم سر بزنید. این مثال مقایسه دقت چند الگوریتم برای دیتاست تایتانیک که یکی از مسابقات سایت kaggle هست انجام شده. من از قبل عمل پاکسازی اطلاعات رو روی این دیتاست انجام دادم و این دیتا رو میتونید در گیت‌هاب دانلود کنید. ابتدا با وارد کردن دستور زیر یک پروژه با نام ml_rust درست میکنیم:cargo new ml_rustوارد پوشه ml_rust میشویم و در Cargo.toml اسم پکیج‌های زیر را در پایین [dependencies] اضافه می‌کنیم:[dependencies]
linfa = &quot0.6.0&quot
linfa-trees = &quot0.6.0&quot
linfa-svm = &quot0.6.0&quot
linfa-logistic = &quot0.6.0&quot
linfa-datasets = { version = &quot0.6.0&quot, features = [&quotiris&quot] }
csv = &quot1.1&quot
ndarray = &quot0.15.6&quotبا وارد کردن دستور زیر در ترمینال پکیج‌ها را نصب میکنیم: cargo buildبعد از نصب وارد پوشه src میشویم و فایل main.rs را ادیت میکنیم ابتدا با دستورهای زیر پکیج‌ها را وارد میکینم:use csv::Reader;
use std::fs::File;
use ndarray::{ Array, Array1, Array2 };

use linfa::Dataset;
use linfa_trees::DecisionTree;
use linfa::prelude::*;
use linfa_svm::Svm;
use linfa_logistic::LogisticRegression;سپس دیتاست را وارد میکینم کد کامل خواندن فایل csv و تبدیل کردن آن Dataset رو بخاطر طولانی بودن اینجا توضیح ندادم: fn main() {
let train_data_path = &quot./titanic_dataset/trainClean.csv”
let dataset = get_dataset(train_data_path);سپس دیتاست را به train و test تقسیم میکنیم:let (train, test) = dataset.split_with_ratio(0.8);در این قسمت مدل‌ها که مد نظرمون هست رو فراخوانی میکنیم و train میکنم و در آخر دقت اونارو روی داده test میسنجیم و پرینت میکنیم. من الگوریتم‌های decision tree، logistic regression و SVM استفاده کردم:// initial DecisionTree
let model = DecisionTree::params()
.fit(&train).unwrap();
println!(&quotDecision Tree&quot);

let accuracy =
model.predict(&test).confusion_matrix(&test).unwrap().accuracy();
println!(&quotDecision Tree accuracy: {}&quot,accuracy);

// initial LogisticRegression
let logstic_model = LogisticRegression::default()
.max_iterations(150).fit(&train).unwrap();
println!(&quotLogistic Regression&quot);

let logstic_accuracy =
logstic_model.predict(&test)
.confusion_matrix(&test)
.unwrap().accuracy();
println!(&quotLogistic Regression accuracy: {}&quot,logstic_accuracy);

// initial SVM
let svm_model = Svm::<_ bool>::params()
.linear_kernel()
.fit(&train).unwrap();

println!(&quotSVM&quot);
let svm_accuracy =
svm_model.predict(&test).
confusion_matrix(&test).unwrap().accuracy();
println!(&quotSVM accuracy: {}&quot,svm_accuracy);خب در این پست به معرفی کتابخانه Linfa در زبان Rust پرداختیم و با هم یک مثال رو بررسی کردیم. نظرتون راجع به این پست بگید و اینکه به نظرتون Rust در یادگیری ماشین میتونه جایگزین پایتون بشه؟ البته نظر شخصیم این که درحال جایگزین مناسبی نیست ولی در آینده میتونه.

نوشته یادگیری ماشین با Rust! اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

دیدگاهتان را بنویسید