نحوه محاسبه فواصل اطمینان برای معیارهای عملکرد در یادگیری ماشین با استفاده از روش بوت استرپ خودکار

گره منبع: 1178501

نحوه محاسبه فواصل اطمینان برای معیارهای عملکرد در یادگیری ماشین با استفاده از روش بوت استرپ خودکار

آیا اندازه‌گیری‌های عملکرد مدل شما به دلیل یک مجموعه تست «بزرگ» بسیار دقیق است یا به دلیل یک مجموعه آزمایش «کوچک» یا نامتعادل بسیار نامشخص؟


By دیوید بی روزن (PhD)، دانشمند ارشد داده برای تأیید اعتبار خودکار در IBM Global Financing



خط نارنجی 89.7% را به عنوان کران پایینی فاصله اطمینان دقت متعادل، سبز برای دقت متعادل مشاهده شده اصلی = 92.4% (تخمین نقطه ای) و قرمز را برای کران بالایی 94.7% نشان می دهد. (این و همه تصاویر متعلق به نویسنده است مگر اینکه خلاف آن ذکر شده باشد.)

معرفی

 
 
اگر عملکرد طبقه‌بندی‌کننده خود را به‌عنوان دقت = 94.8% و F1=92.3% در یک مجموعه آزمایشی گزارش می‌کنید، این بدون دانستن چیزی در مورد اندازه و ترکیب مجموعه آزمایشی معنی زیادی ندارد. حاشیه خطای این اندازه‌گیری‌های عملکرد بسته به اندازه مجموعه آزمایشی، یا برای یک مجموعه داده نامتعادل، در درجه اول بسته به تعداد نمونه‌های مستقل از اقلیت کلاسی که در آن قرار دارد (کپی های بیشتر از نمونه های مشابه از نمونه برداری بیش از حد به این منظور کمکی نمی کند).

اگر بتوانید مجموعه آزمایش مستقل دیگری با منشأ مشابه جمع آوری کنید، دقت و F1 مدل شما در این مجموعه داده بعید است که یکسان باشند، اما ممکن است چقدر متفاوت باشند؟ سوالی مشابه این در آمار به عنوان پاسخ داده می شود فاصله اطمینان از اندازه گیری

اگر بخواهیم بسیاری از مجموعه داده‌های نمونه مستقل را از جامعه زیربنایی ترسیم کنیم، آنگاه برای 95٪ از آن مجموعه داده‌ها، مقدار واقعی جامعه اساسی متریک در بازه اطمینان 95٪ است که برای آن مجموعه داده نمونه خاص محاسبه می‌کنیم.

در این مقاله به شما نشان خواهیم داد که چگونه فواصل اطمینان را برای هر تعداد معیار عملکرد یادگیری ماشین به طور همزمان با یک روش بوت استرپ محاسبه کنید. بطور خودکار تعیین می کند که چه تعداد مجموعه داده نمونه بوت به طور پیش فرض تولید شود.

اگر فقط می خواهید ببینید که چگونه این کد را برای محاسبه فواصل اطمینان فراخوانی کنید، به بخش "پرش کنید"نتایج را محاسبه کنید!" در زیر.

روش بوت استرپ

 
 
اگر بتوانیم مجموعه داده‌های آزمایشی اضافی را از توزیع واقعی زیربنای داده‌ها ترسیم کنیم، می‌توانیم توزیع معیار(های) عملکرد مورد علاقه را در بین آن مجموعه داده‌ها ببینیم. (هنگام ترسیم آن مجموعه داده‌ها، کاری برای جلوگیری از ترسیم نمونه‌های یکسان یا مشابه چندین بار انجام نمی‌دهیم، اگرچه این ممکن است به ندرت اتفاق بیفتد.)

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

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

