وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

درک منحنی های ROC با پایتون

0 77
زمان لازم برای مطالعه: 5 دقیقه


در عصر کنونی که علم داده / هوش مصنوعی در حال رونق است، درک چگونگی استفاده از یادگیری ماشینی در صنعت برای حل مشکلات پیچیده تجاری مهم است. به منظور انتخاب مدل یادگیری ماشینی که باید در تولید استفاده شود، یک معیار انتخاب انتخاب می‌شود که بر اساس آن مدل‌های مختلف یادگیری ماشین امتیازدهی می‌شوند.

یکی از پرکاربردترین معیارهای امروزه این است AUC-ROC منحنی (Area Under Curve – Receiver Operating Charteristics). وقتی درک خوبی از ماتریس سردرگمی و انواع مختلف خطاها وجود دارد، درک و ارزیابی منحنی‌های ROC بسیار آسان است.

در این مقاله به توضیح موضوعات زیر می پردازم:

  • مقدمه ای بر ماتریس سردرگمی و آمارهای مختلف محاسبه شده روی آی تی
  • تعاریف TP، FN، TN، FP
  • خطاهای نوع 1 و نوع 2
  • آمار محاسبه شده از Recall، Precision، F-Score
  • مقدمه ای بر منحنی AUC ROC
  • سناریوهای مختلف با منحنی ROC و انتخاب مدل
  • مثالی از منحنی ROC با پایتون

مقدمه ای بر ماتریس سردرگمی

به منظور نمایش برچسب‌های کلاس پیش‌بینی‌شده و واقعی از مدل‌های یادگیری ماشین، ماتریس سردرگمی استفاده می شود. اجازه دهید مثالی از یک مشکل طبقه بندی کلاس دودویی بیاوریم.

ماتریس سردرگمی

کلاس با برچسب 1، کلاس مثبت در مثال ما است. کلاس با برچسب 0 کلاس منفی در اینجا است. همانطور که می بینیم، مقادیر واقعی مثبت و منفی به عنوان ستون نشان داده می شوند، در حالی که مقادیر پیش بینی شده به عنوان ردیف نشان داده می شوند.

تعاریف TP، FP، TN و FN

اجازه دهید اصطلاحاتی را که اغلب در درک منحنی های ROC استفاده می کنیم، درک کنیم:

  • TP = مثبت واقعی – مدل کلاس مثبت را به درستی پیش‌بینی می‌کند تا یک کلاس مثبت باشد.
  • FP = مثبت کاذب – مدل کلاس منفی را به اشتباه پیش‌بینی می‌کند که یک کلاس مثبت است.
  • FN = منفی کاذب – مدل کلاس مثبت را به اشتباه پیش‌بینی کرد که کلاس منفی است.
  • TN = منفی واقعی – مدل کلاس منفی را به درستی پیش‌بینی کرد که کلاس منفی باشد.

خطاهای نوع 1 و نوع 2

دو نوع خطا وجود دارد که در اینجا قابل شناسایی است:

  • خطای نوع 1: مدل نمونه را به عنوان یک کلاس مثبت پیش بینی کرد، اما نادرست است. این مثبت کاذب (FP) است.

  • خطای نوع 2: مدل نمونه را کلاس Negative پیش بینی کرد، اما آیا درست نیست؟ این منفی کاذب (FN) است.

آمار محاسبه شده از ماتریس سردرگمی

به منظور ارزیابی مدل، برخی حقایق/آمار اساسی از نمایش ماتریس سردرگمی محاسبه می‌شوند.

دقت - به یاد بیاورید
Source: https://commons.wikimedia.org/wiki/File:Precisionrecall.svg

به خاطر آوردن: از بین تمام طبقات مثبت، چند نمونه به درستی شناسایی شد.

Recall = TP / (TP + FN)

دقت، درستی: از بین تمام موارد مثبت پیش بینی شده، چند مورد به درستی پیش بینی شده است.

Precision = TP / (TP + FP)

امتیاز اف: از Precision and Recall، F-Measure محاسبه می شود و گاهی اوقات به عنوان معیار استفاده می شود. F – اندازه گیری چیزی نیست جز میانگین هارمونیک Precision و Recall.

F-Score = (2 * Recall * Precision) / (Recall + Precision)

مقدمه ای بر AUC – ROC Curve

منحنی AUC-ROC معیار انتخاب مدل برای مسائل طبقه بندی باینری/چند کلاس است. ROC یک منحنی احتمال برای کلاس های مختلف است. ROC به ما می گوید که چقدر این مدل برای تشخیص کلاس های داده شده از نظر احتمال پیش بینی شده خوب است.

یک منحنی ROC معمولی دارای نرخ مثبت کاذب (FPR) است. روی محور X و نرخ مثبت واقعی (TPR) روی محور Y

ROC

ناحیه تحت پوشش منحنی، ناحیه بین خط نارنجی (ROC) و محور است. این منطقه تحت پوشش AUC است. هرچه منطقه تحت پوشش بزرگتر باشد، مدل های یادگیری ماشینی در تشخیص کلاس های داده شده بهتر هستند. مقدار ایده آل برای AUC 1 است.

سناریوهای مختلف با منحنی ROC و انتخاب مدل

سناریوی شماره 1 (بهترین سناریوی موردی)

برای هر مدل طبقه بندی، بهترین سناریو زمانی است که تمایز واضحی بین این دو / همه کلاس ها وجود داشته باشد.

