أثبت الفصل 010 القرار الأول للنمذجة: هل الهدف فئوي أم عددي. والإجابة «فئوي» لا تغلق التأطير. ويبقى تحديد أي نوع تصنيف هو، لأن هذا النوع يحدد شكل المتغير الهدف والخوارزميات القابلة للاستعمال والمقاييس الجائزة وتفسير الخطأ.
التعريف الدقيق
ليكن فضاء مدخل X ومجموعة منتهية من الوسوم C = {c_1, ..., c_K} عددها K ≥ 2. تقوم مهمة تصنيف على استقراء، انطلاقاً من عيّنة {(x_i, y_i)}, i = 1..n، دالة قرار f : X → Y فضاء وصولها Y مبني على C وفق إحدى بنائين، يؤسسان تجزئة هذا الفصل:
Y = C — تتلقى كل ملاحظة وسماً واحداً بالضبط من بين K. وتُدعى المسألة بوسم وحيد (single-label).Y = {0, 1}^K، مجموعة أجزاء C — تتلقى كل ملاحظة مجموعة جزئية أيّاً كانت من الوسوم، فارغة أحياناً. وتُدعى المسألة متعددة الوسوم.ترجمة إلى اللغة اليومية
التصنيف إسناد وسوم مأخوذة من قائمة مغلقة. والسؤال الأول الواجب حسمه هو ما إذا كانت ملاحظة تتلقى واحداً فقط أو عدة.
نقطة انتباه
تُفترَض قائمة الوسوم مغلقة ومعروفة عند التدريب. ولا يمكن لمصنِّف التنبؤ بفئة لم يرصدها قط؛ وإدارة الفئات غير المسبوقة تندرج تحت كشف الشذوذ (الفصل 003).
| الترتيب | السؤال | الجواب | النوع المحتفَظ به |
|---|---|---|---|
| 1 | هل يمكن لملاحظة أن تحمل عدة وسوم معاً؟ | نعم | متعدد الوسوم |
| 2 | كم فئة متنافتة؟ | K = 2 | ثنائي |
| 2 | كم فئة متنافتة؟ | K > 2 | الانتقال إلى السؤال 3 |
| 3 | هل الفئات مزوَّدة بترتيب كلي طبيعي؟ | لا | متعدد الفئات (اسمي) |
| 3 | هل الفئات مزوَّدة بترتيب كلي طبيعي؟ | نعم | ترتيبي |
الترتيب ليس اعتباطياً: سؤال التنافي يسبق، لأنه يغيّر شكل مصفوفة الهدف نفسه — متجه في حالة، مصفوفة في الأخرى. والسؤالان 2 و3 لا ينصبان إلا على البنية الداخلية لـ C.
غالباً ما تقبل الظاهرة المهنية نفسها عدة صياغات صحيحة. فاستطلاع رضا من 1 إلى 5 يمكن معالجته كهدف ترتيبي بخمسة مستويات، أو كهدف ثنائي بعد تجميع ({1,2,3} مقابل {4,5})، أو كهدف عددي.
ومعيار القرار هو الاستعمال المجعول للتنبؤ. إذا كان القرار التشغيلي اللاحق ثنائياً — إعادة الاتصال بالزبون أم لا — تركّز الصياغة الثنائية قدرة النموذج على الحد المفيد وحده.
نقطة انتباه: تجميع الفئات غير قابل للعكس من وجهة نظر النموذج. فنموذج مدرَّب على مستويين لن يعيد أبداً التفاصيل بخمسة مستويات.
التعريف الدقيق
حالة التصنيف بوسم وحيد حيث K = 2: C = {c_0, c_1} وY = C. وتجزّئ دالة القرار f : X → {c_0, c_1} فضاء المدخل إلى منطقتين يفصلهما حد قرار.
ومعظم الخوارزميات لا تتعلّم f مباشرة، بل دالة درجة s : X → ℝ أو تقدير احتمال شرطي p(x) = P(Y = c_1 | X = x)، وينتج القرار عن مقارنة بعتبة t: f(x) = c_1 إذا p(x) ≥ t، وc_0 وإلا.
ترجمة إلى اللغة اليومية
إجابتان ممكنتان، واثنتان فقط. وينتج النموذج في الواقع درجة ثقة، تُحوَّل إلى إجابة بتثبيت عارضة.
نقطة انتباه
الفصل بين تقدير p(x) واختيار العتبة t أساسي. وعتبة 0,5 اصطلاح تنفيذ، لا أمثل مثبَت قط. وضبطها معالَج في الفصل 062.
يفرض الاستعمال ترميز الهدف الثنائي بالأعداد الصحيحة 0 و1. وهذا الاصطلاح بنيوي، لا زخرفي.
| الخاصية | نتيجة اصطلاح 0 / 1 |
|---|---|
y.mean() | يعطي مباشرة انتشار الفئة 1 |
| أرجحية بيرنولي | تُكتَب p^y · (1−p)^(1−y)، أساس log-loss (الفصل 061) |
predict_proba | يعيد مصفوفة (n, 2)؛ وعمود الفهرس 1 يحمل الفئة 1 |
| مصفوفة ارتباك | الترتيب [0, 1] يثبّت ترتيب TN، FP، FN، TP (الفصل 052) |
| دقة موجبة، استدعاء، F1 | محسوبة بالنسبة إلى الفئة 1 افتراضياً |
نقطة انتباه: ترتّب scikit-learn الفئات بترتيب تصاعدي، في السمة classes_. ومع وسوم نصية {"Fraude", "Normal"}، يضع الترتيب الأبجدي "Fraude" في الفهرس 0 — عكس القصد المهني. وترميز الهدف صراحة بـ 0/1 يزيل هذا الخطر.
| transaction_id | montant | pays_carte | pays_marchand | heure | canal | est_fraude |
|---|---|---|---|---|---|---|
| T-000001 | 42,90 | FR | FR | 14 | Boutique | 0 |
| T-000002 | 1 890,00 | FR | RU | 3 | En ligne | 1 |
| T-000003 | 12,50 | FR | FR | 9 | Boutique | 0 |
| T-000004 | 7,20 | FR | FR | 19 | En ligne | 0 |
| T-000005 | 2 450,00 | FR | US | 4 | En ligne | 1 |
import pandas as pd
df = pd.read_csv("transactions.csv")
y = df["est_fraude"]
print(y.shape)
print(y.dtype)
print(sorted(y.unique()))
print(y.value_counts(normalize=True).round(4))(284807,)
int64
[0, 1]
est_fraude
0 0.9983
1 0.0017
Name: proportion, dtype: float64التفسير: y متجه أحادي البعد طوله n، قيمة لكل ملاحظة، بصيغتين مرمَّزتين 0 و1. وتمثّل الفئة الموجبة 0,17 % من الملاحظات: المسألة شديدة الاختلال، وهو ما يقصي الدقة كمقياس قيادة ويفرض معالجة الفصلين 050 و051.
التعريف الدقيق
في مسألة ثنائية، الفئة الموجبة هي تلك التي بالنسبة إليها تُعرَّف أعداد مصفوفة الارتباك — موجبات صحيحة، موجبات كاذبة، سوالب كاذبة — وبالتالي المقاييس غير المتماثلة المشتقة منها: دقة موجبة، استدعاء، نوعية، F-بيتا.
ترجمة إلى اللغة اليومية
الفئة الموجبة هي التي يُكلَّف النموذج بكشفها. وكلمة «موجب» لا تحمل أي دلالة مواتية: كشف موجب نتيجة سيئة للمريض.
قاعدة التسمية
الفئة الموجبة، باصطلاح مهني، هي فئة الاهتمام: الحدث النادر أو المكلف أو القابل للفعل — احتيال، تعثر دفع، مرض، مغادرة زبون، عطل. وهي تتطابق في الغالبية العظمى من الحالات مع الفئة الأقلية.
نقطة انتباه
هذه التسمية قرار نمذجة صريح. وتركها تعتمد على الترتيب الأبجدي للوسوم ينتج مقاييس محسوبة صحيحاً لكن مفسَّرة بعكس المعنى.
عكس الفئة الموجبة لا يغيّر النموذج، لكنه يغيّر معنى كل المقاييس غير المتماثلة.
| المقدار | أثر عكس الفئة الموجبة |
|---|---|
| نموذج متعلَّم، حد قرار | دون تغيّر |
| دقة (accuracy) | دون تغيّر — مقياس متماثل |
| دقة موجبة، استدعاء، F1 | تتغيّر قيمها: تنصبّ على الفئة الأخرى |
| استدعاء ونوعية | يتبادلان |
| موجبات كاذبة وسوالب كاذبة | يتبادلان |
| ROC-AUC | يصبح 1 − AUC |
| PR-AUC | يتغيّر جذرياً: ينتقل خط الأساس من انتشار فئة إلى الأخرى |
النتيجة التشغيلية: استدعاء معلَن بـ 0,92 بلا معنى ما لم تُسمَّ الفئة الموجبة. وكل إعادة تقديم لنتائج تصنيف ثنائي يجب أن تصرّح بها صراحة.
يعلن مختبر أن اختباره «يكشف 95 % من الحالات». والجملة غير قابلة للاستغلال ما لم يُعلَم ما يُكشَف.
إذا تعلق الأمر بكشف المرضى، فـ 95 % هو الاستدعاء على فئة «مريض»: خمسة مرضى من مئة يُفوَّتون.
وإذا تعلق الأمر بكشف الأصحاء، فـ 95 % هو الاستدعاء على فئة «سليم»، أي النوعية: خمسة أصحاء من مئة يُقلَقون خطأ، ويبقى معدّل المرضى المفوتين مجهولاً تماماً.
والعدد نفسه، المحسوب على النموذج نفسه، يصف واقعين سريريين بلا علاقة. وتسمية الفئة الموجبة شرط قابلية تفسير الرقم.
نقطة أساسية: خطوة التصنيف بالمعنى الضيق هي المقارنة بالعتبة، لاحقة للنموذج؛ والنموذج نفسه ينتج مقداراً متصلاً. وهذا التمييز يؤسس الفقرة 6 من هذا الفصل.
التعريف الدقيق
تصنيف بوسم وحيد حيث K > 2، والمجموعة C = {c_1, ..., c_K} شاملة — كل ملاحظة تقبل وسماً في C — ومتنافية — ملاحظة تقبل واحداً بالضبط. شكلياً Y = C، وΣ_k P(Y = c_k | X = x) = 1 لكل x.
ويُتحدَّث أيضاً عن تصنيف اسمي للتأكيد على أن C غير مزوَّدة بأي علاقة ترتيب.
ترجمة إلى اللغة اليومية
أكثر من إجابتين ممكنتين، إجابة واحدة لكل ملاحظة، ولا إجابة «أعلى» من أخرى.
نقطة انتباه
الشمول والتنافي فرضيتان متميّزتان، كلتاهما قابلة للتكذيب على البيانات. وتسمية تتضمّن صيغة «آخر» تلبي الشمول بثمن فئة متغايرة صعبة النمذجة.
لا ينصبّ التمييز على عدد الفئات بل على عدد الوسوم المسندة إلى ملاحظة.
| المعيار | متعدد الفئات | متعدد الوسوم |
|---|---|---|
عدد الفئات الممكنة K | K > 2 | K ≥ 2 |
| عدد الوسوم لكل ملاحظة | 1 بالضبط | 0 أو 1 أو عدة |
| تنافي الفئات | نعم، بالفرضية | لا |
شكل y الخام | (n,) | (n, K) |
| مجموع المؤشرات على صف | دائماً 1 | بين 0 وK |
| مجموع الاحتمالات المتنبَّأ بها | 1، قيد softmax | غير مقيَّد |
اختبار تشغيلي: صياغة السؤال المهني بأداة التعريف. «ما هو سبب هذه التذكرة؟» يشير إلى مسألة متعددة الفئات. «ما هي أسباب هذه التذكرة؟» يشير إلى مسألة متعددة الوسوم.
| ticket_id | canal | longueur_texte | client_premium | anciennete_mois | categorie |
|---|---|---|---|---|---|
| TK-0001 | Courriel | 412 | 0 | 14 | Facturation |
| TK-0002 | Téléphone | 87 | 1 | 61 | Technique |
| TK-0003 | Formulaire | 235 | 0 | 3 | Commercial |
| TK-0004 | Courriel | 1 104 | 1 | 28 | Résiliation |
| TK-0005 | Téléphone | 156 | 0 | 9 | Technique |
y = df["categorie"]
print(y.shape)
print(y.nunique())
print(y.value_counts())(12000,)
4
categorie
Technique 5184
Facturation 3612
Commercial 2076
Résiliation 1128
Name: count, dtype: int64التفسير: يبقى y متجه شكل (n,)، تماماً كما في الحالة الثنائية؛ وعدد الصيغ وحده يتغيّر. والانتقال من الثنائي إلى متعدد الفئات لا يعدّل بنية y. وتتراوح الأعداد من 1 128 إلى 5 184، أي نسبة 4,6: الاختلال معتدل لكنه يفرض بالفعل تفضيل المتوسطات الكلية على الجزئية حتى لا تُحجَب فئة Résiliation (الفصل 065).
بعض الخوارزميات ثنائية جوهرياً — وآلات المتجهات الداعمة (الفصل 041) المثال المعياري. ويتيح مخططان للتقليل عندئذ معالجة K فئات بمصنِّفات ثنائية.
واحد-ضد-الكل (One-vs-Rest، OvR، أيضاً One-vs-All)
يُدرَّب K مصنِّف ثنائي؛ ويعارض المصنِّف k الفئة c_k لاتحاد كل الفئات الأخرى. وعند التنبؤ، يُحتفَظ بـ argmax_k s_k(x).
واحد-ضد-واحد (One-vs-One، OvO)
يُدرَّب مصنِّف لكل زوج فئات، أي K(K−1)/2 مصنِّفاً؛ ولا يُدرَّب المصنِّف (j, k) إلا على ملاحظات c_j أو c_k. وعند التنبؤ، يصوّت كل مصنِّف وتفوز الفئة الأغلبية.
ترجمة إلى اللغة اليومية
واحد-ضد-الكل: «هل هذا قط، نعم أم لا؟»، ثم «هل هذا كلب، نعم أم لا؟»؛ نحتفظ بالإجابة الأكثر ثقة. واحد-ضد-واحد: ننظّم بطولة مباريات بين كل الأزواج ونعدّ الانتصارات.
نقطة انتباه
تأتي درجات مصنِّفات OvR الـ K من نماذج مدرَّبة منفصلة، على مسائل صعوبة وانتشار مختلفة. وقابليتها للمقارنة المباشرة بـ argmax غير مضمونة: وهذا الضعف النظري المعترَف به للاستراتيجية.
| المعيار | واحد-ضد-الكل (OvR) | واحد-ضد-واحد (OvO) |
|---|---|---|
| عدد المصنِّفات | K | K(K−1)/2 |
لـ K = 4 / 10 / 100 | 4 / 10 / 100 | 6 / 45 / 4 950 |
| حجم كل مسألة فرعية | n ملاحظة | نحو 2n/K ملاحظة |
التكلفة الكلية، خوارزمية خطية في n | O(K · n) | O(K · n) |
التكلفة الكلية، خوارزمية تربيعية في n | O(K · n²) | O(n²) |
| اختلال مُدخَل | قوي: فئة واحدة ضد K−1 | لا شيء بين فئتي الزوج |
| مناطق غموض | لا مصنِّف موجب أو عدة | أصوات دائرية: أ يهزم ب، ب يهزم ج، ج يهزم أ |
قراءة الجدول: ينمو عدد النماذج تربيعياً في OvO، لكن كل نموذج لا يُدرَّب إلا على كسر من البيانات. ولخوارزمية تكلفة تدريبها تربيعية في n — حالة SVM بنواة — يكون OvO إذن إجمالاً أقل تكلفة من OvR رغم عدد نماذجه الأعلى. وهذا سبب احتفاظ scikit-learn بـ OvO افتراضياً لـ SVC، وOvR لـ LinearSVC، الذي تكلفته خطية.
from sklearn.datasets import make_classification
from sklearn.multiclass import OneVsRestClassifier, OneVsOneClassifier
from sklearn.svm import SVC
X, y = make_classification(n_samples=600, n_features=8, n_informative=6,
n_classes=6, n_clusters_per_class=1, random_state=0)
ovr = OneVsRestClassifier(SVC()).fit(X, y)
ovo = OneVsOneClassifier(SVC()).fit(X, y)
print("K :", len(set(y)))
print("OvR nb estimateurs :", len(ovr.estimators_))
print("OvO nb estimateurs :", len(ovo.estimators_))K : 6
OvR nb estimateurs : 6
OvO nb estimateurs : 15التفسير: 6 مصنِّفات مقابل 6 × 5 / 2 = 15. والتفكيك آلية داخلية: في الحالتين يبقى y متجه (n,) ويعيد predict وسماً وحيداً.
| الخوارزمية | معالجة متعدد الفئات | الفصل |
|---|---|---|
| شجرة قرار | أصلي — توزيع فئات لكل ورقة | 037 |
| غابة عشوائية | أصلي — تجميع أصوات الأشجار | 038 |
| Gradient boosting | أصلي، عموماً بـ K مجموعات أشجار | 039 |
| أقرب k جيران | أصلي — تصويت أغلبي في الجوار | 040 |
| Naive Bayes | أصلي — argmax للاحتمال البعدي | 042 |
| انحدار لوجستي | أصلي بصياغة متعددة الحدود (softmax) | 036 |
| بيرسبترون متعدد الطبقات | أصلي — K عصبونات خرج وsoftmax | 043 |
SVM بنواة (SVC) | تفكيك OvO | 041 |
SVM خطي (LinearSVC) | تفكيك OvR | 041 |
نقطة انتباه: وجود معالجة أصلية لا يغني عن التحقّق من الاختلال بين الفئات. فمسألة بـ 12 فئة تركّز ثلاث منها 90 % من الأعداد تطرح، فئة بفئة، الصعوبات نفسها لمسألة ثنائية مختلة.
التعريف الدقيق
في نمطية مقاييس القياس التي اقترحها S. S. Stevens (1946)، يُدعى مقياس ترتيبياً عندما تكون علاقة الترتيب بين الصيغ معرَّفة ودالة، لكن المسافة بين صيغتين متتاليتين ليست كذلك. والعمليات الجائزة هي المقارنة (<، >، =)، والرتب، والوسيط والمكمّلات؛ والمجموع والمتوسط الحسابي والفرق ليست كذلك.
ويضيف مقياس الفترة، الأعلى مباشرة، معنى الفروق؛ ويضيف مقياس النسبة صفراً مطلقاً.
ترجمة إلى اللغة اليومية
نعلم ترتيب الصيغ من الأضعف إلى الأقوى، لكننا لا نعلم بكم تختلف.
نقطة انتباه
ترميز متغير ترتيبي بأعداد صحيحة 0, 1, 2, 3 عملية ترميز مشروعة. ومعالجة هذه الأعداد بعدئذ ككميات مقيسة ليست كذلك: فالترميز ينشئ مترية لا يحملها القياس.
التعريف الدقيق
تصنيف بوسم وحيد حيث K > 2 وC مزوَّدة بـ ترتيب كلي c_1 ≺ c_2 ≺ ... ≺ c_K دال للمجال، دون أن تكون مسافة معرَّفة على C. ويجب أن تعكس دالة الخسارة هذا الترتيب: يجب أن تفوق تكلفة خلط c_1 وc_K تكلفة خلط c_1 وc_2.
ترجمة إلى اللغة اليومية
فئات مرتَّبة من الأضعف إلى الأقوى، حيث الخطأ بكثير أخطر من الخطأ بقليل.
نقطة انتباه
التسمية الإنجليزية المعتادة ordinal regression، وهو ما يغذي خلطاً مع الانحدار بمعنى الفصل 010. وتبقى المهمة تصنيفاً: فضاء الوصول منتهٍ.
| dossier_id | revenu_annuel | taux_endettement | incidents_12m | anciennete_bancaire | niveau_risque |
|---|---|---|---|---|---|
| D-0001 | 54 000 | 0,21 | 0 | 12 | Faible |
| D-0002 | 28 500 | 0,47 | 1 | 3 | Moyen |
| D-0003 | 19 200 | 0,63 | 4 | 1 | Critique |
| D-0004 | 41 000 | 0,38 | 2 | 7 | Élevé |
| D-0005 | 67 300 | 0,15 | 0 | 21 | Faible |
الترتيب Faible ≺ Moyen ≺ Élevé ≺ Critique يحمله المجال. ولا بيان يقول إن ملفاً Critique «أخطر مرتين» من ملف Moyen.
import pandas as pd
from pandas.api.types import CategoricalDtype
ordre = CategoricalDtype(
categories=["Faible", "Moyen", "Élevé", "Critique"], ordered=True
)
y = df["niveau_risque"].astype(ordre)
print(y.dtype)
print(y.cat.codes.head().tolist())
print((y > "Moyen").head().tolist())category
[1, 0, 3, 2, 1]
[False, False, True, True, False]التفسير: يبقى y متجه (n,)، كما في الثنائي ومتعدد الفئات. والفرق يحمله النوع: ordered=True يجعل المقارنة y > "Moyen" صحيحة وقابلة للتفسير. والرموز 0 إلى 3 رتب، لا كميات.
| المعالجة | ما يُفترَض | ما يُفقَد أو يُدخَل خطأ |
|---|---|---|
| كـ متعدد فئات اسمي | لا ترتيب بين الفئات | فقدان معلومة: كل الخلطات متكافئة؛ التنبؤ بـ Faible بدل Critique يكلف بقدر التنبؤ بـ Élevé بدل Critique |
| كـ انحدار على الرموز 0-3 | فروق متساوية بين مستويات متتالية وهدف فترة | فرضية بلا أساس: لا شيء يثبت أن الفرق Faible → Moyen يساوي الفرق Élevé → Critique؛ والخرج المتصل يفرض إضافة عتبات تقريب اعتباطية |
| كـ ترتيبي | ترتيب كلي، مسافات غير معرَّفة | معالجة مطابقة لطبيعة القياس |
يُقاس فقدان معلومة المعالجة متعددة الفئات مباشرة.
import numpy as np
from sklearn.metrics import accuracy_score, mean_absolute_error, cohen_kappa_score
y_true = np.array([0, 1, 2, 3, 2, 1, 0, 3, 2, 1])
pred_A = np.array([0, 1, 2, 3, 2, 1, 0, 3, 1, 1]) # خطأ برتبة واحدة
pred_C = np.array([0, 1, 2, 3, 2, 1, 0, 0, 2, 1]) # خطأ بثلاث رتب
for nom, p in [("A — erreur de 1 rang", pred_A), ("C — erreur de 3 rangs", pred_C)]:
print(nom)
print(" accuracy :", accuracy_score(y_true, p))
print(" MAE rangs :", round(mean_absolute_error(y_true, p), 3))
print(" QWK :", round(cohen_kappa_score(y_true, p, weights="quadratic"), 3))A — erreur de 1 rang
accuracy : 0.9
MAE rangs : 0.1
QWK : 0.952
C — erreur de 3 rangs
accuracy : 0.9
MAE rangs : 0.3
QWK : 0.571التفسير: يحصل التنبؤان على الدقة نفسها، 0,90، في حين يخلط الثاني ملفاً Critique بملف Faible — أغلى خطأ في المجال. والدقة، مقياس تصنيف اسمي، عمياء بنيوياً عن مدى الخطأ. ويميّزهما MAE على الرتب فوراً، بنسبة 1 إلى 3، وينتقل كابا المرجَّح تربيعياً من 0,952 إلى 0,571.
نقطة انتباه: MAE على رتب مؤشر مقارنة بين نماذج، لا كمية مهنية. ولا يُفسَّر كـ «0,3 مستوى خطر في المتوسط»، إذ مستوى الخطر غير قابل للقياس.
أماكن الأول والثاني والثالث مرتَّبة بصرامة: لا أحد ينازع في أن الأول يسبق الثاني.
ومع ذلك لا شيء يجيز الكتابة أن الفرق بين الأول والثاني يساوي الفرق بين الثاني والثالث. في سباق 100 متر، يمكن أن يتقدم الأول على الثاني بمئتي ثانية والثاني على الثالث بنصف ثانية.
ومعالجة الرتب كأعداد تعود إلى الجزم بأن هذين الفرقين متطابقان. وتجاهلهما تماماً يعود إلى الجزم بأن إنهاء الثالث بدل الأول ليس أكثر أسفاً من إنهاء الثاني. والتصنيف الترتيبي الصياغة التي ترفض هذين الخطأين.
| المقاربة | المبدأ | ملاحظة |
|---|---|---|
| نموذج أرجحية تناسبية (McCullagh، 1980) | نموذج لوجستي تراكمي: K−1 عتبة تتقاسم متجه معاملات واحد | مرجع إحصائي؛ فرضية تناسب الأرجحية للتحقّق |
| تفكيك تراكمي ثنائي (Frank وHall، 2001) | K−1 مصنِّف ثنائي «y > c_k؟»، احتمالات معاد تركيبها بالفرق | يتيح استعمال أي مصنِّف ثنائي احتمالي |
| انحدار ثم تجزئة | انحدار على الرتب، ثم تقطيع بعتبات محسَّنة | بسيط وغالباً فعّال؛ يفترض ضمنياً تساوي المسافات |
| متعدد فئات بتكاليف غير متماثلة | متعدد فئات كلاسيكي بمصفوفة تكاليف تجازي الفروق الكبيرة | يعيد إدخال الترتيب بدالة التكلفة |
مقاييس ملائمة: MAE أو RMSE على الرتب (الفصلان 067 و069)، كابا مرجَّح تربيعي (Quadratic Weighted Kappa)، مصفوفة ارتباك تُقرَأ برصد التركيز حول القطر (الفصل 052).
التعريف الدقيق
مهمة فضاء وصولها Y = {0, 1}^K، أي مجموعة أجزاء C = {c_1, ..., c_K}. ويرتبط بكل ملاحظة x متجه ثنائي y = (y_1, ..., y_K) حيث y_k = 1 إذا انطبق الوسم c_k. ولا قيد على Σ_k y_k، الذي يمكن أن يساوي 0 (لا وسم) حتى K (كلها).
والوسوم ليست متنافتة ولا مستقلة: ونمذجة ارتباطاتها تشكّل الصعوبة الخاصة للمسألة.
ترجمة إلى اللغة اليومية
يمكن لملاحظة أن تتلقى عدة وسوم معاً، أو لا شيء. وكل وسم سؤال «نعم أم لا» مستقل في الظاهر، لكن الإجابات مرتبطة فيما بينها.
نقطة انتباه
يتميّز متعدد الوسوم عن متعدد الفئات–متعدد المخارج (multiclass-multioutput)، حيث يُتنبَّأ بعدة متغيرات هدف، كل منها متعدد الفئات نفسه. ومتعدد الوسوم الحالة الخاصة حيث كل المخارج ثنائية.
| photo_id | luminance_moy | teinte_dominante | visages_detectes | plage | coucher_de_soleil | personne | animal |
|---|---|---|---|---|---|---|---|
| P-0001 | 182 | Orange | 0 | 1 | 1 | 0 | 0 |
| P-0002 | 95 | Gris | 2 | 0 | 0 | 1 | 0 |
| P-0003 | 164 | Bleu | 1 | 1 | 0 | 1 | 1 |
| P-0004 | 47 | Vert | 0 | 0 | 0 | 0 | 0 |
| P-0005 | 201 | Orange | 3 | 1 | 1 | 1 | 0 |
يمكن لصورة أن تكون معاً شاطئاً وغروباً وتتضمّن شخصاً. والصورة P-0004 لا تحمل أيّاً من الوسوم الأربعة: المتجه المعدوم ملاحظة صحيحة، وهو مستحيل في متعدد الفئات.
from sklearn.preprocessing import MultiLabelBinarizer
etiquettes = [
["plage", "coucher_de_soleil"],
["personne"],
["plage", "personne", "animal"],
[],
]
mlb = MultiLabelBinarizer(
classes=["animal", "coucher_de_soleil", "personne", "plage"]
)
Y = mlb.fit_transform(etiquettes)
print(mlb.classes_)
print(Y)
print(Y.shape)
print(Y.sum(axis=1))['animal' 'coucher_de_soleil' 'personne' 'plage']
[[0 1 0 1]
[0 0 1 0]
[1 0 1 1]
[0 0 0 0]]
(4, 4)
[2 1 3 0]التفسير: Y مصفوفة (n, K)، لا متجه بعد. ومجموع كل صف يساوي 2, 1, 3, 0: وهو غير مقيَّد بـ 1.
هدف متعدد الفئات مرمَّز بمؤشرات (one-hot) ينتج هو أيضاً مصفوفة (n, K). والخلط شائع والتمييز الشكلي مع ذلك واضح.
from sklearn.preprocessing import LabelBinarizer
lb = LabelBinarizer()
print(lb.fit_transform(["Technique", "Facturation", "Commercial", "Technique"]))[[0 0 1]
[0 1 0]
[1 0 0]
[0 0 1]]| المعيار | متعدد فئات مرمَّز بمؤشرات | متعدد وسوم |
|---|---|---|
| شكل المصفوفة | (n, K) | (n, K) |
| مجموع كل صف | 1 بالضبط | بين 0 وK |
| متجه معدوم جائز | لا | نعم |
| خرج النموذج | softmax، احتمالات مجموعها 1 | K سيغموديات مستقلة |
| دالة خسارة معتادة | إنتروبيا متقاطعة فئوية | مجموع K إنتروبيات متقاطعة ثنائية |
| إعادة بناء الوسم | argmax على الصف | عتبة مستقلة لكل عمود |
معيار التعرّف: Y.sum(axis=1) ثابت ومساوٍ لـ 1 يشير إلى متعدد فئات مرمَّز؛ وأي توزيع آخر يشير إلى متعدد وسوم.
هذا المخطط هو الصلة الثنائية (binary relevance): K مصنِّفات ثنائية مستقلة. وهو بسيط وقابل للتوازي، لكنه يتجاهل بالبناء الارتباطات بين الوسوم — الورود المشترك المتكرر لـ plage وcoucher_de_soleil لا يُستغَل قط. وتعالج سلاسل المصنِّفات (Read وآخرون، 2011) ذلك بإضافة تنبؤات الوسوم السابقة إلى المتغيرات التوضيحية للتالية.
يمكن لتنبؤ متعدد الوسوم أن يكون صحيحاً جزئياً، وهو وضع لا يوجد لا في الثنائي ولا في متعدد الفئات. ويجب أن تأخذ المقاييس ذلك في الحسبان.
import numpy as np
from sklearn.metrics import accuracy_score, hamming_loss, f1_score
Y_true = np.array([[1,1,0,0], [0,0,1,0], [1,0,1,1], [0,0,0,1], [1,1,1,0]])
Y_pred = np.array([[1,1,0,0], [0,0,1,0], [1,0,1,0], [0,1,0,1], [1,0,1,0]])
print("exactitude exacte :", accuracy_score(Y_true, Y_pred))
print("hamming loss :", round(hamming_loss(Y_true, Y_pred), 3))
print("F1 micro :", round(f1_score(Y_true, Y_pred, average="micro"), 3))
print("F1 macro :", round(f1_score(Y_true, Y_pred, average="macro"), 3))exactitude exacte : 0.4
hamming loss : 0.15
F1 micro : 0.842
F1 macro : 0.792التفسير: لا تمنح الدقة الدقيقة (subset accuracy) النقطة إلا إذا كانت كل وسوم الصف صحيحة؛ فتسقط إلى 0,40 في حين أن 85 % من قرارات الوسم بوسم صحيحة. وهذان الرقمان يصفان النموذج نفسه وليسا متناقضين: إنهما يجيبان عن سؤالين مختلفين.
| المقياس | ما يقيسه | الاستعمال الموصى به |
|---|---|---|
| دقة دقيقة (subset accuracy) | نسبة الصفوف الصحيحة بالكامل | شديد الصرامة؛ ذو صلة إذا استُهلك الخرج دفعة واحدة |
| Hamming loss | نسبة الوسوم الفردية الخاطئة | مؤشر كلي متسامح مع الأخطاء الجزئية |
| F1 جزئي | يجمع الأعداد على كل الوسوم | تهيمن عليه الوسوم المتكررة |
| F1 كلي | متوسط F1 حسب الوسم | يمنح وزناً متساوياً للوسوم النادرة |
| F1 حسب الوسم | تفصيل وسم بوسم | تشخيص؛ ضروري للقيادة |
نقطة انتباه: شبه كل وسوم مسألة متعددة الوسوم واقعية نادرة. ونموذج يتنبأ منهجياً بالمتجه المعدوم غالباً ما يحصل على hamming loss ممتازة. والقراءة وسم بوسم ليست اختيارية.
هذا فخ التسمية الأكثر شيوعاً في المجال. يحمل الانحدار اللوجستي كلمة «انحدار» ويحل مسألة تصنيف.
التعريف الدقيق
نموذج خطي معمَّم (Nelder وWedderburn، 1972) لجواب بقانون بيرنولي، دالة ربطه اللوجيت. ويفترض النموذج
logit(p(x)) = ln( p(x) / (1 − p(x)) ) = β_0 + β_1 x_1 + ... + β_p x_p
حيث p(x) = P(Y = 1 | X = x). وبعكس الربط، نحصل على
p(x) = 1 / (1 + exp(−(β_0 + β·x)))، أي الدالة اللوجستية مطبَّقة على تركيب خطي للمتغيرات التوضيحية. وتُقدَّر المعاملات بتعظيم الأرجحية.
ترجمة إلى اللغة اليومية
نلائم مستقيماً، لا على الفئة نفسها، بل على لوغاريتم أرجحية الحدث؛ ثم نحوّل هذه النتيجة إلى احتمال بمنحنى S محصور بين 0 و1.
نقطة انتباه
الخرج الأصلي للنموذج احتمال، لا فئة. ولا يظهر التصنيف إلا في الخطوة التالية، بمقارنة بعتبة (الفصل 062). فالنموذج إذن انحدار على كمية متصلة — الاحتمال — في خدمة مهمة تصنيف.
| الخطوة | المساهمة | الأثر على التسمية |
|---|---|---|
| Verhulst، 1838-1845 | يقدّم الدالة اللوجستية لنمذجة نمو مجتمع تحت قيد | يوفّر الصفة «لوجستي»، التي تشير إلى منحنى S |
| Berkson، 1944 | يصوغ مصطلح logit ويروّج النموذج في الإحصاء الحيوي | يثبّت ربط اللوجيت كمعيار |
| Cox، 1958 | يصوغ تحليل بيانات ثنائية بهذا النموذج | انتشار في الإحصاء التطبيقي |
| Nelder وWedderburn، 1972 | إطار موحِّد لـ النماذج الخطية المعمَّمة | يصنّف النموذج في عائلة «انحدار»، بالنسب مع الانحدار الخطي |
فكلمة «انحدار» إذن إرث العائلة الإحصائية للنموذج — نموذج خطي ملائم على تحويل للتوقّع الشرطي — لا وصف للمهمة المحلولة.
from sklearn.base import is_classifier, is_regressor
from sklearn.linear_model import LogisticRegression, LinearRegression
print(is_classifier(LogisticRegression()), is_regressor(LogisticRegression()))
print(is_classifier(LinearRegression()), is_regressor(LinearRegression()))
print(hasattr(LogisticRegression(), "predict_proba"))True False
False True
Trueالتفسير: تصنّف scikit-learn LogisticRegression في الوحدة linear_model — حسب العائلة الرياضية — لكنها تعرضه كـ مصنِّف: يعيد is_classifier القيمة True، والصنف يرث من ClassifierMixin، ويملك predict_proba، ويعيد predict وسوماً ويحسب score دقة. وترتيب الوحدة يترجم القرابة الخوارزمية؛ والواجهة تترجم المهمة.
import numpy as np
X = np.array([[10.0], [20.0], [30.0], [40.0], [50.0], [60.0]])
y = np.array([0, 0, 0, 1, 1, 1])
clf = LogisticRegression().fit(X, y)
print(clf.classes_)
print(clf.predict_proba(np.array([[25.0], [45.0]])).round(3))
print(clf.predict(np.array([[25.0], [45.0]])))[0 1]
[[0.997 0.003]
[0.003 0.997]]
[0 1]التفسير: يعيد predict_proba مصفوفة (2, 2) احتمالات مجموعها 1 لكل صف — الخرج الأصلي، المتصل. ويعيد predict وسوم فئة 0 و1 — الخرج بعد عتبة 0,5. والآلية الكاملة معالَجة في الفصل 036.
| الاسم | الطبيعة الحقيقية | ملاحظة |
|---|---|---|
LogisticRegression | مصنِّف | ثنائي، أو متعدد الفئات بصياغة متعددة الحدود |
RidgeClassifier | مصنِّف | انحدار Ridge على هدف مرمَّز −1 / +1، ثم إشارة |
SGDClassifier | مصنِّف | محسِّن، لا عائلة نماذج؛ الخسارة تحدد النموذج |
LinearSVC | مصنِّف | «C» لـ Classifier؛ LinearSVR شكله الانحداري |
LinearRegression | منحدر | هدف عددي متصل |
| Ordinal regression | مصنِّف | مصطلح راسخ للتصنيف الترتيبي (الفقرة 4) |
KNeighborsClassifier / KNeighborsRegressor | مصنِّف / منحدر | الخوارزمية نفسها، مهمتان، صنفان متميّزان |
قاعدة مهنية: يشير اسم صنف إلى عائلته الرياضية أو تاريخه؛ وطبيعة المتغير الهدف وحدها تحدد المهمة. وعند الشك، يحسم is_classifier وحضور predict_proba.
| المعيار | ثنائي | متعدد الفئات | ترتيبي | متعدد الوسوم |
|---|---|---|---|---|
| عدد الفئات | K = 2 | K > 2 | K > 2 | K ≥ 2 |
| وسوم لكل ملاحظة | 1 | 1 | 1 | 0 إلى K |
| ترتيب على الفئات | بلا موضوع | لا | نعم، بلا مسافة | بلا موضوع |
شكل y | (n,) | (n,) | (n,) مرتَّب | (n, K) ثنائي |
| الخرج الأصلي للنموذج | احتمال 1 | K احتمالات softmax | احتمالات تراكمية أو رتبة | K احتمالات مستقلة |
| مجموع الاحتمالات | 1 | 1 | 1 | غير مقيَّد |
| مثال | معاملة احتيالية أم لا | توجيه تذكرة نحو فريق | مستوى خطر ائتمان | وسم صورة |
| مقاييس ملائمة | دقة موجبة، استدعاء، F1، ROC-AUC، PR-AUC | دقة، F1 كلي / جزئي / مرجَّح، مصفوفة ارتباك | MAE على رتب، كابا مرجَّح تربيعي، مصفوفة ارتباك | Hamming loss، F1 جزئي / كلي، F1 حسب الوسم، دقة دقيقة |
| مقياس يُحظَر | دقة إن كان الاختلال بارزاً | دقة إن كان الاختلال بارزاً | دقة وحدها: عمياء عن المدى | دقة دقيقة وحدها: شديدة الصرامة |
| فصول الإحالة | 052 إلى 064 | 065 | 067، 069، 052 | 065، 059 |
ثلاثة ثوابت للحفظ:
y نفسه؛ ويفصلها عدد الصيغ وحضور ترتيب وحدهما.المعيار ليس عدد الفئات بل عدد الوسوم لكل ملاحظة. فمسألة بثلاث فئات يمكن لملاحظة أن تحمل وسمين فيها متعددة الوسوم، لا متعددة الفئات.
الصياغة الصحيحة: «يفترض متعدد الفئات التنافي المتبادل للفئات؛ وما إن يمكن لملاحظة أن تحمل عدة وسوم معاً، فالمسألة متعددة الوسوم ويصبح الهدف مصفوفة (n, K).»
ترميز Faible, Moyen, Élevé, Critique بـ 0, 1, 2, 3 ثم الانحدار يفترض أن الفروق بين مستويات متتالية متساوية. ومقياس ترتيبي لا يحمل هذه المعلومة (Stevens، 1946).
الصياغة الصحيحة: «الانحدار على الرتب تقريب عملي يجب التصريح بفرضية تساوي مسافاته، وتبريرها إن أمكن بالمجال؛ وهو ليس المعالجة المرجعية.»
تجعل المعالجة الاسمية كل الخلطات متكافئة. فيُعدّ خلط Critique وFaible عندئذ بمقام خلط Élevé وCritique، في حين تختلف التكلفة المهنية برتبة أسية.
الصياغة الصحيحة: «المعالجة الاسمية لهدف ترتيبي مقبولة كمرجع انطلاق، بشرط تكميل الدقة بمقياس حسّاس لمدى الخطأ، مثل MAE على الرتب أو كابا المرجَّح تربيعياً.»
يحيل الاسم إلى عائلة النماذج الخطية المعمَّمة ودالة Verhulst اللوجستية، لا إلى طبيعة المهمة. والهدف فئوي.
الصياغة الصحيحة: «الانحدار اللوجستي خوارزمية تصنيف. إنه ينحدر لوجيت احتمال على المتغيرات التوضيحية؛ وينتج قرار الفئة عن مقارنة هذا الاحتمال بعتبة.»
مع وسوم نصية، الترتيب الافتراضي لـ scikit-learn أبجدي. فيصبح "Fraude" عندئذ الفئة السالبة و"Normal" الفئة الموجبة: تُحسَب الدقة الموجبة والاستدعاء صحيحاً، لكن على الفئة التي لا تهم أحداً.
الصياغة الصحيحة: «تُسمَّى الفئة الموجبة صراحة كفئة الاهتمام، عموماً الحدث النادر والمكلف، وترافق هذه التسمية منهجياً إعادة تقديم المقاييس.»
تعالج الأشجار والغابات وطرائق boosting وKNN وNaive Bayes والانحدار اللوجستي متعدد الحدود والشبكات العصبية K > 2 أصلاً. ولا يخص التفكيك إلا الخوارزميات الثنائية جوهرياً.
الصياغة الصحيحة: «تفكيك واحد-ضد-الكل أو واحد-ضد-واحد آلية توافق لمصنِّفات ثنائية، تطبقها المكتبة بشفافية، وليست خطوة إلزامية لمتعدد الفئات.»
تتطلب الدقة الدقيقة أن تكون كل وسوم ملاحظة صحيحة معاً. وعلى K وسوم، تسقط آلياً عندما ينمو K، حتى لنموذج كل قراره الفردي جيد.
الصياغة الصحيحة: «يُقاد نموذج متعدد الوسوم على مجموعة مقاييس: hamming loss للرؤية الكلية، F1 كلي للحساسية للوسوم النادرة، وF1 حسب الوسم للتشخيص.»
الأسئلة الثلاثة للتأهيل
1. عدة وسوم لكل ملاحظة؟ نعم -> متعدد الوسوم
2. كم فئة متنافتة؟ K = 2 -> ثنائي
3. هل الفئات مرتَّبة؟ نعم -> ترتيبي
لا -> متعدد الفئات
شكل الهدف
ثنائي y شكله (n,) قيم 0 / 1
متعدد الفئات y شكله (n,) K صيغ غير مرتَّبة
ترتيبي y شكله (n,) K صيغ مرتَّبة، بلا مسافة
متعدد الوسوم Y شكله (n, K) مصفوفة ثنائية، مجموع صف حر
التوقيع الشكلي لمتعدد الوسوم
Y.sum(axis=1) ثابت ومساوٍ لـ 1 -> متعدد فئات مرمَّز
Y.sum(axis=1) أيّاً كان -> متعدد وسوم
الفئة الموجبة (ثنائي)
تُسمَّى دائماً صراحة: الحدث النادر، المكلف، القابل للفعل.
العكس يبادل الاستدعاء والنوعية ويحوّل AUC إلى 1 - AUC.
هدف ترتيبي
معالَج كمتعدد فئات: فقدان الترتيب، كل الأخطاء متكافئة.
معالَج كانحدار: فرضية فروق متساوية، بلا أساس (Stevens 1946).
معالجة مطابقة: نماذج تراكمية، مقاييس حسّاسة للفرق.
تفكيك متعدد الفئات
واحد-ضد-الكل : K مصنِّفات، مسائل فرعية مختلة
واحد-ضد-واحد : K(K-1)/2 مصنِّفات، مسائل فرعية حجم 2n/K
انحدار لوجستي
اسم موروث من الدالة اللوجستية (Verhulst) وعائلة
النماذج الخطية المعمَّمة (Nelder وWedderburn، 1972).
المهمة المحلولة: تصنيف. الخرج الأصلي: احتمال.
التفصيل في الفصل 036.قول الخلاصة
يُقرَأ نوع مهمة تصنيف على شكل المتغير الهدف لا على المفردات المستعمَلة: متجه بصيغتين يشير إلى مسألة ثنائية، ومتجه بـ
Kصيغ إلى مسألة متعددة الفئات — ترتيبية إذا رُتِّبت هذه الصيغ دون أن تُقاس — ومصفوفة ثنائية إلى مسألة متعددة الوسوم؛ واسم خوارزمية، مثل الانحدار اللوجستي، يخبر عن عائلته الرياضية، لا أبداً عن المهمة التي يحلها.
اختبارات مرتبطة
011.1-quiz-qualification-tache.md011.2-quiz-classification-binaire.md011.3-quiz-classification-multiclasse.md011.4-quiz-classification-ordinale.md011.5-quiz-classification-multilabel.md011.6-quiz-regression-logistique.md011.7-quiz-synthese-comparative.mdالفصل التالي: 012-cycle-de-vie-ml.md