La صدک روش بوت استرپ برای تخمین فاصله اطمینان به شرح زیر است:

  1. تولید nboots مجموعه داده‌های «نمونه راه‌اندازی»، هر کدام به اندازه مجموعه آزمایشی اصلی است. هر مجموعه داده نمونه با ترسیم نمونه هایی به صورت تصادفی از مجموعه آزمایشی با جایگزینی به دست می آید.
  2. در هر یک از مجموعه داده های نمونه، متریک را محاسبه کرده و ذخیره کنید.
  3. فاصله اطمینان 95% توسط 2.5 داده می شودth به 97.5th صدک در میان nboots مقادیر محاسبه شده متریک اگر nboots=1001 و شما مقادیر را در یک سری/آرایه/لیست مرتب کردید X به طول 1001، 0th صدک است X[0] و 100th صدک است X[1000]، بنابراین فاصله اطمینان با داده می شود X[25] به X[975].

مطمئناً می‌توانید برای هر مجموعه داده نمونه در مرحله 2 هر تعداد معیار را که دوست دارید محاسبه کنید، اما در مرحله 3 صدک‌های هر متریک را جداگانه پیدا خواهید کرد.

نمونه مجموعه داده ها و نتایج فاصله اطمینان

 
 
ما از نتایج این مقاله قبلی به عنوان مثال استفاده خواهیم کرد: نحوه برخورد با طبقه بندی نامتعادل، بدون متعادل کردن مجدد داده هاقبل از در نظر گرفتن نمونه برداری بیش از حد از داده های کج خود، سعی کنید آستانه تصمیم گیری طبقه بندی خود را تنظیم کنید.

در آن مقاله ما از خیلیکاگل دو کلاسه نامتعادل مجموعه داده های شناسایی کلاهبرداری کارت اعتباری. ما انتخاب کردیم که از آستانه طبقه‌بندی کاملاً متفاوت از آستانه پیش‌فرض 0.5 استفاده کنیم که به طور ضمنی در استفاده از متد ()predict وجود دارد و تعادل داده‌ها را غیرضروری می‌کند. این رویکرد گاهی اوقات نامیده می شود آستانه حرکت، که در آن طبقه‌بندی‌کننده ما کلاس را با اعمال آستانه انتخاب‌شده به احتمال کلاس پیش‌بینی‌شده ارائه‌شده توسط پیش‌بینی اختصاص می‌دهد._پروبا() روش.

ما دامنه این مقاله (و کد) را به طبقه‌بندی باینری محدود می‌کنیم: کلاس‌های 0 و 1، با کلاس 1 طبق قرارداد، کلاس "مثبت" و به طور خاص کلاس اقلیت برای داده‌های نامتعادل است، اگرچه کد باید برای رگرسیون (تک) کار کند. هدف مستمر) نیز.

ایجاد یک مجموعه داده نمونه بوت

 
 
اگرچه کد بازه اطمینان ما می‌تواند تعداد مختلفی از آرگومان‌های داده را برای ارسال به توابع متریک مدیریت کند، اما ما روی معیارهای سبک sklearn تمرکز خواهیم کرد، که همیشه دو آرگومان داده، y_true و y_pred را می‌پذیرند، جایی که y_pred پیش‌بینی‌های کلاس باینری خواهد بود (0 یا 1)، یا پیش‌بینی‌های تابع تصمیم یا احتمال کلاس پیوسته، یا حتی پیش‌بینی‌های رگرسیون پیوسته اگر y_true نیز پیوسته باشد. تابع زیر یک مجموعه داده نمونه بوت را ایجاد می کند. هر data_args را می پذیرد اما در مورد ما این آرگومان ها خواهد بود ytest(تست واقعی/واقعی ما مقادیر هدف را در مقاله قبلی) و hardpredtst_tuned_thresh (کلاس پیش بینی شده). هر دو شامل صفر و یک هستند تا کلاس درست یا پیش‌بینی شده را برای هر نمونه نشان دهند.

توابع () specificity_score متریک سفارشی و توابع ابزار

 
 
ما یک تابع متریک سفارشی برای Specificity تعریف خواهیم کرد که فقط نام دیگری برای Recall of the است منفی کلاس (کلاس 0). همچنین یک تابع calc_metrics که دنباله‌ای از معیارهای مورد علاقه را برای داده‌های ما اعمال می‌کند، و چند توابع کاربردی برای آن:

