پادشاهِ کُدنویسا شو!
کینگتو - آموزش برنامه نویسی تخصصصی - دات نت - سی شارپ - بانک اطلاعاتی و امنیت

AutoML و هوش مصنوعی ML.NET ماکروسافت چیست؟

13 بازدید 0 نظر ۱۴۰۵/۰۵/۰۷
بزرگ‌ترین چالش توسعه‌دهندگان دات‌نت هنگام مواجهه با الگوریتم‌های یادگیری ماشین، انتخاب مدل مناسب، مهندسی ویژگی‌ها (Feature Engineering) و تنظیم ابرپارامترها (Hyperparameter Tuning) است. کتابخانه ML.NET با ارائه قابلیت AutoML (Automated Machine Learning) این فرایند پیچیده و زمان‌بر را کاملاً مکانیزه کرده است.

چرا AutoML و چرا ML.NET؟

در فرایند سنتی یادگیری ماشین، یک دانشمند داده (Data Scientist) باید ده‌ها الگوریتم مختلف (مثل Logistic Regression، FastTree، LightGBM و...) را به همراه ترکیب‌های متعددی از ابرپارامترها امتحان کند تا به بالا‌ترین دقت برسد. این فرآیند Trial and Error بسیار کند، پرهزینه و وابسته به تجربه فردی است.

AutoML این چرخه را خودکار می‌کند. شما داده‌ها و متغیر هدف (Target) را مشخص می‌کنید، و AutoML در یک زمان‌بندی مشخص (Time Budget):

  1. الگوریتم‌های مختلف را روی داده‌های شما تست می‌کند.

  2. تبدیل‌های لازم روی داده‌ها (Data Transformations) را اعمال می‌کند.

  3. ابرپارامترهای هر الگوریتم را بهینه‌سازی می‌کند.

  4. در نهایت بهترین مدل (Best Model) را همراه با معیارهای ارزیابی (Metrics) خروجی می‌دهد.

مزیت کلیدی برای توسعه‌دهندگان .NET:

شما نیازی به خروج از اکوسیستم دات‌نت، یادگیری پایتون، یا استفاده از کتابخانه‌های ناآشنا ندارید. همه چیز درون #C، با Type-Safety کامل و کارایی بالا روی حافظه (Memory Efficiency) اجرا می‌شود.

 

ساختار داخلی AutoML در ML.NET

ابزار AutoML در ML.NET بر پایه موتور بهینه‌سازی Microsoft FLAML یا الگوریتم‌های پیشرفته جستجو بنا شده است. وقتی یک "آزمایش" (Experiment) را اجرا می‌کنید، مراحل زیر به ترتیب طی می‌شوند:

  1. Inference & Pipeline Generation: بررسی نوع داده‌های ورودی (متن، عدد، Categorical) و پیشنهاد خط‌لوله‌های تبدیل داده.

  2. Algorithm Sweeping: تست الگوریتم‌های مختلف متناسب با مساله (مثلاً Regression، Binary Classification یا Multi-class Classification).

  3. Hyperparameter Optimization: استفاده از روش‌های هوشمند برای یافتن بهترین تنظیمات داخلی الگوریتم.

  4. Evaluation: ارزیابی عملکرد مدل‌ها با معیارهایی نظیر $R^2$ ،Accuracy یا $AUC$.

 

پیاده‌سازی عملی: یافتن بهترین مدل پیش‌بینی قیمت (Regression)

برای درک عمیق‌تر، یک سناریوی عملی را پیاده‌سازی می‌کنیم. فرض کنید می‌خواهیم بهترین مدل را برای پیش‌بینی قیمت یک محصول بر اساس ویژگی‌های آن پیدا کنیم.

گام اول: نصب پکیج‌های 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 ذخیره شد.");
    }
}

 

بررسی معیارهای ارزیابی (Evaluation Metrics)

هنگامی که 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
};

 

استفاده از ML.NET CLI و Model Builder (جایگزین‌های Visual Studio)

اگر ترجیح می‌دهید کد کمتری بنویسید، دات‌نت ابزارهای گرافیکی و CLI متکی بر همین موتور AutoML ارائه می‌دهد:

  1. ML.NET Model Builder (Visual Studio Extension):

    یک رابط کاربری متنی-تصویری (Wizard) درون Visual Studio است که داده را دریافت کرده، AutoML را اجرا می‌کند و کد #C آماده آن را به سوشن شما اضافه می‌کند.

  2. ML.NET CLI:

    مناسب برای خط فرمان و Pipelineهای CI/CD:

    mlnet classification --dataset "data.csv" --label-col "Target" --train-time 120
    

 

نکات کلیدی برای محیط Production و بهینه‌سازی عملکرد

  1. زمان آزمایش (Time Budget):

    برای مجموعه‌داده‌های کوچک (زیر ۱۰,۰۰۰ سطر)، ۶۰ تا ۱۲۰ ثانیه کافی است. اما برای داده‌های حجیم بالای چند صد هزار سطر، زمان آزمایش را روی ۳۶۰۰ ثانیه (۱ ساعت) یا بیشتر تنظیم کنید تا AutoML شانس تست تمام الگوریتم‌ها را داشته باشد.

  2. کاهش مصرف حافظه:

    در صورتی که داده‌های شما بسیار بزرگ است، ویژگی CacheBeforeTraining را برابر false قرار دهید تا از پر شدن رم (RAM) جلوگیری شود.

  3. استفاده از 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) کنید.

 

لینک استاندارد شده: 9i1

0 نظر

    هنوز نظری برای این مقاله ثبت نشده است.
جستجوی مقاله و آموزش
دوره‌ها با تخفیفات ویژه