در این مقاله به تحلیل محاسبات نظری تبدیل می پردازیم توابع رگرسیون خطی в تابع تبدیل لاجیت معکوس (که در غیر این صورت تابع پاسخ لجستیک نامیده می شود). سپس با استفاده از زرادخانه روش حداکثر احتمالمطابق با مدل رگرسیون لجستیک، تابع ضرر را استخراج می کنیم ضرر لجستیکیا به عبارت دیگر تابعی را تعریف می کنیم که با آن پارامترهای بردار وزن در مدل رگرسیون لجستیک انتخاب می شوند. .
طرح کلی مقاله:
- اجازه دهید رابطه خطی بین دو متغیر را تکرار کنیم
- بیایید نیاز به تحول را شناسایی کنیم توابع رگرسیون خطی в تابع پاسخ لجستیک
- بیایید تبدیل ها و خروجی ها را انجام دهیم تابع پاسخ لجستیک
- بیایید سعی کنیم بفهمیم که چرا روش حداقل مربعات هنگام انتخاب پارامترها بد است توابع ضرر لجستیک
- ما استفاده می کنیم روش حداکثر احتمال برای تعیین توابع انتخاب پارامتر :
5.1. مورد 1: عملکرد ضرر لجستیک برای اشیاء با نامگذاری کلاس 0 и 1:
5.2. مورد 2: عملکرد ضرر لجستیک برای اشیاء با نامگذاری کلاس -1 и +1:
مقاله مملو از مثالهای ساده است که در آنها همه محاسبات بهراحتی به صورت شفاهی یا روی کاغذ انجام میشود؛ در برخی موارد ممکن است به ماشینحساب نیاز باشد. پس آماده باش :)
این مقاله در درجه اول برای دانشمندان داده با سطح دانش اولیه در مبانی یادگیری ماشین در نظر گرفته شده است.
این مقاله همچنین کدهایی را برای رسم نمودارها و محاسبات ارائه می دهد. همه کدها به زبان نوشته شده است پایتون 2.7. اجازه دهید از قبل در مورد "تازه بودن" نسخه استفاده شده توضیح دهم - این یکی از شرایط گذراندن دوره معروف از یاندکس در یک پلت فرم آموزش آنلاین به همان اندازه معروف Coursera، و همانطور که می توان حدس زد، مطالب بر اساس این دوره تهیه شده است.
01. وابستگی به خط مستقیم
کاملاً منطقی است که این سؤال را بپرسیم - وابستگی خطی و رگرسیون لجستیک چه ربطی به آن دارد؟
ساده است! رگرسیون لجستیک یکی از مدل هایی است که به طبقه بندی خطی تعلق دارد. به عبارت ساده، وظیفه یک طبقه بندی خطی پیش بینی مقادیر هدف است از متغیرها (رگرسیون) . اعتقاد بر این است که وابستگی بین ویژگی ها و مقادیر هدف خطی از این رو نام طبقه بندی کننده - خطی است. به بیان بسیار تقریبی، مدل رگرسیون لجستیک بر این فرض استوار است که یک رابطه خطی بین ویژگی ها وجود دارد. و مقادیر هدف . این ارتباط است.
اولین مثال در استودیو وجود دارد و به درستی در مورد وابستگی مستقیم کمیت های مورد مطالعه است. در فرآیند تهیه مقاله، به مثالی برخوردم که قبلاً افراد زیادی را در معرض خطر قرار داده است - وابستگی جریان به ولتاژ ("تحلیل رگرسیون کاربردی"، N. Draper، G. Smith). اینجا هم به آن نگاه می کنیم.
مطابق با قانون اهم:
جایی که - قدرت فعلی، - ولتاژ، - مقاومت.
اگر نمی دانستیم قانون اهم، سپس با تغییر می توانیم وابستگی را به صورت تجربی پیدا کنیم و اندازه گیری ، ضمن حمایت درست شد. سپس می بینیم که نمودار وابستگی از یک خط کم و بیش مستقیم از طریق مبدا می دهد. ما می گوییم "کم یا بیشتر" زیرا، اگرچه رابطه در واقع دقیق است، اما اندازه گیری های ما ممکن است حاوی خطاهای کوچکی باشد و بنابراین نقاط روی نمودار ممکن است دقیقاً روی خط قرار نگیرند، اما به طور تصادفی در اطراف آن پراکنده شوند.
نمودار 1 "وابستگی" از »
کد رسم نمودار
import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np
import random
R = 13.75
x_line = np.arange(0,220,1)
y_line = []
for i in x_line:
y_line.append(i/R)
y_dot = []
for i in y_line:
y_dot.append(i+random.uniform(-0.9,0.9))
fig, axes = plt.subplots(figsize = (14,6), dpi = 80)
plt.plot(x_line,y_line,color = 'purple',lw = 3, label = 'I = U/R')
plt.scatter(x_line,y_dot,color = 'red', label = 'Actual results')
plt.xlabel('I', size = 16)
plt.ylabel('U', size = 16)
plt.legend(prop = {'size': 14})
plt.show()
02. نیاز به تبدیل معادله رگرسیون خطی
بیایید به مثال دیگری نگاه کنیم. بیایید تصور کنیم که ما در یک بانک کار می کنیم و وظیفه ما این است که بسته به عوامل خاصی احتمال بازپرداخت وام توسط وام گیرنده را تعیین کنیم. برای ساده کردن کار، ما فقط دو عامل را در نظر می گیریم: حقوق ماهانه وام گیرنده و مبلغ بازپرداخت ماهانه وام.
کار بسیار مشروط است، اما با این مثال میتوان فهمید که چرا استفاده از آن کافی نیست توابع رگرسیون خطی، و همچنین دریابید که چه تبدیلی باید با تابع انجام شود.
به مثال برگردیم. قابل درک است که هر چه حقوق و دستمزد بالاتر باشد، وام گیرنده می تواند ماهانه بیشتری را برای بازپرداخت وام اختصاص دهد. در عین حال، برای یک محدوده حقوق مشخص، این رابطه کاملاً خطی خواهد بود. به عنوان مثال، بیایید یک محدوده حقوق بین 60.000 تا 200.000 RUR را در نظر بگیریم و فرض کنیم که در محدوده حقوق مشخص شده، وابستگی اندازه پرداخت ماهانه به اندازه حقوق خطی است. بیایید بگوییم که برای محدوده مشخص شده دستمزدها مشخص شد که نسبت حقوق به پرداخت نمی تواند کمتر از 3 باشد و وام گیرنده باید همچنان 5.000 RUR ذخیره داشته باشد. و فقط در این صورت فرض می کنیم که وام گیرنده وام را به بانک بازپرداخت می کند. سپس معادله رگرسیون خطی به شکل زیر خواهد بود:
جایی که , , , - حقوق و دستمزد وام گیرنده، - پرداخت وام -ام وام گیرنده
جایگزینی پرداخت حقوق و وام با پارامترهای ثابت در معادله شما می توانید تصمیم بگیرید که وام صادر کنید یا رد کنید.
با نگاهی به آینده، توجه می کنیم که با پارامترهای داده شده تابع رگرسیون خطی، استفاده شده در توابع پاسخ لجستیک مقادیر زیادی تولید می کند که محاسبات را برای تعیین احتمال بازپرداخت وام پیچیده می کند. بنابراین، پیشنهاد می شود که ضرایب خود را، مثلاً، 25.000 برابر کاهش دهیم. این تغییر ضرایب تغییری در تصمیم برای صدور وام ایجاد نمی کند. بیایید این نکته را برای آینده به خاطر بسپاریم، اما اکنون، برای روشنتر شدن موضوع بحث، بیایید وضعیت سه وام گیرنده بالقوه را در نظر بگیریم.
جدول 1 وام گیرندگان بالقوه
کد برای تولید جدول
import pandas as pd
r = 25000.0
w_0 = -5000.0/r
w_1 = 1.0/r
w_2 = -3.0/r
data = {'The borrower':np.array(['Vasya', 'Fedya', 'Lesha']),
'Salary':np.array([120000,180000,210000]),
'Payment':np.array([3000,50000,70000])}
df = pd.DataFrame(data)
df['f(w,x)'] = w_0 + df['Salary']*w_1 + df['Payment']*w_2
decision = []
for i in df['f(w,x)']:
if i > 0:
dec = 'Approved'
decision.append(dec)
else:
dec = 'Refusal'
decision.append(dec)
df['Decision'] = decision
df[['The borrower', 'Salary', 'Payment', 'f(w,x)', 'Decision']]
مطابق با داده های جدول، واسیا با حقوق 120.000 RUR می خواهد وام دریافت کند تا بتواند ماهانه آن را با 3.000 RUR بازپرداخت کند. ما تعیین کردیم که برای تأیید وام، حقوق واسیا باید سه برابر مبلغ پرداختی باشد و هنوز باید 5.000 RUR باقی بماند. واسیا این نیاز را برآورده می کند: . حتی 106.000 RUR باقی مانده است. علیرغم اینکه هنگام محاسبه ما شانس را کاهش داده ایم 25.000 بار، نتیجه یکسان بود - وام قابل تایید است. فدیا نیز وام دریافت می کند ، اما لشا با وجود اینکه بیشترین دریافت را دارد ، باید اشتهای خود را مهار کند.
بیایید یک نمودار برای این مورد رسم کنیم.
نمودار 2 طبقه بندی وام گیرندگان
کد برای رسم نمودار
salary = np.arange(60000,240000,20000)
payment = (-w_0-w_1*salary)/w_2
fig, axes = plt.subplots(figsize = (14,6), dpi = 80)
plt.plot(salary, payment, color = 'grey', lw = 2, label = '$f(w,x_i)=w_0 + w_1x_{i1} + w_2x_{i2}$')
plt.plot(df[df['Decision'] == 'Approved']['Salary'], df[df['Decision'] == 'Approved']['Payment'],
'o', color ='green', markersize = 12, label = 'Decision - Loan approved')
plt.plot(df[df['Decision'] == 'Refusal']['Salary'], df[df['Decision'] == 'Refusal']['Payment'],
's', color = 'red', markersize = 12, label = 'Decision - Loan refusal')
plt.xlabel('Salary', size = 16)
plt.ylabel('Payment', size = 16)
plt.legend(prop = {'size': 14})
plt.show()
بنابراین، خط مستقیم ما، مطابق با تابع ساخته شده است ، وام گیرندگان "بد" را از وام گیرندگان "خوب" جدا می کند. آن دسته از وام گیرندگانی که خواسته های آنها با توانایی های آنها منطبق نیست، بالای خط هستند (لشا)، در حالی که کسانی که با توجه به پارامترهای مدل ما قادر به بازپرداخت وام هستند، زیر خط هستند (واسیا و فدیا). به عبارت دیگر، می توانیم این را بگوییم: خط مستقیم ما وام گیرندگان را به دو دسته تقسیم می کند. اجازه دهید آنها را به صورت زیر نشان دهیم: به کلاس ما آن دسته از وام گیرندگانی را که احتمال بازپرداخت وام را دارند به عنوان دسته بندی می کنیم یا ما آن دسته از وام گیرندگانی را که به احتمال زیاد قادر به بازپرداخت وام نخواهند بود، لحاظ خواهیم کرد.
اجازه دهید نتایج حاصل از این مثال ساده را خلاصه کنیم. بیایید یک نکته را در نظر بگیریم و با جایگزینی مختصات نقطه به معادله مربوط به خط ، سه گزینه را در نظر بگیرید:
- اگر نقطه زیر خط باشد و آن را به کلاس اختصاص دهیم ، سپس مقدار تابع مثبت خواهد بود از به . این بدان معنی است که ما می توانیم فرض کنیم که احتمال بازپرداخت وام در محدوده است . هر چه مقدار تابع بزرگتر باشد، احتمال آن بیشتر است.
- اگر نقطه ای بالای یک خط باشد و آن را به کلاس اختصاص دهیم یا ، سپس مقدار تابع از منفی خواهد بود به . سپس فرض می کنیم که احتمال بازپرداخت بدهی در محدوده است و هر چه قدر مطلق تابع بیشتر باشد، اطمینان ما بیشتر است.
- نقطه روی یک خط مستقیم، در مرز بین دو طبقه است. در این حالت مقدار تابع برابر خواهد بود و احتمال بازپرداخت وام برابر است .
حال، بیایید تصور کنیم که ما نه دو عامل، بلکه ده ها و نه سه، بلکه هزاران وام گیرنده داریم. سپس به جای یک خط مستقیم خواهیم داشت m بعدی صفحه و ضرایب ما از هوا خارج نخواهیم شد، بلکه بر اساس تمام قوانین و بر اساس داده های انباشته در مورد وام گیرندگانی که وام را بازپرداخت کرده اند یا نپرداخته اند، استخراج می شویم. و در واقع، توجه داشته باشید که ما اکنون وام گیرندگان را با استفاده از ضرایب شناخته شده از قبل انتخاب می کنیم . در واقع وظیفه مدل رگرسیون لجستیک دقیقاً تعیین پارامترها است ، که در آن مقدار تابع ضرر است ضرر لجستیک به حداقل خواهد رسید. اما در مورد نحوه محاسبه بردار ، در بخش 5 مقاله بیشتر خواهیم فهمید. در همین حال، ما به سرزمین موعود - نزد بانکدار و سه مشتری او - برمی گردیم.
با تشکر از عملکرد ما می دانیم که به چه کسی می توان وام داد و چه کسی باید رد شود. اما شما نمی توانید با چنین اطلاعاتی به سراغ مدیر بروید، زیرا آنها می خواستند احتمال بازپرداخت وام توسط هر وام گیرنده را از ما دریافت کنند. چه باید کرد؟ پاسخ ساده است - ما باید به نحوی تابع را تغییر دهیم ، که مقادیر آن در محدوده قرار دارد به تابعی که مقادیر آن در محدوده قرار دارد . و چنین تابعی وجود دارد، نامیده می شود تابع پاسخ لجستیک یا تبدیل لجیت معکوس. ملاقات:
بیایید قدم به قدم ببینیم چگونه کار می کند تابع پاسخ لجستیک. توجه داشته باشید که ما در جهت مخالف حرکت خواهیم کرد، یعنی. فرض می کنیم که مقدار احتمال را می دانیم که در محدوده از قرار دارد به و سپس این مقدار را به کل محدوده اعداد از "باز می کنیم". به .
03. تابع پاسخ لجستیک را استخراج می کنیم
مرحله 1. مقادیر احتمال را به یک محدوده تبدیل کنید
در طول تبدیل تابع в تابع پاسخ لجستیک ما تحلیلگر اعتباری خود را به حال خود رها می کنیم و به جای آن به یک تور از بنگاه ها می پردازیم. نه، البته، ما شرط بندی نمی کنیم، تمام چیزی که ما را در آنجا مورد علاقه قرار می دهد معنای عبارت است، به عنوان مثال، شانس 4 به 1 است. شانس، که برای همه شرطبندان آشناست، نسبت "موفقیت" به "است. شکست ها». از نظر احتمال، شانس، احتمال وقوع یک رویداد تقسیم بر احتمال رخ ندادن رویداد است. بیایید فرمول احتمال وقوع یک رویداد را بنویسیم :
جایی که - احتمال وقوع یک رویداد، - احتمال رخ ندادن یک رویداد
به عنوان مثال، اگر احتمال اینکه اسبی جوان، قوی و بازیگوش با نام مستعار «وتروک»، پیرزنی پیر و شلخته به نام «ماتیلدا» را در مسابقه کتک بزند برابر است با ، پس از آن شانس موفقیت برای "Veterok" خواهد بود к و بالعکس، با دانستن شانس، محاسبه احتمال برای ما دشوار نخواهد بود :
بنابراین، ما یاد گرفتهایم که احتمالات را به شانسها «ترجمه کنیم» که مقادیر را از آنها میگیرند به . بیایید یک قدم دیگر برداریم و یاد بگیریم که احتمال را به کل خط اعداد "ترجمه" کنیم به .
مرحله 2. مقادیر احتمال را به یک محدوده تبدیل کنید
این مرحله بسیار ساده است - بیایید لگاریتم شانس را به پایه عدد اویلر بگیریم. و دریافت می کنیم:
اکنون می دانیم که اگر ، سپس مقدار را محاسبه کنید بسیار ساده خواهد بود و علاوه بر این، باید مثبت باشد: . درست است.
از روی کنجکاوی، بیایید بررسی کنیم که چه می شود ، سپس انتظار داریم یک مقدار منفی ببینیم . بررسی می کنیم: . درست است.
اکنون می دانیم که چگونه مقدار احتمال را از آن تبدیل کنیم به در امتداد کل خط اعداد از به . در مرحله بعدی برعکس عمل می کنیم.
در حال حاضر، ما توجه می کنیم که مطابق با قوانین لگاریتم، دانستن مقدار تابع ، می توانید شانس را محاسبه کنید:
این روش تعیین شانس در مرحله بعد برای ما مفید خواهد بود.
مرحله 3. بیایید یک فرمول برای تعیین استخراج کنیم
بنابراین ما آموختیم، دانستن ، مقادیر تابع را پیدا کنید . با این حال، در واقع، ما دقیقاً برعکس نیاز داریم - دانستن ارزش پیدا کردن . برای انجام این کار، اجازه دهید به مفهومی مانند تابع شانس معکوس بپردازیم که طبق آن:
در مقاله فرمول فوق را استخراج نمی کنیم، اما با استفاده از اعداد مثال بالا آن را بررسی می کنیم. می دانیم که با شانس 4 به 1 (، احتمال وقوع رویداد 0.8 است (). بیایید یک جایگزین انجام دهیم: . این با محاسبات ما که قبلاً انجام شد، همزمان است. بیایید ادامه دهیم.
در مرحله آخر ما این را استنباط کردیم ، یعنی می توانید در تابع شانس معکوس جایگزینی انجام دهید. ما گرفتیم:
صورت و مخرج را بر دو تقسیم کنید ، سپس:
در هر صورت، برای اطمینان از اینکه هیچ جا اشتباهی مرتکب نشده ایم، یک بررسی کوچک دیگر انجام می دهیم. در مرحله 2، ما برای تعیین کرد که . سپس، مقدار را جایگزین کنید ما انتظار داریم وارد تابع پاسخ لجستیک شویم . جایگزین می کنیم و می گیریم:
به خواننده عزیز تبریک می گویم، ما به تازگی تابع پاسخ لجستیک را استخراج و آزمایش کرده ایم. بیایید به نمودار تابع نگاه کنیم.
نمودار 3 "تابع پاسخ لجستیک"
کد برای رسم نمودار
import math
def logit (f):
return 1/(1+math.exp(-f))
f = np.arange(-7,7,0.05)
p = []
for i in f:
p.append(logit(i))
fig, axes = plt.subplots(figsize = (14,6), dpi = 80)
plt.plot(f, p, color = 'grey', label = '$ 1 / (1+e^{-w^Tx_i})$')
plt.xlabel('$f(w,x_i) = w^Tx_i$', size = 16)
plt.ylabel('$p_{i+}$', size = 16)
plt.legend(prop = {'size': 14})
plt.show()
در ادبیات همچنین می توانید نام این تابع را به عنوان پیدا کنید تابع سیگموئید. نمودار به وضوح نشان می دهد که تغییر اصلی در احتمال یک شی متعلق به یک کلاس در محدوده نسبتاً کوچکی رخ می دهد. ، جایی از به .
من پیشنهاد می کنم به تحلیلگر اعتباری خود بازگردید و به او کمک کنید تا احتمال بازپرداخت وام را محاسبه کند، در غیر این صورت او خطر می کند که بدون پاداش باقی بماند :)
جدول 2 وام گیرندگان بالقوه
کد برای تولید جدول
proba = []
for i in df['f(w,x)']:
proba.append(round(logit(i),2))
df['Probability'] = proba
df[['The borrower', 'Salary', 'Payment', 'f(w,x)', 'Decision', 'Probability']]
بنابراین، ما احتمال بازپرداخت وام را تعیین کرده ایم. به طور کلی، به نظر می رسد این درست باشد.
در واقع، احتمال اینکه واسیا با حقوق 120.000 RUR بتواند هر ماه 3.000 RUR به بانک بدهد نزدیک به 100٪ است. به هر حال، ما باید درک کنیم که اگر سیاست بانک، به عنوان مثال، برای وام دادن به مشتریان با احتمال بازپرداخت وام بیش از، مثلاً 0.3، فراهم کند، یک بانک می تواند به لشا وام بدهد. فقط در این مورد بانک ذخیره بزرگتری برای ضررهای احتمالی ایجاد می کند.
همچنین لازم به ذکر است که نسبت حقوق به پرداخت حداقل 3 و با حاشیه 5.000 روبل از سقف گرفته شده است. بنابراین نمیتوانستیم از بردار اوزان به شکل اصلی استفاده کنیم . ما نیاز داشتیم که ضرایب را بسیار کاهش دهیم و در این مورد هر ضریب را بر 25.000 تقسیم کردیم، یعنی در اصل نتیجه را تنظیم کردیم. اما این به طور خاص برای ساده کردن درک مطالب در مرحله اولیه انجام شد. در زندگی، ما نیازی به اختراع و تنظیم ضرایب نخواهیم داشت، بلکه آنها را پیدا می کنیم. در بخشهای بعدی مقاله معادلاتی را استخراج میکنیم که با آن پارامترها انتخاب میشوند .
04. روش حداقل مربعات برای تعیین بردار اوزان در تابع پاسخ لجستیک
ما قبلاً این روش را برای انتخاب بردار وزن ها می شناسیم مانند روش حداقل مربعات (LSM) و در واقع، چرا از آن در مسائل طبقه بندی باینری استفاده نمی کنیم؟ در واقع، هیچ چیز مانع از استفاده شما نمی شود MNC، فقط این روش در مسائل طبقه بندی نتایجی می دهد که دقت کمتری دارند ضرر لجستیک. یک مبنای نظری برای این وجود دارد. بیایید ابتدا به یک مثال ساده نگاه کنیم.
بیایید فرض کنیم که مدل های ما (با استفاده از MSE и ضرر لجستیک) قبلاً انتخاب بردار اوزان را شروع کرده اند و ما محاسبه را در مرحله ای متوقف کردیم. فرقی نمی کند در وسط، در انتها یا در ابتدا، نکته اصلی این است که ما از قبل مقادیری از بردار وزن ها را داریم و فرض می کنیم که در این مرحله، بردار وزن ها برای هر دو مدل هیچ تفاوتی وجود ندارد. سپس وزنه های به دست آمده را بردارید و آنها را جایگزین کنید تابع پاسخ لجستیک () برای برخی از شی که متعلق به کلاس است . ما دو مورد را بررسی می کنیم که مطابق با بردار وزن ها، مدل ما بسیار اشتباه است و بالعکس - مدل بسیار مطمئن است که شی متعلق به کلاس است. . بیایید ببینیم هنگام استفاده چه جریمه هایی صادر می شود MNC и ضرر لجستیک.
کد برای محاسبه جریمه ها بسته به تابع ضرر استفاده شده
# класс объекта
y = 1
# вероятность отнесения объекта к классу в соответствии с параметрами w
proba_1 = 0.01
MSE_1 = (y - proba_1)**2
print 'Штраф MSE при грубой ошибке =', MSE_1
# напишем функцию для вычисления f(w,x) при известной вероятности отнесения объекта к классу +1 (f(w,x)=ln(odds+))
def f_w_x(proba):
return math.log(proba/(1-proba))
LogLoss_1 = math.log(1+math.exp(-y*f_w_x(proba_1)))
print 'Штраф Log Loss при грубой ошибке =', LogLoss_1
proba_2 = 0.99
MSE_2 = (y - proba_2)**2
LogLoss_2 = math.log(1+math.exp(-y*f_w_x(proba_2)))
print '**************************************************************'
print 'Штраф MSE при сильной уверенности =', MSE_2
print 'Штраф Log Loss при сильной уверенности =', LogLoss_2
یک مورد یک اشتباه - مدل یک شی را به یک کلاس اختصاص می دهد با احتمال 0,01
جریمه در استفاده MNC خواهد بود:
جریمه در استفاده ضرر لجستیک خواهد بود:
موردی از اعتماد به نفس قوی - مدل یک شی را به یک کلاس اختصاص می دهد با احتمال 0,99
جریمه در استفاده MNC خواهد بود:
جریمه در استفاده ضرر لجستیک خواهد بود:
این مثال به خوبی نشان می دهد که در صورت خطای فاحش تابع ضرر از دست دادن گزارش مدل را به طور قابل توجهی بیشتر از MSE. اکنون بیایید درک کنیم که پس زمینه نظری استفاده از تابع ضرر چیست از دست دادن گزارش در مسائل طبقه بندی
05. روش حداکثر درستنمایی و رگرسیون لجستیک
همانطور که در ابتدا وعده داده شد، مقاله مملو از مثال های ساده است. در استودیو نمونه دیگری و مهمانان قدیمی وجود دارد - وام گیرندگان بانک: واسیا، فدیا و لشا.
در هر صورت، قبل از توسعه مثال، اجازه دهید به شما یادآوری کنم که در زندگی با یک نمونه آموزشی از هزاران یا میلیون ها شی با ده ها یا صدها ویژگی روبرو هستیم. با این حال، در اینجا اعداد به گونه ای گرفته می شوند که بتوانند به راحتی در سر یک دانشمند داده تازه کار جای بگیرند.
به مثال برگردیم. بیایید تصور کنیم که مدیر بانک تصمیم گرفت برای همه نیازمندان وام صادر کند، علیرغم اینکه الگوریتم به او گفته بود که آن را به لشا ندهد. و اکنون زمان کافی گذشته است و می دانیم که کدام یک از این سه قهرمان وام را بازپرداخت کردند و کدام یک را نکردند. آنچه که انتظار می رفت: واسیا و فدیا وام را بازپرداخت کردند، اما لشا این کار را نکرد. حالا بیایید تصور کنیم که این نتیجه یک نمونه آموزشی جدید برای ما باشد و در عین حال، گویی تمام داده های مربوط به عوامل مؤثر بر احتمال بازپرداخت وام (حقوق وام گیرنده، اندازه پرداخت ماهانه) از بین رفته است. سپس به طور شهودی می توان فرض کرد که هر سومین وام گیرنده وام را به بانک بازپرداخت نمی کند یا به عبارت دیگر احتمال بازپرداخت وام توسط وام گیرنده بعدی وجود دارد. . این فرض شهودی تأیید نظری دارد و بر اساس آن است روش حداکثر احتمال، اغلب در ادبیات به آن می گویند اصل حداکثر احتمال.
ابتدا با دستگاه مفهومی آشنا می شویم.
احتمال نمونه گیری احتمال به دست آوردن دقیقاً چنین نمونه ای، به دست آوردن دقیقاً چنین مشاهدات / نتایجی است، یعنی. حاصل ضرب احتمالات به دست آوردن هر یک از نتایج نمونه (به عنوان مثال، آیا وام Vasya، Fedya و Lesha همزمان بازپرداخت شده است یا بازپرداخت نشده است).
تابع احتمال احتمال یک نمونه را به مقادیر پارامترهای توزیع مرتبط می کند.
در مورد ما، نمونه آموزشی یک طرح برنولی تعمیم یافته است، که در آن متغیر تصادفی تنها دو مقدار را می گیرد: یا . بنابراین، درستنمایی نمونه را می توان به عنوان تابع درستنمایی پارامتر نوشت به شرح زیر است:
مدخل فوق را می توان به صورت زیر تفسیر کرد. احتمال مشترک اینکه واسیا و فدیا وام را بازپرداخت کنند برابر است ، احتمال اینکه لشا وام را بازپرداخت نکند برابر است (از آنجایی که بازپرداخت وام صورت نگرفته است)، بنابراین احتمال مشترک هر سه رویداد برابر است .
روش حداکثر احتمال روشی برای تخمین یک پارامتر مجهول با حداکثر کردن است توابع احتمال. در مورد ما، ما باید چنین مقداری را پیدا کنیم که در آن به حداکثر خود می رسد.
ایده واقعی از کجا می آید - جستجوی مقدار یک پارامتر مجهول که در آن تابع احتمال به حداکثر می رسد؟ خاستگاه این ایده از این ایده ناشی می شود که یک نمونه تنها منبع دانش در دسترس ما در مورد جمعیت است. هر آنچه در مورد جامعه می دانیم در نمونه نشان داده شده است. بنابراین، تنها چیزی که می توانیم بگوییم این است که یک نمونه دقیق ترین بازتاب جامعه در دسترس ما است. بنابراین، ما باید پارامتری را پیدا کنیم که در آن نمونه موجود محتمل ترین باشد.
بدیهی است که ما با یک مسئله بهینه سازی سر و کار داریم که در آن باید نقطه انتهایی یک تابع را پیدا کنیم. برای یافتن نقطه منتهی باید شرط مرتبه اول را در نظر گرفت، یعنی مشتق تابع را با صفر برابر کرد و معادله را با توجه به پارامتر مورد نظر حل کرد. با این حال، جستجو برای مشتق حاصل از تعداد زیادی از عوامل می تواند یک کار طولانی باشد؛ برای جلوگیری از این، یک تکنیک خاص وجود دارد - تغییر به لگاریتم توابع احتمال. چرا چنین انتقالی ممکن است؟ اجازه دهید به این واقعیت توجه کنیم که ما به دنبال افراط در خود تابع نیستیمو نقطه انتهایی، یعنی مقدار پارامتر مجهول که در آن به حداکثر خود می رسد. هنگام حرکت به یک لگاریتم، نقطه اکسترموم تغییر نمی کند (اگرچه خود انتها متفاوت خواهد بود)، زیرا لگاریتم یک تابع یکنواخت است.
بیایید، مطابق با موارد فوق، به توسعه نمونه خود با وام هایی از Vasya، Fedya و Lesha ادامه دهیم. ابتدا به ادامه مطلب می پردازیم لگاریتم تابع درستنمایی:
حالا به راحتی می توانیم عبارت را با استفاده از :
و در نهایت، شرط مرتبه اول را در نظر بگیرید - مشتق تابع را با صفر برابر می کنیم:
بنابراین، برآورد شهودی ما از احتمال بازپرداخت وام از نظر تئوری توجیه شد.
عالی است، اما حالا با این اطلاعات چه کنیم؟ اگر فرض کنیم که هر سومین وام گیرنده پول را به بانک برنگرداند، بانک به ناچار ورشکست خواهد شد. درست است، اما فقط زمانی که احتمال بازپرداخت وام برابر با ما عوامل مؤثر بر بازپرداخت وام را در نظر نگرفتیم: حقوق وام گیرنده و اندازه پرداخت ماهانه. به یاد داشته باشید که ما قبلاً احتمال بازپرداخت وام توسط هر مشتری را با در نظر گرفتن همین عوامل محاسبه کردیم. منطقی است که احتمالاتی متفاوت از برابر ثابت بدست آوریم .
بیایید احتمال نمونه ها را تعریف کنیم:
کد برای محاسبه احتمال نمونه
from functools import reduce
def likelihood(y,p):
line_true_proba = []
for i in range(len(y)):
ltp_i = p[i]**y[i]*(1-p[i])**(1-y[i])
line_true_proba.append(ltp_i)
likelihood = []
return reduce(lambda a, b: a*b, line_true_proba)
y = [1.0,1.0,0.0]
p_log_response = df['Probability']
const = 2.0/3.0
p_const = [const, const, const]
print 'Правдоподобие выборки при константном значении p=2/3:', round(likelihood(y,p_const),3)
print '****************************************************************************************************'
print 'Правдоподобие выборки при расчетном значении p:', round(likelihood(y,p_log_response),3)
احتمال نمونه با مقدار ثابت :
احتمال نمونه هنگام محاسبه احتمال بازپرداخت وام با در نظر گرفتن عوامل :
احتمال یک نمونه با احتمال محاسبه شده بسته به عوامل بیشتر از احتمال با مقدار احتمال ثابت است. این یعنی چی؟ این نشان می دهد که دانش در مورد عوامل امکان انتخاب دقیق تر احتمال بازپرداخت وام را برای هر مشتری فراهم می کند. بنابراین، هنگام صدور وام بعدی، استفاده از مدل پیشنهادی در انتهای بند 3 مقاله برای ارزیابی احتمال بازپرداخت بدهی صحیح تر است.
اما اگر بخواهیم به حداکثر برسیم تابع درستنمایی نمونه، پس چرا از الگوریتمی استفاده نکنیم که احتمالاتی را برای Vasya، Fedya و Lesha تولید کند، به عنوان مثال، به ترتیب برابر با 0.99، 0.99 و 0.01. شاید چنین الگوریتمی روی نمونه آموزشی عملکرد خوبی داشته باشد، زیرا مقدار احتمال نمونه را به ، اما اولاً چنین الگوریتمی به احتمال زیاد با قابلیت تعمیم مشکل خواهد داشت و ثانیاً این الگوریتم قطعاً خطی نخواهد بود. و اگر روش های مبارزه با تمرین بیش از حد (به همان اندازه توانایی تعمیم ضعیف) به وضوح در طرح این مقاله گنجانده نشده است، اجازه دهید نکته دوم را با جزئیات بیشتری مرور کنیم. برای این کار کافیست به یک سوال ساده پاسخ دهید. آیا احتمال بازپرداخت وام توسط واسیا و فدیا با در نظر گرفتن عوامل شناخته شده ممکن است یکسان باشد؟ از نظر منطق سالم، البته نه، نمی تواند. بنابراین واسیا 2.5٪ از حقوق خود را در ماه برای بازپرداخت وام پرداخت می کند، و Fedya - تقریبا 27,8٪. همچنین در نمودار 2 "طبقه بندی مشتری" می بینیم که Vasya از خط جداکننده کلاس ها بسیار دورتر از Fedya است. و در نهایت، ما می دانیم که تابع برای Vasya و Fedya مقادیر متفاوتی می گیرد: 4.24 برای Vasya و 1.0 برای Fedya. حال، اگر مثلاً فدیا یک مرتبه بزرگتر به دست آورد یا درخواست وام کمتری داشت، احتمال بازپرداخت وام برای واسیا و فدیا مشابه خواهد بود. به عبارت دیگر، وابستگی خطی را نمی توان فریب داد. و اگر واقعا شانس را محاسبه کنیم ، و اگر آنها را از هوا خارج نکردیم، می توانیم با خیال راحت بگوییم که ارزش های ماست به بهترین وجه به ما اجازه می دهد تا احتمال بازپرداخت وام توسط هر وام گیرنده را تخمین بزنیم، اما از آنجایی که ما پذیرفتیم فرض کنیم که تعیین ضرایب طبق تمام قوانین انجام شد ، پس ما چنین فرض می کنیم - ضرایب ما به ما امکان می دهد تخمین بهتری از احتمال ارائه دهیم :)
با این حال، ما منحرف می شویم. در این بخش باید بدانیم که بردار وزن ها چگونه تعیین می شود ، که برای ارزیابی احتمال بازپرداخت وام توسط هر وام گیرنده ضروری است.
اجازه دهید به طور خلاصه خلاصه کنیم که با چه زرادخانه ای به دنبال شانس هستیم :
1. فرض می کنیم که رابطه بین متغیر هدف (مقدار پیش بینی) و عامل مؤثر در نتیجه خطی است. به همین دلیل استفاده می شود تابع رگرسیون خطی نوع ، که خط آن اشیاء (کلاینت ها) را به کلاس ها تقسیم می کند и یا (مشتریانی که قادر به بازپرداخت وام هستند و کسانی که قادر به بازپرداخت وام نیستند). در مورد ما، معادله شکل دارد .
2. استفاده می کنیم تابع لاجیت معکوس نوع برای تعیین احتمال یک شی متعلق به یک کلاس .
3. مجموعه آموزشی خود را به عنوان اجرای یک تعمیم یافته در نظر می گیریم طرح های برنولییعنی برای هر شی یک متغیر تصادفی تولید می شود که با احتمال (خود برای هر شی) مقدار 1 و با احتمال می گیرد - 0
4. ما می دانیم که باید چه چیزی را به حداکثر برسانیم تابع درستنمایی نمونه با در نظر گرفتن عوامل پذیرفته شده به طوری که نمونه موجود قابل قبول ترین باشد. به عبارت دیگر، ما باید پارامترهایی را انتخاب کنیم که نمونه در آنها قابل قبول ترین باشد. در مورد ما، پارامتر انتخاب شده احتمال بازپرداخت وام است ، که به نوبه خود به ضرایب مجهول بستگی دارد . بنابراین ما باید چنین بردار وزن ها را پیدا کنیم ، که در آن احتمال نمونه حداکثر خواهد بود.
5. ما می دانیم چه چیزی را به حداکثر برسانیم نمونه توابع احتمال می تواند استفاده کند روش حداکثر احتمال. و ما تمام ترفندهای دشوار کار با این روش را می دانیم.
اینجوری معلوم میشه یه حرکت چند مرحله ای :)
حال به یاد داشته باشید که در همان ابتدای مقاله میخواستیم دو نوع تابع ضرر را استخراج کنیم ضرر لجستیک بسته به نحوه تعیین کلاس های شی. این اتفاق افتاد که در مسائل طبقه بندی با دو کلاس، کلاس ها به عنوان نشان داده می شوند и یا . بسته به نماد، خروجی تابع ضرر مربوطه خواهد داشت.
مورد 1. طبقه بندی اشیاء به и
قبلاً هنگام تعیین احتمال نمونه ای که در آن احتمال بازپرداخت بدهی توسط وام گیرنده بر اساس عوامل و ضرایب داده شده محاسبه می شد. ، فرمول را اعمال کردیم:
واقعا معنی است توابع پاسخ لجستیک برای یک بردار معین از وزن ها
سپس هیچ چیز مانع از نوشتن تابع درستنمایی نمونه به صورت زیر نمی شود:
این اتفاق می افتد که گاهی اوقات برای برخی از تحلیلگران تازه کار دشوار است که فوراً بفهمند این عملکرد چگونه کار می کند. بیایید به 4 مثال کوتاه نگاه کنیم که همه چیز را روشن می کند:
1. اگر (یعنی طبق نمونه آموزشی، شی متعلق به کلاس +1 است)، و الگوریتم ما احتمال طبقه بندی یک شی به یک کلاس را تعیین می کند برابر 0.9 است، سپس این قطعه احتمال نمونه به صورت زیر محاسبه می شود:
2. اگر و ، سپس محاسبه به این صورت خواهد بود:
3. اگر و ، سپس محاسبه به این صورت خواهد بود:
4. اگر و ، سپس محاسبه به این صورت خواهد بود:
واضح است که تابع احتمال در موارد 1 و 3 یا در حالت کلی - با مقادیر درست حدس زده شده احتمالات یک شی به یک کلاس حداکثر می شود. .
با توجه به اینکه هنگام تعیین احتمال انتساب یک شی به یک کلاس ما فقط ضرایب را نمی دانیم ، سپس ما به دنبال آنها خواهیم بود. همانطور که در بالا ذکر شد، این یک مسئله بهینه سازی است که در آن ابتدا باید مشتق تابع درستنمایی را با توجه به بردار وزن ها پیدا کنیم. . با این حال، ابتدا منطقی است که کار را برای خودمان ساده کنیم: ما به دنبال مشتق لگاریتم خواهیم بود. توابع احتمال.
چرا بعد از لگاریتم، در توابع خطای لجستیک، علامت را تغییر دادیم بر . همه چیز ساده است، زیرا در مسائل ارزیابی کیفیت یک مدل مرسوم است که مقدار یک تابع را به حداقل برسانیم، سمت راست عبارت را در ضرب می کنیم. و بر این اساس، به جای حداکثر کردن، اکنون تابع را کمینه می کنیم.
در واقع، در حال حاضر، در مقابل چشمان شما، تابع ضرر به سختی استخراج شده است - ضرر لجستیک برای یک مجموعه آموزشی با دو کلاس: и .
اکنون برای یافتن ضرایب، فقط باید مشتق را پیدا کنیم توابع خطای لجستیک و سپس با استفاده از روش های بهینه سازی عددی مانند گرادیان نزولی یا شیب تصادفی، بهینه ترین ضرایب را انتخاب کنید. . اما، با توجه به حجم قابل توجه مقاله، پیشنهاد می شود که تمایز را به تنهایی انجام دهید، یا شاید این موضوع برای مقاله بعدی با حسابی زیاد بدون چنین مثال های مفصلی باشد.
مورد 2. طبقه بندی اشیاء به и
رویکرد در اینجا مانند کلاس ها خواهد بود и ، اما مسیر خود به خروجی تابع ضرر ضرر لجستیک، آراسته تر خواهد بود. بیا شروع کنیم. برای تابع احتمال از عملگر استفاده خواهیم کرد "اگر پس از آن..."... یعنی اگر شی th متعلق به کلاس است ، سپس برای محاسبه احتمال نمونه از احتمال استفاده می کنیم ، اگر شی متعلق به کلاس باشد ، سپس احتمال را جایگزین می کنیم . تابع احتمال به این صورت است:
اجازه دهید با انگشتان خود نحوه عملکرد آن را شرح دهیم. بیایید 4 مورد را در نظر بگیریم:
1. اگر и ، سپس احتمال نمونه گیری "برود"
2. اگر и ، سپس احتمال نمونه گیری "برود"
3. اگر и ، سپس احتمال نمونه گیری "برود"
4. اگر и ، سپس احتمال نمونه گیری "برود"
بدیهی است که در موارد 1 و 3 که احتمالات به درستی توسط الگوریتم تعیین شده است، تابع احتمال به حداکثر می رسد، یعنی این دقیقاً همان چیزی است که ما می خواستیم به دست آوریم. با این حال، این رویکرد کاملاً دست و پا گیر است و در ادامه یک نماد فشرده تر را در نظر خواهیم گرفت. اما ابتدا اجازه دهید تابع احتمال را با تغییر علامت لگاریتم کنیم، زیرا اکنون آن را به حداقل می رسانیم.
به جای آن بیایید جایگزین کنیم اصطلاح :
بیایید عبارت درست زیر لگاریتم را با استفاده از تکنیک های ساده حسابی ساده کنیم و به دست آوریم:
اکنون زمان خلاص شدن از شر اپراتور است "اگر پس از آن...". توجه داشته باشید که وقتی یک شی متعلق به کلاس است ، سپس در عبارت زیر لگاریتم، در مخرج، به قدرت رساند ، اگر شی متعلق به کلاس باشد ، سپس $e$ به قدرت می رسد . بنابراین، نماد درجه را می توان با ترکیب هر دو حالت در یکی ساده کرد: . سپس تابع خطای لجستیک شکل خواهد گرفت:
مطابق با قوانین لگاریتم، کسر را برگردانده و علامت " را نشان می دهیم." (منهای) برای لگاریتم، دریافت می کنیم:
در اینجا تابع ضرر است ضرر لجستیکی، که در مجموعه آموزشی با اشیاء اختصاص داده شده به کلاس ها استفاده می شود: и .
خب، در این مرحله من مرخصی میگیرم و مقاله را به پایان میرسانیم.
مواد کمکی
1 ادبیات
1) تحلیل رگرسیون کاربردی / N. Draper, G. Smith - 2nd ed. - M.: امور مالی و آمار، 1986 (ترجمه از انگلیسی)
2) نظریه احتمالات و آمار ریاضی / V.E. Gmurman - ویرایش نهم. - م.: دبیرستان، 9
3) نظریه احتمال / N.I. Chernova - Novosibirsk: دانشگاه دولتی نووسیبیرسک، 2007
4) تجزیه و تحلیل تجاری: از داده ها به دانش / Paklin N. B., Oreshkov V. I. - 2nd ed. - سن پترزبورگ: پیتر، 2013
5) علم داده علم داده از ابتدا / جوئل گراس - سن پترزبورگ: BHV Petersburg، 2017
6) آمار عملی برای متخصصان علوم داده / P. Bruce, E. Bruce - St. Petersburg: BHV Petersburg, 2018
2. سخنرانی ها، دوره ها (ویدئو)
1)
2)
3)
4)
5)
3. منابع اینترنتی
1)
2)
4)
5)
8)
منبع: www.habr.com