S1

نمودار بالا احتمال کلاس پیش بینی شده را برای هر دو کلاس 0 و 1 نشان می دهد. آستانه 0.5 است که به این معنی است که اگر احتمال پیش بینی شده کلاس برای یک نمونه کمتر از 0.5 باشد، آن نمونه به عنوان نمونه ای از کلاس 0 پیش بینی می شود. احتمال کلاس برای یک نمونه برابر یا بیشتر از 0.5 است، نمونه به عنوان نمونه کلاس 1 طبقه بندی می شود.

منحنی AUC-ROC برای این مورد به صورت زیر است.

S1 ROC

همانطور که در اینجا می بینیم، ما یک تمایز واضح بین دو کلاس داریم، در نتیجه ما AUC 1 را داریم. حداکثر مساحت بین منحنی ROC و خط پایه در اینجا به دست می آید.

سناریوی شماره 2 (حدس تصادفی)

در صورتی که هر دو توزیع کلاس به سادگی از یکدیگر تقلید کنند، AUC 0.5 است. به عبارت دیگر، مدل ما برای نمونه ها و طبقه بندی آنها 50 درصد دقیق است. مدل در این مورد اصلاً قابلیت تبعیض ندارد.

S2 ROC

می بینیم که هیچ تبعیض آشکاری بین این دو طبقه وجود ندارد.

S2

از نمودار منحنی ROC AUC مشهود است که مساحت بین ROC و محور 0.5 است. این هنوز بدترین مدل نیست، اما یک حدس تصادفی می‌دهد، درست مانند یک انسان.

سناریوی شماره 3 (بدترین سناریو)

اگر مدل کلاس ها را کاملاً اشتباه طبقه بندی کند، بدترین حالت است.

S3

کاملا برعکس بهترین حالت (سناریوی شماره 1)، در این حالت، تمام نمونه های کلاس 1 به اشتباه به عنوان کلاس 0 و تمام نمونه های کلاس 0 به اشتباه به عنوان کلاس 1 طبقه بندی می شوند.

S3 ROC

در نتیجه، AUC را 0 دریافت می کنیم که بدترین حالت ممکن است.

سناریوی شماره 4 (صنعت / سناریوی عادی)

در یک سناریوی صنعتی معمول، بهترین موارد هرگز مشاهده نمی شود. ما هرگز تمایز واضحی بین این دو طبقه نمی‌یابیم.

S4

در این مورد، همانطور که مشاهده شد، مقداری همپوشانی داریم که خطاهای نوع 1 و نوع 2 را به پیش بینی مدل معرفی می کند. در این مورد ما AUC را بین 0.5 و 1 دریافت می کنیم.

مثال با پایتون

اجازه دهید نمونه‌ای از منحنی‌های ROC را با مقداری داده و یک طبقه‌بندی کننده در عمل ببینیم!

مرحله 1: وارد کردن کتابخانه ها

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

from sklearn.datasets import make_classification
from sklearn.neighbors import KNeighborsClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_curve
from sklearn.metrics import roc_auc_score

مرحله 2: تعریف a python تابع رسم منحنی های ROC.

def plot_roc_curve(fpr, tpr):
    plt.plot(fpr, tpr, color='orange', label='ROC')
    plt.plot((0, 1), (0, 1), color='darkblue', linestyle='--')
    plt.xlabel('False Positive Rate')
    plt.ylabel('True Positive Rate')
    plt.title('Receiver Operating Characteristic (ROC) Curve')
    plt.legend()
    plt.show()

مرحله 3: داده های نمونه تولید کنید.

data_X, class_label = make_classification(n_samples=1000, n_classes=2, weights=(1,1), random_state=1)

مرحله 4: داده ها را به زیر مجموعه های آموزش و آزمایش تقسیم کنید.

trainX, testX, trainy, testy = train_test_split(data_X, class_label, test_size=0.3, random_state=1)

مرحله 5: یک مدل را بچینید روی داده های قطار

model = RandomForestClassifier()
model.fit(trainX, trainy)

مرحله 6: پیش بینی احتمالات برای داده های آزمون.

probs = model.predict_proba(testX)

مرحله 7: احتمالات را فقط از کلاس مثبت نگه دارید.

probs = probs(:, 1)

مرحله 8: امتیاز AUC را محاسبه کنید.

auc = roc_auc_score(testy, probs)
print('AUC: %.2f' % auc)

خروجی:

AUC: 0.95

مرحله 9: منحنی ROC را دریافت کنید.

fpr, tpr, thresholds = roc_curve(testy, probs)

مرحله 10: منحنی ROC را با استفاده از تابع تعریف شده ترسیم کنید

plot_roc_curve(fpr, tpr)

خروجی:

خروجی

نتیجه

منحنی AUC-ROC یکی از متداول‌ترین معیارهای مورد استفاده برای ارزیابی عملکرد الگوریتم‌های یادگیری ماشین به‌ویژه در مواردی است که مجموعه داده‌های نامتعادل داریم. در این مقاله منحنی های ROC و مفاهیم مرتبط با آن را به تفصیل مشاهده می کنیم. در نهایت، نشان دادیم که چگونه منحنی‌های ROC را می‌توان با استفاده از پایتون ترسیم کرد.

(برچسب‌ها به ترجمه)# python



منتشر شده در 1403-01-24 16:17:04

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید