C# للتعلم الآلي: نظرة عامة على إمكانيات وقيود .NET

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة: هل يمكن لـ C# منافسة Python في تعلم الآلة؟

لطالما ارتبط عالم تعلم الآلة (ML) حصريًا بلغة Python. فالكثير من المكتبات (scikit-learn, PyTorch, TensorFlow)، والمجتمع النشط، ووفرة المواد التعليمية جعلت Python الرائدة بلا منازع. ومع ذلك، كثيرًا ما يتساءل المطورون الذين يستخدمون C# ومنصة .NET: هل يمكن استخدام الأداة المألوفة لمهام تعلم الآلة؟ الإجابة — نعم، يمكن، ولكن مع بعض التحفظات.

في هذه المقالة، سنستعرض الأدوات التي توفرها بيئة .NET لتعلم الآلة، وما هي نقاط قوتها، وأين لا تزال C# متأخرة عن Python. ستكون المقالة مفيدة لمطوري .NET الراغبين في دخول عالم تعلم الآلة، وكذلك لمتخصصي البيانات الذين يبحثون عن بدائل.

ML.NET: المكتبة الأصلية من Microsoft

الأداة الرئيسية لتعلم الآلة في C# هي ML.NET. وهي مكتبة مفتوحة المصدر ومتعددة المنصات، طورتها Microsoft خصيصًا لبيئة .NET. تتيح هذه المكتبة دمج نماذج تعلم الآلة مباشرة في تطبيقات C# دون الحاجة إلى التحول إلى Python.

الإمكانيات الرئيسية لـ ML.NET

  • التدريب والاستدلال: تدعم ML.NET كلاً من تدريب النماذج «من الصفر» وتحميل النماذج المدربة مسبقًا.
  • المهام النمطية: التصنيف، الانحدار، التجميع، الترتيب، اكتشاف الحالات الشاذة، تحليل المشاعر النصية.
  • AutoML: آلية مدمجة للاختيار التلقائي لأفضل خوارزمية والمعلمات الفائقة (التعلم الآلي الآلي).
  • التكامل مع ONNX: دعم تنسيق Open Neural Network Exchange (ONNX) لاستيراد النماذج من PyTorch أو TensorFlow.

مثال: التنبؤ بالسعر (الانحدار) باستخدام ML.NET

لننظر في مثال بسيط لتدريب نموذج للتنبؤ بتكلفة السكن بناءً على المساحة. أولاً، نحدد فئة البيانات:

public class HousingData
{
    public float Size { get; set; }
    public float Price { get; set; }
}

public class PricePrediction
{
    [ColumnName("Score")]
    public float Price { get; set; }
}

الآن نكتب كود التدريب:

using Microsoft.ML;

var context = new MLContext();
var data = context.Data.LoadFromTextFile<HousingData>("housing.csv", separatorChar: ',');

var pipeline = context.Transforms.Concatenate("Features", new[] { "Size" })
    .Append(context.Regression.Trainers.Sdca(labelColumnName: "Price"));

var model = pipeline.Fit(data);

var predictionEngine = context.Model.CreatePredictionEngine<HousingData, PricePrediction>(model);
var prediction = predictionEngine.Predict(new HousingData { Size = 75f });

Console.WriteLine($"السعر المتوقع: {prediction.Price:F2}");

كما ترون، فإن واجهة برمجة التطبيقات (API) بديهية لمطور .NET. ومع ذلك، من المهم أن نفهم: ML.NET لا تدعم التعلم العميق (الشبكات العصبية) بنفس مرونة Keras أو PyTorch.

TensorFlow.NET ومجموعة SciSharp Stack

لمهام التعلم العميق في C#، يوجد مشروع TensorFlow.NET (TF.NET). وهو ربط .NET بـ TensorFlow الأصلي، مما يسمح بإنشاء وتدريب وتشغيل الشبكات العصبية في C#. إلى جانب مكتبات SciSharp (Keras.NET, NumSharp, Pandas.NET)، يشكل هذا نظيرًا لمكدس Python في .NET.

مثال: شبكة عصبية بسيطة باستخدام TensorFlow.NET

using Tensorflow;
using static Tensorflow.Binding;
using NumSharp;

// إنشاء نموذج Sequential بسيط
var model = keras.Sequential();
model.add(keras.layers.Dense(128, activation: "relu", input_shape: new Shape(784)));
model.add(keras.layers.Dense(10, activation: "softmax"));

// التجميع
model.compile(optimizer: "adam",
              loss: "categorical_crossentropy",
              metrics: new[] { "accuracy" });

// تحميل بيانات MNIST (عبر NumSharp)
var (x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data();
x                

المدونات

توصيات الكتب