در اینجا ما لیستی از معیارهای خود را تهیه کرده و آنها را در داده ها اعمال می کنیم. ما دقت را یک معیار مرتبط در نظر نمی گیریم زیرا منفی کاذب (تقسیم اشتباه تقلب واقعی به عنوان قانونی) برای کسب و کار بسیار پرهزینه تر از مثبت کاذب است (تقسیم اشتباه یک قانون واقعی به عنوان یک تقلب)، در حالی که Accuracy هر دو نوع طبقه بندی اشتباه را بررسی می کند. به همان اندازه بد هستند و بنابراین به طبقه بندی صحیح آنهایی که طبقه واقعی آنها طبقه اکثریت است ترجیح می دهد زیرا این موارد بسیار بیشتر اتفاق می افتد و بنابراین کمک بسیار بیشتری به دقت کلی می کند.

met=[ metrics.recall_score, specificity_score, metrics.balanced_accuracy_score ]
calc_metrics(met, ytest, hardpredtst_tuned_thresh)



ساخت هر مجموعه داده نمونه بوت و محاسبه معیارهای آن

 
 
در raw_metric_samples() ما در واقع چندین مجموعه داده نمونه را یک به یک تولید می کنیم و معیارهای هر کدام را ذخیره می کنیم:

شما به raw_metric_samples() فهرستی از معیارها (یا فقط یک متریک) مورد علاقه و همچنین داده‌های کلاس واقعی و پیش‌بینی‌شده را می‌دهید، و مجموعه داده‌های نمونه nboots را به‌دست می‌آورد و یک dataframe فقط با مقادیر معیارهای محاسبه‌شده از هر مجموعه داده برمی‌گرداند. از طریق _boot_generator() به جای اینکه همه مجموعه داده ها را به طور همزمان به عنوان یک بالقوه- ذخیره کند، one_boot() را یکی یکی در یک عبارت مولد فراخوانی می کند.بزرگ فهرست

به معیارهای 7 مجموعه داده نمونه بوت نگاه کنید

 
 
ما لیستی از توابع متریک خود را تهیه می کنیم و raw_metric_samples() را فراخوانی می کنیم تا نتایج را فقط برای 7 مجموعه داده نمونه بدست آوریم. ما در اینجا raw_metric_samples() را برای درک فراخوانی می کنیم - برای بدست آوردن فواصل اطمینان با استفاده از ci_auto() در زیر ضروری نیست، اگرچه فهرستی از متریک ها (یا فقط یک متریک) برای ci_auto() مشخص می شود. is لازم است

np.random.seed(13)
raw_metric_samples(met, ytest, hardpredtst_tuned_thresh, nboots=7).style.format('{:.2%}') #optional #style



هر ستون بالا شامل معیارهای محاسبه‌شده از یک مجموعه داده نمونه راه‌اندازی (با شماره‌های 0 تا 6) است، بنابراین مقادیر متریک محاسبه‌شده به دلیل نمونه‌گیری تصادفی متفاوت است.

تعداد مجموعه داده های بوت، با پیش فرض محاسبه شده

 
 
در پیاده سازی ما، به طور پیش فرض تعداد مجموعه داده های بوت nboots به طور خودکار از سطح اطمینان مورد نظر (به عنوان مثال 95٪) محاسبه می شود تا به توصیه توسط شمال، کرتیس و شام برای داشتن حداقل تعداد نتایج بوت در هر دم توزیع. (در واقع این توصیه برای p- ارزش ها و در نتیجه آزمون فرضیه مناطق پذیرش، اما فاصله اطمینان به اندازه کافی شبیه به مواردی هستند که از این به عنوان یک قاعده کلی استفاده می کنند.) اگرچه این نویسندگان حداقل 10 نتیجه بوت را در دم توصیه می کنند دیویدسون و مک کینون حداقل 399 چکمه را برای اطمینان 95 درصد توصیه کنید، که به 11 چکمه در دم نیاز دارد، بنابراین ما از این توصیه محافظه کارانه تر استفاده می کنیم.

