التعلم الآلي في SQL Server





ML Toolkit Inside SQL Server



توضح هذه المقالة الخطوات لإنشاء إجراء يستخدم مجموعة بيانات mtcars المضمنة في R لإنشاء نموذج خطي معمم بسيط (GLM) يمكنه التنبؤ باحتمالية تزويد السيارة بنقل يدوي. الإجراء الثاني خاص بالتقدير - يستدعي النموذج الذي تم إنشاؤه في الإجراء الأول لإخراج مجموعة من التنبؤات بناءً على البيانات الجديدة.



شرح المصطلحات



SQL هي لغة من الاستعلامات المهيكلة المرسلة إلى قاعدة البيانات.



SQL Server هي قاعدة بيانات علائقية من Microsoft.



خدمات التعلم الآلي هي أحد مكونات SQL Server التي تمكنك من تنفيذ البرامج النصية Python و R على البيانات.



المشغل في SQL هو آلية للرد على تغيير في حالة قاعدة البيانات.



البرامج النصية هي برامج صغيرة مصممة لمجموعة محدودة من المهام ، وغالبًا ما تكون دورية.



R هي لغة برمجة تم إنشاؤها خصيصًا لمعالجة البيانات.



الأسباب التي تجعل SQL Server مفيدًا للتعلم الآلي



دعونا نناقش قائمة الفوائد المتاحة لاستخدام ML في SQL Server.



أحد أهم الأسباب هو سهولة تخزين أوامر SQL ورمز ML في منطقة رؤية مشتركة ، مما يسمح لك بالاستفادة الكاملة من التقنيتين.



سبب آخر مهم هو الأمان ، لأنه إذا كان خادم قاعدة البيانات الشرطية في مكان واحد ، وكانت الطلبات إليه تأتي من مكان آخر ، فيمكن اعتراض البيانات. إذا كانت نواة DBMS تخزن البيانات وتستدعي الرمز ، فيمكن تجنب هذه المشكلة.



من بين أشياء أخرى ، يتمتع SQL Server بدعم جيد للغة البرمجة R ، سواء من حيث المكتبات المتوفرة أو من حيث الأداء. وفقًا لأحدث المعايير ، فإن محرك قاعدة البيانات قادر على حساب حوالي مليون تنبؤات R في الثانية ( رابط ).



التحقق من صحة SQL Server



أولاً ، لنتأكد من أن خدمة التعلم الآلي والإضافات الخاصة بـ R تعمل كما هو متوقع. للقيام بذلك ، لنقم بتشغيل الكود التالي.



EXEC sp_execute_external_script @language = N'R'
, @script = N'
OutputDataSet <- data.frame(installed.packages()[,c("Package", ...;'
WITH result sets((Package NVARCHAR(255)
, Version NVARCHAR(100)...));


النتيجة:







دعونا نحلل باختصار أمر SQL:



1.  EXEC sp_execute_external_script @language = N'R'
نحدد هنا أن النواة يجب أن تتعامل مع لغة R.



2.  @script = N'OutputDataSet <- data.frame(installed...'
النصي هذا متغير خاص يمكن معالجته في طلب لاحق ، مساوٍ لنتيجة الأمر R.



3.  WITH result sets((Package NVARCHAR(255)..
يتم استخدام عملية عرض المحتوى التكراري النصيعلى شكل طاولة.



مثال على استخدام ML في SQL Server ( رابط )



قم بإنشاء جدول لتخزين البيانات التي سنقوم بتدريب النموذج بها:



CREATE TABLE dbo.MTCars(
hp int NOT NULL,
...
wt decimal(10, 3) NOT NULL,
am int NOT NULL);


ندخل البيانات فيه:



INSERT INTO dbo.MTCars
EXEC sp_execute_external_script @language = N'R'
    , @script = N'MTCars <- mtcars;'
    , @input_data_1 = N''
    , @output_data_1_name = N'MTCars';


النتيجة:







إنشاء النموذج وتدريبه:



CREATE PROCEDURE generate_GLM
... , @script = N'carsModel <- carsModel <- glm(... data = MTCarsData, ...;
        trained_model <- ...'
    , @input_data_1 = N'SELECT hp, wt, am FROM MTCars'
    , @input_data_1_name = N'MTCarsData'
    ...;


في هذه المرحلة ، أود التركيز على كيفية تلقي R للبيانات على محرك SQL Server: @ input_data_1 هي أعمدة الجدول ، والتي يتم تمثيلها في الكود كمتغير @ input_data_1_name



إنشاء جدول للنموذج:



CREATE TABLE GLM_models (
    model_name varchar(30) not null default('default model') primary key,
    model varbinary(max) not null
);


نحفظ النموذج:



INSERT INTO GLM_models(model)
EXEC generate_GLM;


النتيجة:







SQL Server قادر على تحميل النماذج المدربة في جداول بحيث يمكن إعادة استخدامها بسرعة لاحقًا.



نقوم بإنشاء جدول حيث سيتم تخزين البيانات للتحليل:



CREATE TABLE dbo.NewMTCars(
    hp INT NOT NULL
    , wt DECIMAL (10,3) NOT NULL
    , am INT NULL)


نقوم بملء بيانات عشوائية ضمن النطاق المطلوب:




INSERT INTO dbo.NewMTCars(hp, wt) VALUES (110, 2.634)
INSERT INTO dbo.NewMTCars(hp, wt) VALUES (72, 3.435)
INSERT INTO dbo.NewMTCars(hp, wt) VALUES (220, 5.220)
INSERT INTO dbo.NewMTCars(hp, wt) VALUES (120, 2.800)


النتيجة:







نتوقع نتيجة البيانات الجديدة:



DECLARE @glmmodel varbinary(max) = ...
    ...    , @script = N'
            --     
            '
   --    ;


النتيجة:







كلما اقتربت predicated_am من واحد ، زادت فرصة وجود ناقل حركة يدوي في السيارة.



خاتمة



بالإضافة إلى هذا المثال ، يمكن استخدام التعلم الآلي في معالجة البيانات لفصل المعلومات المفيدة عن الضوضاء ، والعثور على التبعيات بين الأعمدة ، وغير ذلك الكثير.



بالإضافة إلى الوظيفة المذكورة أعلاه ، يمكنك تطبيق طرق تنبؤ أكثر تقدمًا وإعداد مشغلات تنطلق في كل مرة تأتي فيها معلومات جديدة مثل:



CREATE TRIGGER `add_car` AFTER INSERT ON `NewMTCars `


... تطبيق إجراء التنبؤ.



All Articles