stochasticLinearRegression
أُضيفت في: v20.1.0
تُنفِّذ هذه الدالة الانحدار الخطي العشوائي. وتدعم معلمات مخصّصة لما يلي:
- معدل التعلّم
- معامل الانتظام L2
- حجم الدفعة المصغّرة
كما توفّر عدة طرائق لتحديث الأوزان:
- Adam (المستخدم افتراضيًا)
- SGD بسيط
- Momentum
- Nesterov
الاستخدام
تُستخدم هذه الدالة على خطوتين: ملاءمة النموذج والتنبؤ ببيانات جديدة.
- الملاءمة
لإجراء الملاءمة، يمكن استخدام استعلام مثل هذا:
CREATE TABLE IF NOT EXISTS train_data
(
target Float64,
x1 Float64,
x2 Float64
) ENGINE = Memory;
INSERT INTO train_data VALUES (1, 1, 0), (2, 2, 0), (3, 3, 0), (4, 4, 0), (5, 5, 0), (6, 6, 0);
DROP TABLE IF EXISTS your_model;
CREATE TABLE your_model ENGINE = Memory AS SELECT
stochasticLinearRegressionState(0.1, 0.0, 5, 'SGD')(target, x1, x2)
AS state FROM train_data;هنا، نحتاج أيضًا إلى إدراج البيانات في الجدول train_data.
عدد المَعلمات ليس ثابتًا؛ إذ يعتمد فقط على عدد الوسائط المُمرَّرة إلى linearRegressionState.
ويجب أن تكون جميعها قيمًا رقمية.
لاحظ أن العمود الذي يحتوي على القيمة المستهدفة (التي نريد أن يتعلّم التنبؤ بها) يُدرَج باعتباره الوسيطة الأولى.
- التنبؤ
بعد حفظ حالة في الجدول، يمكننا استخدامها عدة مرات للتنبؤ، أو حتى دمجها مع حالات أخرى وإنشاء نماذج جديدة أفضل.
CREATE TABLE IF NOT EXISTS test_data
(
x1 Float64,
x2 Float64
) ENGINE = Memory;
INSERT INTO test_data VALUES (10, 0), (20, 0);
WITH (SELECT state FROM your_model) AS model SELECT
evalMLMethod(model, x1, x2) FROM test_dataسيُرجع الاستعلام عمودًا من القيم المتوقعة.
لاحظ أن الوسيط الأول في evalMLMethod هو كائن AggregateFunctionState، تليه أعمدة السمات.
test_data هو جدول مثل train_data، لكنه قد لا يحتوي على القيمة المستهدفة.
ملاحظات
- لدمج نموذجين، يمكن للمستخدم إنشاء استعلام مثل هذا:
SELECT state1 + state2 FROM your_modelsحيث يحتوي جدول your_models على كلا النموذجين.
سيُرجع هذا الاستعلام كائن AggregateFunctionState جديدًا.
- يمكنك جلب أوزان النموذج المُنشأ لاستخدامها لأغراضك الخاصة من دون حفظ النموذج إذا لم يُستخدم المركِّب
-State.
SELECT stochasticLinearRegression(0.01)(target, x1, x2)
FROM train_dataسيُدرِّب استعلام كهذا النموذج ويُرجع أوزانه: القيم الأولى هي الأوزان التي تقابل معاملات النموذج، أما الأخيرة فهي الانحياز. لذا، في المثال أعلاه، سيُرجع الاستعلام عمودًا يحتوي على 3 قيم.
البنية
stochasticLinearRegression([learning_rate, l2_regularization_coef, mini_batch_size, method])(target, x1, x2, ...)الوسيطات
learning_rate— المعامل المرتبط بطول الخطوة عند تنفيذ خطوة من الانحدار المتدرج. قد يؤدي معدّل تعلّم كبير جدًا إلى أوزان لا نهائية للنموذج. القيمة الافتراضية هي0.00001.Float64l2_regularization_coef— معامل الانتظام L2، وقد يساعد في منع فرط التكيّف. القيمة الافتراضية هي0.1.Float64mini_batch_size— يحدّد عدد العناصر التي تُحسب تدرجاتها وتُجمع لتنفيذ خطوة واحدة من الانحدار المتدرج. يستخدم الانحدار العشوائي البحت عنصرًا واحدًا، لكن استخدام دفعات صغيرة (حوالي 10 عناصر) يجعل خطوات التدرج أكثر استقرارًا. القيمة الافتراضية هي15.UInt64method— طريقة تحديث الأوزان:Adam(افتراضيًا)،SGD،Momentum،Nesterov. يتطلبMomentumوNesterovقدرًا أكبر قليلًا من العمليات الحسابية والذاكرة، لكنهما مفيدان من حيث سرعة التقارب واستقرار أساليب الانحدار المتدرج العشوائي.const Stringtarget— القيمة المستهدفة (المتغير التابع) المطلوب تعلّم التنبؤ بها. يجب أن تكون رقمية.Float*x1, x2, ...— قيم السمات (المتغيرات المستقلة). يجب أن تكون جميعها رقمية.Float*
القيمة المعادة
يعيد أوزان نموذج الانحدار الخطي المدرَّب. تمثل القيم الأولى معاملات النموذج، أما الأخيرة فهي الانحياز. استخدم evalMLMethod لإجراء التنبؤات. Array(Float64)
أمثلة
تدريب نموذج
DROP TABLE IF EXISTS train_data;
CREATE TABLE train_data (target Float64, x1 Float64, x2 Float64) ENGINE = Memory;
INSERT INTO train_data VALUES (1, 1, 0), (2, 2, 0), (3, 3, 0), (4, 4, 0), (5, 5, 0), (6, 6, 0);
DROP TABLE IF EXISTS your_model;
CREATE TABLE your_model
ENGINE = Memory
AS SELECT
stochasticLinearRegressionState(0.1, 0.0, 5, 'SGD')(target, x1, x2)
AS state FROM train_data;
SELECT count() FROM your_model1إجراء التنبؤات
DROP TABLE IF EXISTS train_data;
CREATE TABLE train_data (target Float64, x1 Float64, x2 Float64) ENGINE = Memory;
INSERT INTO train_data VALUES (1, 1, 0), (2, 2, 0), (3, 3, 0), (4, 4, 0), (5, 5, 0), (6, 6, 0);
DROP TABLE IF EXISTS your_model;
CREATE TABLE your_model
ENGINE = Memory
AS SELECT
stochasticLinearRegressionState(0.1, 0.0, 5, 'SGD')(target, x1, x2)
AS state FROM train_data;
DROP TABLE IF EXISTS test_data;
CREATE TABLE test_data (x1 Float64, x2 Float64) ENGINE = Memory;
INSERT INTO test_data VALUES (10, 0), (20, 0);
WITH (SELECT state FROM your_model) AS model SELECT
evalMLMethod(model, x1, x2) > 0 FROM test_data1
1الحصول على أوزان النموذج
DROP TABLE IF EXISTS train_data;
CREATE TABLE train_data (target Float64, x1 Float64, x2 Float64) ENGINE = Memory;
INSERT INTO train_data VALUES (1, 1, 0), (2, 2, 0), (3, 3, 0), (4, 4, 0), (5, 5, 0), (6, 6, 0);
SELECT length(stochasticLinearRegression(0.01)(target, x1, x2)) FROM train_data3انظر أيضًا