در فرایند سنتی یادگیری ماشین، یک دانشمند داده (Data Scientist) باید دهها الگوریتم مختلف (مثل Logistic Regression، FastTree، LightGBM و...) را به همراه ترکیبهای متعددی از ابرپارامترها امتحان کند تا به بالاترین دقت برسد. این فرآیند Trial and Error بسیار کند، پرهزینه و وابسته به تجربه فردی است.
AutoML این چرخه را خودکار میکند. شما دادهها و متغیر هدف (Target) را مشخص میکنید، و AutoML در یک زمانبندی مشخص (Time Budget):
الگوریتمهای مختلف را روی دادههای شما تست میکند.
تبدیلهای لازم روی دادهها (Data Transformations) را اعمال میکند.
ابرپارامترهای هر الگوریتم را بهینهسازی میکند.
در نهایت بهترین مدل (Best Model) را همراه با معیارهای ارزیابی (Metrics) خروجی میدهد.
شما نیازی به خروج از اکوسیستم داتنت، یادگیری پایتون، یا استفاده از کتابخانههای ناآشنا ندارید. همه چیز درون #C، با Type-Safety کامل و کارایی بالا روی حافظه (Memory Efficiency) اجرا میشود.
ابزار AutoML در ML.NET بر پایه موتور بهینهسازی Microsoft FLAML یا الگوریتمهای پیشرفته جستجو بنا شده است. وقتی یک "آزمایش" (Experiment) را اجرا میکنید، مراحل زیر به ترتیب طی میشوند:
Inference & Pipeline Generation: بررسی نوع دادههای ورودی (متن، عدد، Categorical) و پیشنهاد خطلولههای تبدیل داده.
Algorithm Sweeping: تست الگوریتمهای مختلف متناسب با مساله (مثلاً Regression، Binary Classification یا Multi-class Classification).
Hyperparameter Optimization: استفاده از روشهای هوشمند برای یافتن بهترین تنظیمات داخلی الگوریتم.
Evaluation: ارزیابی عملکرد مدلها با معیارهایی نظیر $R^2$ ،Accuracy یا $AUC$.
برای درک عمیقتر، یک سناریوی عملی را پیادهسازی میکنیم. فرض کنید میخواهیم بهترین مدل را برای پیشبینی قیمت یک محصول بر اساس ویژگیهای آن پیدا کنیم.
گام اول: نصب پکیجهای NuGet
ابتدا پکیجهای زیر را به پروژه #C خود اضافه کنید:
dotnet add package Microsoft.ML
dotnet add package Microsoft.ML.AutoML
گام دوم: تعریف کلاسهای داده (Data Models)
using Microsoft.ML.Data;
public class ModelInput
{
[LoadColumn(0)]
public float Size { get; set; }
[LoadColumn(1)]
public float Rooms { get; set; }
[LoadColumn(2)]
public string Location { get; set; }
[LoadColumn(3), ColumnName("Label")]
public float Price { get; set; } // متغیر هدف
}
public class ModelOutput
{
[ColumnName("Score")]
public float PredictedPrice { get; set; }
}
گام سوم: پیکربندی و اجرای آزمایش AutoML
در این بخش کد اصلی اجرا و مدیریت آزمایش AutoML را پیادهسازی میکنیم:
using System;
using System.IO;
using Microsoft.ML;
using Microsoft.ML.AutoML;
class Program
{
static void Main(string[] args)
{
// ۱. مقداردهی اولیه MLContext
var mlContext = new MLContext(seed: 42);
// ۲. بارگذاری دادهها
string dataPath = "housing-data.csv";
IDataView dataView = mlContext.Data.LoadFromTextFile<ModelInput>(
path: dataPath,
hasHeader: true,
separatorChar: ',');
// ۳. تقسیم دادهها به Train و Test
var trainTestSplit = mlContext.Data.TrainTestSplit(dataView, testFraction: 0.2);
Console.WriteLine("در حال پیکربندی و اجرای آزمایش AutoML...");
// ۴. تنظیمات آزمایش AutoML برای مسئله Regression
var experimentPipeline = mlContext.Auto()
.CreateRegressionExperiment(maxExperimentTimeInSeconds: 60);
// ۵. اجرای آزمایش جهت یافتن بهترین مدل
var experimentResult = experimentPipeline.Execute(
trainData: trainTestSplit.TrainSet,
labelColumnName: nameof(ModelInput.Price));
// ۶. دریافت بهترین مدل استخراجشده
RunDetail<RegressionMetrics> bestRun = experimentResult.BestRun;
Console.WriteLine("\n================ نتایج آزمایش ================");
Console.WriteLine($"بهترین الگوریتم یافت شده: {bestRun.TrainerName}");
Console.WriteLine($"معیار R-Squared: {bestRun.ValidationMetrics.RSquared:F4}");
Console.WriteLine($"خطای RMSE: {bestRun.ValidationMetrics.RootMeanSquaredError:F4}");
Console.WriteLine("==============================================\n");
// ۷. ذخیره مدل نهایی برای استفاده در Production
ITransformer trainedModel = bestRun.Model;
mlContext.Model.Save(trainedModel, trainTestSplit.TrainSet.Schema, "BestModel.zip");
Console.WriteLine("مدل بهینهشده با موفقیت در فایل BestModel.zip ذخیره شد.");
}
}
هنگامی که AutoML چندین مدل را ارزیابی میکند، شناخت معیارهایی که بر اساس آنها "بهترین مدل" انتخاب میشود حیاتی است:
|
نوع مسئله |
معیار اصلی (Primary Metric) |
مفهوم و کاربرد |
|
Binary Classification |
Accuracy / AUC |
دقت تشخیص دو کلاس (مثلاً اسپم / غیر اسپم). |
|
Multi-class Classification |
Micro / Macro Accuracy |
میزان دقت در مسائل با بیش از دو کلاس. |
|
Regression |
RSquared ($R^2$) / RMSE |
میزان انطباق پیشبینی عددی با داده واقعی (هرچه $R^2$ به ۱ نزدیکتر باشد، بهتر است). |
شما میتوانید به AutoML بگوئید که بر اساس یک معیار خاص، مدلها را رتبهبندی کند:
var experimentSettings = new RegressionExperimentSettings
{
MaxExperimentTimeInSeconds = 120,
OptimizingMetric = RegressionMetric.RSquared,
CacheBeforeTraining = true
};
اگر ترجیح میدهید کد کمتری بنویسید، داتنت ابزارهای گرافیکی و CLI متکی بر همین موتور AutoML ارائه میدهد:
ML.NET Model Builder (Visual Studio Extension):
یک رابط کاربری متنی-تصویری (Wizard) درون Visual Studio است که داده را دریافت کرده، AutoML را اجرا میکند و کد #C آماده آن را به سوشن شما اضافه میکند.
ML.NET CLI:
مناسب برای خط فرمان و Pipelineهای CI/CD:
mlnet classification --dataset "data.csv" --label-col "Target" --train-time 120
زمان آزمایش (Time Budget):
برای مجموعهدادههای کوچک (زیر ۱۰,۰۰۰ سطر)، ۶۰ تا ۱۲۰ ثانیه کافی است. اما برای دادههای حجیم بالای چند صد هزار سطر، زمان آزمایش را روی ۳۶۰۰ ثانیه (۱ ساعت) یا بیشتر تنظیم کنید تا AutoML شانس تست تمام الگوریتمها را داشته باشد.
کاهش مصرف حافظه:
در صورتی که دادههای شما بسیار بزرگ است، ویژگی CacheBeforeTraining را برابر false قرار دهید تا از پر شدن رم (RAM) جلوگیری شود.
استفاده از PredictionEnginePool در ASP.NET Core:
مدل ذخیرهشده (BestModel.zip) را در سرویسهای وب بهصورت مستقیم با PredictionEngine استفاده نکنید زیرا Thread-Safe نیست. همیشه از PredictionEnginePool استفاده کنید:
// در Program.cs پروژههای ASP.NET Core
builder.Services.AddPredictionEnginePool<ModelInput, ModelOutput>()
.FromFile(filePath: "BestModel.zip", watchForChanges: true);
قابلیت AutoML در ML.NET پل ارتباطی قدرتمندی میان توسعهدهندگان داتنت و دنیای یادگیری ماشین است. بدون نیاز به آزمون و خطاهای پیچیده و طولانی، میتوانید بهترین الگوریتم و پیکربندی را بهصورت کاملاً خودکار برای دادههای سازمان خود استخراج کرده و آن را در قالب یک فایل .zip سبک در پروژههای .NET مستقر (Deploy) کنید.
0 نظر
هنوز نظری برای این مقاله ثبت نشده است.