We specify alpha which is 1 – confidence level. E.g. 95% confidence becomes 0.95 and alpha=0.05. If you specify an explicit number of boots (perhaps a smaller nboots چون نتایج سریع‌تری می‌خواهید) اما برای آلفای درخواستی شما کافی نیست، یک آلفای بالاتر به طور خودکار انتخاب می‌شود تا فاصله اطمینان دقیقی برای آن تعداد چکمه به دست آید. حداقل 51 چکمه استفاده خواهد شد زیرا کمتر از آن فقط می تواند سطوح اطمینان عجیب و غریب را به دقت محاسبه کند (مانند اطمینان 40٪ که فاصله ای از 30 را نشان می دهد.th صدک به 70th صدک، که 40% در داخل فاصله دارد اما 60% خارج از آن) و مشخص نیست که توصیه حداقل چکمه حتی چنین موردی را در نظر گرفته باشد.

تابع get_alpha_nboots() nboots پیش فرض را تنظیم می کند یا آلفا و nboots درخواستی را در بالا تغییر می دهد:

بیایید nboot های پیش فرض را برای مقادیر مختلف آلفا نشان دهیم:

g = get_alpha_nboots pd.DataFrame( [ g(0.40), g(0.20, None), g(0.10), g(), g(alpha=0.02), g(alpha=0.01, nboots=None), g(0.005, nboots=None) ], columns=['alpha', 'default nboots'] ).set_index('alpha')



اگر یک nboot صریح درخواست کنیم چه اتفاقی می افتد:

req=[(0.01,3000), (0.01,401), (0.01,2)]
out=[get_alpha_nboots(*args) for args in req]
mydf = lambda x: pd.DataFrame(x, columns=['alpha', 'nboots'])
pd.concat([mydf(req),mydf(out)],axis=1, keys=('Requested','Using'))



مقادیر کوچک nboots آلفا را به 0.05 و 0.40 افزایش داد و nboots=2 به حداقل 51 تغییر یافت.

هیستوگرام مجموعه داده های نمونه بوت استرپ که فاصله اطمینان را فقط برای دقت متعادل نشان می دهد

 
 
مجدداً برای بدست آوردن فواصل اطمینان زیر با فراخوانی ()ci_auto نیازی به انجام این کار نداریم.

np.random.seed(13)
metric_boot_histogram (metrics.balanced_accuracy_score, ytest, hardpredtst_tuned_thresh)



خط نارنجی 89.7% را به عنوان کران پایینی فاصله اطمینان دقت متعادل، سبز برای دقت متعادل مشاهده شده اصلی = 92.4% (تخمین نقطه ای) و قرمز را برای کران بالایی 94.7% نشان می دهد. (همان تصویر در بالای این مقاله ظاهر می شود.)

نحوه محاسبه تمام فواصل اطمینان برای لیست معیارها

 
 
در اینجا تابع اصلی است که موارد فوق را فراخوانی می کند و فواصل اطمینان را از صدک نتایج متریک محاسبه می کند و تخمین های نقطه ای را به عنوان اولین ستون از چارچوب داده خروجی نتایج درج می کند.

نتایج را محاسبه کنید!

 
 
این تنها کاری است که ما واقعاً باید انجام دهیم: ci_auto() را به صورت زیر با لیستی از معیارها فراخوانی کنیم (met اختصاص داده شده در بالا) برای بدست آوردن فواصل اطمینان آنها. قالب بندی درصد اختیاری است:

np.random.seed(13)
ci_auto( met, ytest, hardpredtst_tuned_thresh ).style.format('{:.2%}')



بحث در مورد فواصل اطمینان حاصل

 
 
در اینجا ماتریس سردرگمی از مقاله. کلاس 0 منفی (کلاس اکثریت) و کلاس 1 مثبت (کلاس بسیار نادر) است.



فراخوان (نرخ مثبت واقعی) 134/(134+14) دارای بیشترین فاصله اطمینان است زیرا این نسبت دوجمله ای است که شامل تعداد کمی است.

