منحنی ROC و نقطه قطع. پیتون

ساخت وبلاگ

به سوالی پاسخ دهید که من یک مدل رگرسیون لجستیک را اجرا کردم و پیش بینی های مقادیر ورود را انجام دادم. من از این استفاده کردم تا امتیاز را در منحنی ROC بدست آورم: از معیارهای واردات Sklea FPR ، TPR ، آستانه = معیارها

منگوله

مانگس · 2022-08-17 23:52:01

به یک سوال پاسخ دهید

من یک مدل رگرسیون لجستیک را اجرا کردم و از مقادیر ورود به سیستم پیش بینی کردم. من از این استفاده کردم تا امتیاز را در منحنی ROC بدست آورم:

 از معیارهای واردات Sklea FPR ، TPR ، آستانه = metrics. roc_curve (y_test ، p) 

من می دانم که معیارها. roc_auc_score منطقه را زیر منحنی ROC می دهد. آیا کسی می تواند به من بگوید که چه فرمان نقطه برش بهینه (مقدار آستانه) را پیدا می کند؟

پاسخ

شما می توانید این کار را با استفاده از بسته EPI در R انجام دهید ، اما من نتوانستم بسته یا مثال مشابهی را در پایتون پیدا کنم.

نقطه قطع بهینه در جایی خواهد بود که "نرخ مثبت واقعی" زیاد است و "نرخ مثبت کاذب" پایین است. براساس این منطق ، من مثالی زیر را برای یافتن آستانه بهینه کشیده ام.

کد پایتون:

واردات پاندا به عنوان pd واردات statsmodels. api به عنوان sm واردات pylab به عنوان pl واردات numpy به عنوان np از sklea. metrics واردات roc_curve ، auc # داده ها را در df = pd. read_csv بخوانید ("http://www. ats. ucla. edu/stat/data/binary. csv ") # ستون" رتبه "را تغییر نام دهید زیرا یک روش dataframe نیز وجود دارد به نام" رتبه "df. columns = [" اعتراف "،" gre "،" gpa "،" prestige "] # dummifyرتبه dummy_ranks = pd. get_dummies (df ['prestige'] ، prefix = 'prestige') # یک قاب داده تمیز برای رگرسیون cols_to_keep = ['اعتراف کنید' ، 'gre' ، 'gpa'] data = df [cols_to_keep] ایجاد کنید.. join (dummy_ranks. iloc [: ، 'prestige_2':]) # داده های رهگیری را به صورت دستی اضافه کنید ['رهگیری'] = 1. 0 train_cols = data. columns [1:] # نتیجه مدل = sm. logit (data ['Admit '] ، Data [train_cols]). fit () print result. summary () # افزودن پیش بینی به داده های dataframe [' pred '] = نتیجه.###########################قطع بهینه در جایی خواهد بود که TPR زیاد است و FPR کم#TPR - ( 1-FPR) صفر یا نزدیک به صفر استtpr)) # فهرست برای df roc = pd. dataframe () roc. iloc [(roc. tf-0) . Abs (). argsort () [: 1]] # plot tpr vs 1-fpr شکل ، ax = pl. subplots () pl. plot (roc ['tpr']) pl. plot (roc ['1-fpr'] ، color = 'red') pl. xlabel ('1-false positive position') pl. ylabel ("نرخ مثبت واقعی") pl. title ("ویژگی عامل گیرنده") ax. set_xticklabels ([]) 

نقطه قطع بهینه 0. 317628 است ، بنابراین هر چیزی بالاتر از این می تواند به عنوان 1 دیگری برچسب گذاری شود. از خروجی/نمودار می توانید ببینید که در جایی که TPR در حال عبور از 1-FPR است TPR 63 ٪ ، FPR 36 ٪ و TPR- است (1-FPR) در مثال فعلی نزدیک به صفر است.

خروجی:

 1-FPR FPR TF آستانه TPR 171 0. 637363 0. 362637 0. 000433 0. 317628 0. 637795 

enter image description here

امیدوارم این مفید باشد.

ویرایش کردن

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

کد پایتون:

def Find_Optimal_Cutoff(target, predicted): """ Find the optimal probability cutoff point for a classification model related to event rate Parameters ---------- target : Matrix with dependent or target data, where rows are observations predicted : Matrix with predicted data, where rows are observations Retus ------- list type, with optimal cutoff value """ fpr, tpr, threshold = roc_curve(target, predicted) i = np.arange(len(tpr)) roc = pd.DataFrame() roc_t = roc.iloc[(roc.tf-0).abs().argsort()[:1]] retu list(roc_t['threshold']) # Add prediction probability to dataframe data['pred_proba'] = result.predict(data[train_cols]) # Find optimal probability threshold threshold = Find_Optimal_Cutoff(data['admit'], data['pred_proba']) print threshold # [0.31762762459360921] # Find prediction to the dataframe applying threshold data['pred'] = data['pred_proba'].map(lambda x: 1 if x>آستانه دیگر 0) # چاپ ماتریس سردرگمی از sklea. Metrics واردات confusion_matrix confusion_matrix (داده ها ['پذیرش'] ، داده ها ['pred']) # array ([[175 ، 98] ، # [46 ، 81]])> نقطه قطع بهینه 0. 317628 است ، بنابراین هر چیزی بالاتر از این می تواند به عنوان 1 دیگری برچسب گذاری شود. از خروجی/نمودار می توانید ببینید که در جایی که TPR در حال عبور از 1-FPR است TPR 63 ٪ ، FPR 36 ٪ و TPR- است(1-FPR) در مثال فعلی نزدیک به صفر است. 
پلتفرم معاملاتی فارکس...
ما را در سایت پلتفرم معاملاتی فارکس دنبال می کنید

برچسب : نویسنده : مرجان محتشم بازدید : <-PostHit-> تاريخ : دوشنبه 23 مرداد 1402 ساعت: 13:03