Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

stochasticLogisticRegression

stochasticLogisticRegression

أُضيفت في: v20.1.0

تُنفِّذ هذه الدالة الانحدار اللوجستي العشوائي. يمكن استخدامها في مسائل التصنيف الثنائي، وتدعم المعلمات المخصّصة نفسها مثل stochasticLinearRegression وتعمل بالطريقة نفسها.

الاستخدام

تُستخدم هذه الدالة على خطوتين:

  1. التدريب

للتدريب، يمكن استخدام استعلام مثل هذا:

CREATE TABLE IF NOT EXISTS train_data
(
    target Float64,
    x1 Float64,
    x2 Float64
) ENGINE = Memory;

INSERT INTO train_data VALUES (-1, 1, 1), (-1, 2, 1), (-1, 3, 2), (1, 8, 9), (1, 9, 8), (1, 10, 10);

DROP TABLE IF EXISTS your_model;

CREATE TABLE your_model ENGINE = Memory AS SELECT
stochasticLogisticRegressionState(1.0, 1.0, 10, 'SGD')(target, x1, x2)
AS state FROM train_data;

هنا، نحتاج أيضًا إلى إدراج البيانات في جدول train_data. عدد المعاملات غير ثابت، إذ يعتمد فقط على عدد الوسيطات المُمرَّرة إلى logisticRegressionState. ويجب أن تكون جميعها قيمًا رقمية. لاحظ أن العمود الذي يحتوي على القيمة المستهدفة (التي نريد أن يتعلم النموذج التنبؤ بها) يُدرَج باعتباره الوسيطة الأولى.

يجب أن تكون التسميات المتوقعة ضمن المجال [-1, 1].

  1. التنبؤ

باستخدام الحالة المحفوظة، يمكننا التنبؤ باحتمال أن يحمل كائنٌ ما التسمية 1.

CREATE TABLE IF NOT EXISTS test_data
(
    x1 Float64,
    x2 Float64
) ENGINE = Memory;

INSERT INTO test_data VALUES (1, 1), (9, 9);

WITH (SELECT state FROM your_model) AS model SELECT
evalMLMethod(model, x1, x2) FROM test_data

سيُرجع الاستعلام عمودًا من الاحتمالات. لاحظ أن الوسيط الأول للدالة evalMLMethod هو كائن AggregateFunctionState، تليه أعمدة السمات.

يمكننا أيضًا تعيين حدٍّ للاحتمال، مما يُصنِّف العناصر ضمن فئات مختلفة.

SELECT result < 1.1 AND result > 0.5 FROM
(WITH (SELECT state FROM your_model) AS model SELECT
evalMLMethod(model, x1, x2) AS result FROM test_data)

حينئذٍ ستكون النتيجة هي التسميات.

test_data هو جدول مثل train_data، لكنه قد لا يحتوي على القيمة المستهدفة.

الصيغة

stochasticLogisticRegression([learning_rate, l2_regularization_coef, mini_batch_size, method])(target, x1, x2, ...)

المعاملات

  • learning_rate — المعامل المرتبط بطول الخطوة عند تنفيذ خطوة الانحدار المتدرج. قد يؤدي معدل تعلّم كبير جدًا إلى أوزان لا نهائية للنموذج. القيمة الافتراضية هي 0.00001. Float64
  • l2_regularization_coef — معامل الانتظام L2، وقد يساعد في منع فرط التكيّف. القيمة الافتراضية هي 0.1. Float64
  • mini_batch_size — يحدّد عدد العناصر التي تُحسب تدرجاتها وتُجمع لتنفيذ خطوة واحدة من الانحدار المتدرج. يستخدم الانحدار العشوائي البحت عنصرًا واحدًا، لكن استخدام دفعات صغيرة (حوالي 10 عناصر) يجعل خطوات التدرج أكثر استقرارًا. القيمة الافتراضية هي 15. UInt64
  • method — طريقة تحديث الأوزان: Adam (افتراضيًا)، SGD، Momentum، Nesterov. يتطلب Momentum وNesterov قدرًا أكبر قليلًا من العمليات الحسابية والذاكرة، لكنهما مفيدان من حيث سرعة التقارب واستقرار أساليب الانحدار المتدرج العشوائي. String
  • target — تسميات التصنيف الثنائي المستهدفة. يجب أن تكون ضمن المجال [-1, 1]. Float
  • x1, x2, ... — قيم السمات (المتغيرات المستقلة). يجب أن تكون جميعها عددية. Float

القيمة المعادة

تعيد أوزان نموذج الانحدار اللوجستي المدرَّب. استخدم evalMLMethod لإجراء التنبؤات، إذ يعيد احتمالات انتماء الكائن إلى الفئة ذات التسمية 1. 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, 1), (-1, 2, 1), (-1, 3, 2), (1, 8, 9), (1, 9, 8), (1, 10, 10);

DROP TABLE IF EXISTS your_model;

CREATE TABLE your_model
ENGINE = MergeTree
ORDER BY tuple()
AS SELECT
stochasticLogisticRegressionState(1.0, 1.0, 10, 'SGD')(target, x1, x2)
AS state FROM train_data;

SELECT count() FROM your_model
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, 1), (-1, 2, 1), (-1, 3, 2), (1, 8, 9), (1, 9, 8), (1, 10, 10);

DROP TABLE IF EXISTS your_model;

CREATE TABLE your_model
ENGINE = MergeTree
ORDER BY tuple()
AS SELECT
stochasticLogisticRegressionState(1.0, 1.0, 10, '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 (1, 1), (9, 9);

WITH (SELECT state FROM your_model) AS model
SELECT
evalMLMethod(model, x1, x2) BETWEEN 0 AND 1
FROM test_data
1
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, 1), (-1, 2, 1), (-1, 3, 2), (1, 8, 9), (1, 9, 8), (1, 10, 10);

DROP TABLE IF EXISTS your_model;

CREATE TABLE your_model
ENGINE = MergeTree
ORDER BY tuple()
AS SELECT
stochasticLogisticRegressionState(1.0, 1.0, 10, '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 (1, 1), (9, 9);

SELECT result < 1.1 AND result > 0.5
FROM (
WITH (SELECT state FROM your_model) AS model SELECT
evalMLMethod(model, x1, x2) AS result FROM test_data)
0
0

راجع أيضًا

Navigation