آموزش طبقه بندی (Classification) با استفاده از رگرسیون لجستیک | مرحله به مرحله و با مثال

بعد از یادگیری رگرسیون خطی نوبت به Classification می رسد.برای اینکه بیشتر با این موضوع آشنا شوید، مثال های زیر را در نظر بگیرید:سیستم تشخیص اسپم بودن یا نبودن یک ایمیلخوشخیم یا بدخیم بودن یک توموردر تمام این مثال ها ساختار و خروجی سیستم به گونه ای است که یک جواب صفر یا یک دارد. y∈{0,1}که به طور معمول، 0 به معنی جواب منفی و 1 به معنی جواب مثبت است. برای مثال در مورد موضوع تشخیص تومور، جواب تست می تواند به صورت زیر در نظر گرفته شود:0: "Negative Class" 1: "Positive Class"در این مثال ها ما طبقه بندی را با دو متغیر انجام می دهیم که به آن binary classification problem نیز گفته می شود.مشابه با رگرسیون خطی ساده و چندمتغیره، در مبحث طبقه بندی (Classification) نیز اگر مجموعه جواب مسئله دارای عضوهای بیشتر از 0 و 1 باشد به آن multiclass classification problem گفته می شود.مثال 1:مجموعه داده ای داریم که شامل مشخصات تعدادی تومور نمونه برداری شده است. این دیتاست دارای دو ویژگی اندازه تومور و بدخیم بودن یا نبودن آن است.با توجه به شکل بالا می توان نتیجه گرفت که بین اندازه یک تومور و بدخیم بودن یا نبودن آن یک رابطه احتمالا خطی ؟؟ وجود دارد. به این معنی که هرچه اندازه تومور بزرگتر باشد احتمال بدخیم بودن آن نیز بیشتر می شود. به این ترتیب آیا ما می توانیم از رگرسیون خطی مثل پیشبینی قیمت خانه، برای پیش بینی بدخیم بودن یا نبودن یک تومور هم استفاده کنیم؟یعنی یک خط رگرسیون رسم کنیم و نتیجه بگیریم که اگر تومور از یک اندازه مشخصی بزرگتر باشد بدخیم است و اگر کوچکتر باشد، بدخیم نیست. این ایده در شکل زیر نشان داده شده است.به صورت دقیق تر، تمام آیتم هایی که بیشتر از 0.5 هستند را به عنوان جواب مثبت و یک در نظر بگیریم و به همین ترتیب جواب های کمتر از 0.5 را به عنوان جواب های منفی لحاظ کنیم.یادآوری: فرضیه (hypothesis) ما در رگرسیون خطی به صورت زیر است.خب، تا اینجا که ظاهرا همه چیز به خوبی پیش می رود. مقادیر سمت راست حد آستانه (threshold) به عنوان تومورهای بدخیم و آیتم های کمتر از حدآستانه، به عنوان تومورهای غیربدخیم به خوبی از هم تفکیک شده اند.حالا اگر مقادیر دیتاست به صورت زیر تغییر کند، چه می شود؟؟؟مثلا تومورهای نمونه برداری شده از نظر اندازه با هم تفاوت زیادی داشته باشند.مثال 2:بر اساس روش مطرح شده باز هم خط رگرسیون را رسم می کنیم.واضح است که اینبار حد آستانه درنظر گرفته شده برای اندازه تومورها به خوبی عمل نمی کنه و مدل اجرا شده خطای زیادی دارد.پس استفاده از رگرسیون خطی برای مسایل مربوط به طبقه بندی داده ها (Classification) راهکار مناسبی نیست. (اگرچه ممکن است در برخی موارد با توجه به مقادیر دیتاست، مشابه آنچه در مثال اول اتفاق افتاد، رگرسیون خطی نتیجه مناسبی در طبقه بندی داده ها ارایه دهد.)نکته دیگر این است که در مسایل طبقه بندی جواب های ما همواره بین صفر یا یک است. ولی هیچ تضمینی وجود ندارد که جواب های رگرسیون خطی در این بازه محدود شوند.راه حل، استفاه از رگرسیون لجستیک (Logistic regression) است.رگرسیون لجستیک یک راهکار مناسب برای مسایل طبقه بندی (Classification) است. مقادیر این مساله به صورت گسسته هستند (discrete values) و نکته مهم اینکه خروجی لجستیک رگرشن محدود به 0 و 1 است.تابع فرضیه ما در رگرسیون لجستیک دارای شکل کلی زیر است، که به آن تابع سیگومید (sigmoid function) یا تابع لجستیک (logistic function) می گوییم.فرمول رگرسیون لجستیک رگرسیون لجستیک دارای فرمول کلی زیر است.در این فرمول e نماد عدداویلر و دارای مقدار ثابت 2.718281828459 است.حرف z نیز به معنی همان تابع رگرسیون خطی است. در واقع خواهیم داشت:و همانطور که گفته شد خروجی این تابع در بازه صفر تا یک است.به معنی اگر در سیستم بررسی بدخیم بودن تومور که در آن عدد 1 به معنی بدخیم بودن و 0 به معنی بدخیمنبودن است، اگر خروجی تابع در نتیجه بررسی یک تومور 0.7 بود، یعنی به احتمال 70% تومور موردنظر یک تومور بدخیم است.این تعریف را در زبان ریاضی به صورت زیر نشان می دهیم:عبارت بالا را اینگونه می خوانیم:احتمال اینکه y به ازای x های داده شده و بر حسب پارامتر تتا، برابر با 1 باشد. و براساس مثال بدخیم بودن یا نبودن تومور:This is the probability that y is equal to one. Given x, given that my patient has features x, so given my patient has a particular tumor size represented by my features x. And this probability is parameterized by theta.واضح است که اگر احتمال بدخیم بودن تومور موردنظر 0.7 باشد P (y = 1∣ x ; θ ) =0.7احتمال بدخیم نبودن این تومور 0.3 است. P (y = 0∣ x ; θ ) =0.3در واقع می توان گفت که مجموع احتمال بدخیم بودن و نبودن یک تومور باید 1 باشد. 0.7 + 0.3 = 1چرا که مقدار y برای رگرسیون لجستیک همواره بین صفر و 1 است.آپدیت: 26 اسفند 1400اضافه کردن کدهای پیاده سازی رگرسیون لجستیک با استفاده از sklearn بر روی دیتاست iris ###I --- پیاده سازی رگرسیون لجستیک بر روی دیتاست iris --- start ### --- Running logistic regression on the iris dataset --- start import pandas as pd iris = pd.read_csv('iris.csv') iris.head() from sklearn.model_selection import train_test_spli from sklearn.linear_model import LogisticRegression y = iris.variety features = ['sepal.length','sepal.width','petal.length','petal.width'] X = iris[features] train_X, val_X, train_y, val_y = train_test_split(X, y, test_size=0.4, random_state=1) ###I --- رگرسیون لجستیک | Logistic regression dt_model = LogisticRegression() dt_model.fit(train_X, train_y) val_predictions = dt_model.predict(val_X) from sklearn import metrics print(metrics.accuracy_score(val_y, val_predictions)) ### --- Running logistic regression on the iris dataset --- end ###I --- پیاده سازی رگرسیون لجستیک بر روی دیتاست iris --- end