> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-8c05c8a2.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> تُنفِّذ هذه الدالة الانحدار الخطي العشوائي. وتدعم معلمات مخصّصة لمعدل التعلُّم، ومعامل الانتظام L2، وحجم الدفعة المصغّرة، كما توفّر عدة طرق لتحديث الأوزان (Adam وSGD بسيط وMomentum وNesterov.)

# stochasticLinearRegression

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

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

تُنفِّذ هذه الدالة الانحدار الخطي العشوائي.
وتدعم معلمات مخصّصة لما يلي:

* معدل التعلّم
* معامل الانتظام L2
* حجم الدفعة المصغّرة

كما توفّر عدة طرائق لتحديث الأوزان:

* Adam (المستخدم افتراضيًا)
* SGD بسيط
* Momentum
* Nesterov

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

تُستخدم هذه الدالة على خطوتين: ملاءمة النموذج والتنبؤ ببيانات جديدة.

1. الملاءمة

لإجراء الملاءمة، يمكن استخدام استعلام مثل هذا:

```sql theme={null}
CREATE TABLE IF NOT EXISTS train_data
(
    param1 Float64,
    param2 Float64,
    target Float64
) ENGINE = Memory;

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`.
ويجب أن تكون جميعها قيمًا رقمية.
لاحظ أن العمود الذي يحتوي على القيمة المستهدفة (التي نريد أن يتعلّم التنبؤ بها) يُدرَج باعتباره الوسيطة الأولى.

2. التنبؤ

بعد حفظ حالة في الجدول، يمكننا استخدامها عدة مرات للتنبؤ، أو حتى دمجها مع حالات أخرى وإنشاء نماذج جديدة أفضل.

```sql theme={null}
WITH (SELECT state FROM your_model) AS model SELECT
evalMLMethod(model, x1, x2) FROM test_data
```

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

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

**ملاحظات**

1. لدمج نموذجين، يمكن للمستخدم إنشاء استعلام مثل هذا:

```sq; theme={null}
SELECT state1 + state2 FROM your_models
```

حيث يحتوي جدول `your_models` على كلا النموذجين.
سيُرجع هذا الاستعلام كائن `AggregateFunctionState` جديدًا.

2. يمكنك جلب أوزان النموذج المُنشأ لاستخدامها لأغراضك الخاصة من دون حفظ النموذج إذا لم يُستخدم المركِّب `-State`.

```sql theme={null}
SELECT stochasticLinearRegression(0.01)(target, param1, param2)
FROM train_data
```

سيُدرِّب استعلام كهذا النموذج ويُرجع أوزانه: القيم الأولى هي الأوزان التي تقابل معاملات النموذج، أما الأخيرة فهي الانحياز.
لذا، في المثال أعلاه، سيُرجع الاستعلام عمودًا يحتوي على 3 قيم.

**البنية**

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

**الوسيطات**

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

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

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

**أمثلة**

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

```sql title=Query theme={null}
CREATE TABLE your_model
ENGINE = Memory
AS SELECT
stochasticLinearRegressionState(0.1, 0.0, 5, 'SGD')(target, x1, x2)
AS state FROM train_data
```

```response title=Response theme={null}
Saves trained model state to table
```

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

```sql title=Query theme={null}
WITH (SELECT state FROM your_model) AS model SELECT
evalMLMethod(model, x1, x2) FROM test_data
```

```response title=Response theme={null}
Returns predicted values for test data
```

**استخراج أوزان النموذج**

```sql title=Query theme={null}
SELECT stochasticLinearRegression(0.01)(target, x1, x2) FROM train_data
```

```response title=Response theme={null}
Returns model weights without saving state
```

**انظر أيضًا**

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