F1-Score
درجة F1 هي المتوسط التوافقي للدقة والاستدعاء، لذا تظل منخفضة ما لم تكن القيمتان مرتفعتين. الصيغة وF-beta وF1 الكلي مقابل الجزئي واستخدامه في الكشف.
درجة F1 مقياس واحد يجمع بين الإحكام والاستدعاء بوصفه متوسطهما التوافقي: F1 = 2 × الإحكام × الاستدعاء / (الإحكام + الاستدعاء). وتتراوح قيمته بين 0 و1، ولا يبلغ 1 إلا عندما لا يكون للنموذج أي نتائج إيجابية كاذبة أو نتائج سلبية كاذبة. وينجذب المتوسط التوافقي إلى القيمة الأصغر بين مدخلاته، لذا تظل F1 منخفضة كلما انخفض الإحكام أو الاستدعاء، ما يجعلها المقياس الموجز المعتاد لـالمسائل غير المتوازنة، مثل كشف العيوب وفحص الاحتيال واسترجاع المستندات، حيث تكون الدقة مضللة. وتُسمى درجة F1 أيضًا درجة F المتوازنة أو مقياس F، وهي تساوي معامل Dice في أقنعة البكسلات الثنائية.
كيفية حساب درجة F1#
عند التعبير عنها بأعداد مصفوفة الالتباس، تكون F1 = 2TP / (2TP + FP + FN). ولا تظهر النتائج السلبية الحقيقية مطلقًا في المعادلة، لذا تقيس F1 مدى كفاءة النموذج في التعامل مع الفئة الإيجابية فقط. ويناسب ذلك المهام التي تكون فيها الحالات الإيجابية نادرة والسلبية قليلة الأهمية؛ أما عندما تكون النتائج السلبية الحقيقية مهمة، فيغطي معامل ارتباط ماثيوز أو الدقة المتوازنة الخانات الأربع كلها. وما يميز F1 عن المتوسط البسيط هو المتوسط التوافقي: فالنموذج الذي يبلغ إحكامه 1.0 واستدعاؤه 0.1 يكون متوسطه الحسابي 0.55، بينما تبلغ F1 لديه 0.18.
F-Beta ومتوسطات الفئات المتعددة#
تعطي F1 الإحكام والاستدعاء الوزن نفسه. أما درجة F-beta العامة فتتعامل مع الاستدعاء على أنه أهم من الإحكام بمقدار β، لذا تفضّل F2 الاستدعاء، كما في الفحص الطبي حيث تكون تكلفة تفويت الحالة مرتفعة، بينما تفضّل F0.5 الإحكام، كما في تصفية البريد العشوائي حيث تكون تكلفة الإنذار الكاذب مرتفعة.
عندما يكون عدد الفئات أكبر من اثنتين، تُحسب F1 لكل فئة ثم يُحسب المتوسط:
- Macro F1: المتوسط غير الموزون لدرجات الفئات، لذا تُحسب الفئة النادرة بقدر الفئة الشائعة.
- Weighted F1: متوسط درجات الفئات موزونًا بعدد الأمثلة الحقيقية في كل فئة.
- Micro F1: قيمة F1 واحدة محسوبة من قيم TP وFP وFN المجمعة عبر جميع الفئات. وهي تساوي الدقة في مهام التصنيف متعدد الفئات ذات التسمية الواحدة.
from sklearn.metrics import f1_score
# Imbalanced inspection labels: 8 good parts, 2 defective parts
y_true = ["ok"] * 8 + ["defect"] * 2
y_pred = ["ok"] * 7 + ["defect"] + ["defect", "ok"]
# F1 for each class, then two ways to average them
per_class = f1_score(y_true, y_pred, labels=["ok", "defect"], average=None)
print(f"F1 ok: {per_class[0]:.3f}, F1 defect: {per_class[1]:.3f}")
print(f"Macro F1: {f1_score(y_true, y_pred, average='macro'):.3f}")
print(f"Micro F1: {f1_score(y_true, y_pred, average='micro'):.3f}")يطبع البرنامج النصي قيمة F1 تبلغ 0.875 للقطع الجيدة و0.500 للعيوب، وقيمة Macro F1 تبلغ 0.688، وقيمة Micro F1 تبلغ 0.800. يصنّف النموذج 8 من أصل 10 قطع تصنيفًا صحيحًا، لذا تساوي Micro F1 دقته البالغة 0.80، وتكون Macro F1 أقل لأن فئة العيوب الضعيفة تُحسب بقدر الفئة الأكبر.
F1 في كشف الأجسام#
لكل كاشف قيمتا الدقة والاستدعاء عند كل عتبة ثقة، ولذلك يكون لكل كاشف أيضًا منحنى F1 بحسب مستوى الثقة. وتحدّد قمة هذا المنحنى عتبة الثقة التي تحقق أفضل توازن بين الاكتشافات الكاذبة والأجسام التي لم تُكتشف، وهي نقطة التشغيل الوحيدة التي يعمل عندها النموذج المنشور. ويكمل مقياس F1 مقياس متوسط الدقة المتوسطة (mAP)، الذي يدمج النتائج عبر جميع العتبات لترتيب النماذج. ويحفظ YOLO26 هذا المنحنى أثناء التحقق باسم BoxF1_curve.png، ويعرض الدقة والاستدعاء ودرجة F1 لكل فئة عند عتبة الثقة التي يبلغ عندها متوسط F1 ذروته.
from ultralytics import YOLO
# Load a pretrained YOLO26 nano detector
model = YOLO("yolo26n.pt")
# Validation sweeps confidence thresholds and saves BoxF1_curve.png
metrics = model.val(data="coco8.yaml")
# Precision, recall, and F1 at the confidence where mean F1 peaks
print(f"Precision: {metrics.box.mp:.3f}")
print(f"Recall: {metrics.box.mr:.3f}")
print(f"Mean F1: {metrics.box.f1.mean():.3f}")يحسب متوسط F1 متوسط قيم F1 لكل فئة، لذا قد يختلف قليلًا عن المتوسط التوافقي لمتوسطي الإحكام والاستدعاء المعروضين أعلاه.










