مقدمة: لماذا C# في التعلم الآلي؟
\nعندما يتعلق الأمر بالتعلم الآلي (ML)، يتبادر إلى الذهن أولاً لغة Python مع مكتباتها TensorFlow وPyTorch وscikit-learn. ومع ذلك، فإن نظام .NET البيئي لا يقف مكتوف الأيدي. C# هي لغة قوية ومكتوبة بشكل ثابت، وتُستخدم بنشاط في التطوير المؤسسي، وتتساءل العديد من الشركات: هل يمكن استخدامها لمهام التعلم الآلي؟
\nفي هذه المقالة، سنستعرض عمليًا كيف تتعامل C# مع التعلم الآلي، وما هي نقاط قوتها وأين تقصر أمام Python. ستتعلم كيفية تدريب نموذج بسيط باستخدام C# وML.NET، وما إذا كان الأمر يستحق ترحيل مشاريع التعلم الآلي الخاصة بك إلى .NET.
\n\nML.NET: الأداة الرئيسية لـ C# في التعلم الآلي
\nطورت Microsoft إطار العمل ML.NET - وهي مكتبة مفتوحة المصدر ومتعددة المنصات للتعلم الآلي، تتكامل بالكامل مع نظام .NET البيئي. يتيح ML.NET حل مشكلات التصنيف والانحدار والتجميع والترتيب، بالإضافة إلى العمل مع الصور والنصوص.
\n\nمثال: التنبؤ بسعر المنزل
\nدعونا نرى كيف يبدو الكود الفعلي بلغة C# لمهمة الانحدار. لنفترض أن لدينا ملف CSV يحتوي على بيانات عن المنازل (المساحة، عدد الغرف، العمر والسعر).
\nusing Microsoft.ML;\nusing Microsoft.ML.Data;\n\n// 1. تعريف فئات البيانات\npublic class HouseData\n{\n public float Square { get; set; }\n public float Rooms { get; set; }\n public float Age { get; set; }\n public float Price { get; set; } // المتغير المستهدف\n}\n\npublic class HousePrediction\n{\n [ColumnName("Score")]\n public float PredictedPrice { get; set; }\n}\n\n// 2. تحميل البيانات والتدريب\nvar context = new MLContext();\nIDataView data = context.Data.LoadFromTextFile<HouseData>("house_data.csv", separatorChar: ',');\n\nvar pipeline = context.Transforms.Concatenate("Features", "Square", "Rooms", "Age")\n .Append(context.Regression.Trainers.Sdca(labelColumnName: "Price", maximumNumberOfIterations: 100));\n\nvar model = pipeline.Fit(data);\n\n// 3. استخدام النموذج\nvar sampleData = new HouseData { Square = 120, Rooms = 3, Age = 10 };\nvar predictionEngine = context.Model.CreatePredictionEngine<HouseData, HousePrediction>(model);\nvar result = predictionEngine.Predict(sampleData);\n\nConsole.WriteLine($"السعر المتوقع: {result.PredictedPrice:F2}");\nكما ترى، الكود قابل للقراءة وموجز ولا يتطلب تبعيات معقدة. يقوم ML.NET تلقائيًا بمعالجة التطبيع وترميز الميزات الفئوية والتحقق المتقاطع.
\n\nالإمكانيات الرئيسية لـ C# في التعلم الآلي
\n- \n
- الأداء: يتم تجميع C# إلى كود آلي (عبر JIT أو AOT)، مما يوفر زيادة في السرعة مقارنة بـ Python المفسرة. بالنسبة لأحمال الإنتاج، قد يكون هذا أمرًا بالغ الأهمية. \n
- التكامل مع نظام .NET البيئي: يمكنك بسهولة دمج نموذج التعلم الآلي في تطبيق ويب ASP.NET Core أو تطبيق سطح مكتب WPF أو خدمة مصغرة. ليست هناك حاجة لتشغيل خادم ML منفصل بلغة Python. \n
- أمان الأنواع: يتم اكتشاف الأخطاء المتعلقة بأنواع البيانات في مرحلة التجميع، وليس في وقت التشغيل كما في Python. \n
- دعم ONNX: يمكن لـ ML.NET تحميل النماذج بتنسيق ONNX، مما يسمح باستخدام الشبكات العصبية المدربة في PyTorch أو TensorFlow. \n
- AutoML: أداة مدمجة للاختيار التلقائي للخوارزميات والمعلمات الفائقة (فئة
AutoMLExperiment). \n
قيود C# للتعلم الآلي
\nعلى الرغم من المزايا، لا تزال C# غير قادرة على منافسة Python في عدد من المجالات. دعنا نستعرض القيود الرئيسية.
\n\n1. اختيار محدود للمكتبات
\nتمتلك Python عشرات المكتبات الناضجة للتعلم الآلي: TensorFlow وPyTorch وJAX وscikit-learn وXGBoost وLightGBM. في .NET، الاختيار أكثر تواضعًا. ML.NET هو الإطار الرئيسي، وبالنسبة للتعلم العميق، هناك TensorFlow.NET وSciSharp، لكنهما