> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

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

# stochasticLogisticRegression

<div id="stochasticLogisticRegression">
  ## stochasticLogisticRegression
</div>

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

تُنفِّذ هذه الدالة الانحدار اللوجستي العشوائي.
يمكن استخدامها في مسائل التصنيف الثنائي، وتدعم المعلمات المخصّصة نفسها مثل [`stochasticLinearRegression`](/docs/ar/reference/functions/aggregate-functions/stochasticLinearRegression) وتعمل بالطريقة نفسها.

**الاستخدام**

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

1. التدريب

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

```sql theme={null}
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);

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].

2. التنبؤ

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

```sql theme={null}
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`، تليه أعمدة السمات.

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

```sql theme={null}
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`، لكنه قد لا يحتوي على القيمة المستهدفة.

**الصيغة**

```sql theme={null}
stochasticLogisticRegression([learning_rate, l2_regularization_coef, mini_batch_size, method])(target, x1, x2, ...)
```

**المعاملات**

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

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

تعيد أوزان نموذج الانحدار اللوجستي المدرَّب. استخدم `evalMLMethod` لإجراء التنبؤات، إذ يعيد احتمالات انتماء الكائن إلى الفئة ذات التسمية `1`. [`Array(Float64)`](/docs/ar/reference/data-types/array)

**أمثلة**

**تدريب نموذج**

```sql title=Query theme={null}
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);

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
```

```response title=Response theme={null}
1
```

**إجراء تنبؤات**

```sql title=Query theme={null}
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);

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;

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
```

```response title=Response theme={null}
1
1
```

**التصنيف باستخدام قيمة العتبة**

```sql title=Query theme={null}
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);

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;

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)
```

```response title=Response theme={null}
0
0
```

**راجع أيضًا**

* [stochasticLinearRegression](/docs/ar/reference/functions/aggregate-functions/stochasticLogisticRegression)
* [الفرق بين الانحدار الخطي والانحدار اللوجستي](https://stackoverflow.com/questions/12146914/what-is-the-difference-between-linear-regression-and-logistic-regression)
