یادگیری ماشین با 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] اضافه می‌کنیم:


با وارد کردن دستور زیر در ترمینال پکیج‌ها را نصب میکنیم:

cargo build

بعد از نصب وارد پوشه src میشویم و فایل main.rs را ادیت میکنیم ابتدا با دستورهای زیر پکیج‌ها را وارد میکینم:


سپس دیتاست را وارد میکینم کد کامل خواندن فایل csv و تبدیل کردن آن Dataset رو بخاطر طولانی بودن اینجا توضیح ندادم:


سپس دیتاست را به train و test تقسیم میکنیم:


در این قسمت مدل‌ها که مد نظرمون هست رو فراخوانی میکنیم و train میکنم و در آخر دقت اونارو روی داده test میسنجیم و پرینت میکنیم. من الگوریتم‌های decision tree، logistic regression و SVM استفاده کردم:



خب در این پست به معرفی کتابخانه Linfa در زبان Rust پرداختیم و با هم یک مثال رو بررسی کردیم. نظرتون راجع به این پست بگید و اینکه به نظرتون Rust در یادگیری ماشین میتونه جایگزین پایتون بشه؟ البته نظر شخصیم این که درحال حاضر جایگزین مناسبی نیست ولی در آینده میتونه.