ویژگی (نرخ منفی واقعی) 80,388/(80,388+4,907) است که شامل بسیار شمارش بزرگتر است، بنابراین فاصله اطمینان بسیار باریکی دارد که فقط [94.11٪ تا 94.40٪] است.

از آنجایی که دقت متوازن صرفاً به عنوان میانگینی از Recall و Specificity محاسبه می‌شود، عرض فاصله اطمینان آن بین فاصله بین آنها متوسط ​​است.

عدم دقت اندازه گیری متریک به دلیل تغییرات در داده های آزمایش، در مقابل تغییرات در داده های قطار

 
 
در اینجا ما تغییرپذیری را در نظر نگرفته ایم مدل بر اساس تصادفی بودن ما پرورش داده ها (اگرچه می تواند برای برخی اهداف نیز جالب باشد، به عنوان مثال اگر شما آموزش مجدد خودکار را انجام داده اید و می خواهید بدانید که عملکرد مدل های آینده چقدر ممکن است متفاوت باشد)، اما فقط تغییر در اندازه گیری عملکرد این داده ها ویژه مدل (ایجاد شده از برخی داده های آموزشی خاص) به دلیل تصادفی بودن ما آزمون داده است.

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

استقلال مصادیق فردی

 
 
روش بوت استرپ فرض می‌کند که هر یک از نمونه‌های شما (موارد، مشاهدات) به‌طور مستقل از یک جمعیت اساسی ترسیم شده‌اند. اگر مجموعه آزمایشی شما دارای گروه‌هایی از ردیف‌هایی است که مستقل از یکدیگر نیستند، برای مثال مشاهدات مکرر یک موجودیت که احتمالاً با یکدیگر همبستگی دارند، یا نمونه‌هایی که بیش از حد نمونه/تکثیر/تولید شده‌اند-از نمونه‌های دیگر در آزمون شما مجموعه، نتایج ممکن است معتبر نباشند. ممکن است نیاز به استفاده داشته باشید گروه بندی شده نمونه‌گیری، که در آن کل گروه‌ها را به‌جای ردیف‌های تکی به‌صورت تصادفی کنار هم می‌کشید، در حالی که از شکستن هر گروه یا استفاده از بخشی از آن اجتناب می‌کنید.

همچنین می‌خواهید مطمئن شوید که گروه‌هایی را ندارید که در مجموعه آموزشی و آزمایشی تقسیم شده‌اند، زیرا در این صورت مجموعه تست لزوما مستقل نیست و ممکن است بیش از حد تشخیص داده نشود. به عنوان مثال، اگر از نمونه برداری بیش از حد استفاده می کنید، معمولاً فقط باید این کار را انجام دهید بعد از از مجموعه تست جدا شده است، نه قبلا. و معمولاً شما باید مجموعه آموزشی را بیش از حد نمونه برداری کنید، اما مجموعه آزمایشی را نه، زیرا مجموعه آزمایشی باید نماینده نمونه هایی باشد که مدل پس از استقرار در آینده خواهد دید. و برای اعتبارسنجی متقابل می‌خواهید از scikit-learn استفاده کنید model_selection.GroupKFold().

نتیجه

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

این نوت بوک jupyter در github موجود است: bootConfIntAutoV1o_standalone.ipynb

آیا این مقاله آموزنده و/یا مفید بود؟ لطفاً اگر نظر یا سؤالی درباره این مقاله یا فواصل اطمینان، راه‌اندازی، تعداد بوت‌ها، این پیاده‌سازی، مجموعه داده، مدل، انتقال آستانه یا نتایج دارید، در زیر پست کنید.

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

برخی از حقوق محفوظ است

 
بیوگرافی: دیوید بی روزن (PhD) دانشمند ارشد داده برای تأیید اعتبار خودکار در IBM Global Financing است. بیشتر از نوشته های دیوید را در dabruro.medium.com.

اصلی. مجدداً با اجازه دوباره ارسال شد.

مرتبط:

منبع: https://www.kdnuggets.com/2021/10/calculate-sigurt-intervals-performance-metrics-machine-learning.html

تمبر زمان:

بیشتر از kdnuggets