دوره آموزش ماشین لرنینگ – قسمت نهم
آموزش طبقه بندی (Classification) با استفاده از رگرسیون لجستیک | مرحله به مرحله و با مثال
در این قسمت معرفی و پیاده سازی یکی دیگر از انواع مدل های با ناظر (Supervised machine learning) یعنی طبقه بندی (Classification) و الگوریتم رگرسیون لجستیک می پردازیم.
هدف از اجرای الگوریتم های Classification رده بندی با طبقه بندی داده ها است.
برای اینکه بیشتر با این موضوع آشنا شوید، مثال های زیر را در نظر بگیرید:
- سیستم تشخیص اسپم بودن یا نبودن یک ایمیل
- خوش خیم یا بدخیم بودن یک تومور
در تمام این مثال ها ساختار و خروجی سیستم به گونه ای است که یک جواب صفر یا یک دارد.
y∈{0,1}
که به طور معمول، 0 به معنی جواب منفی و 1 به معنی جواب مثبت است.
برای مثال در مورد موضوع تشخیص تومور، جواب تست می تواند به صورت زیر در نظر گرفته شود:
0: “Negative Class”
1: “Positive Class”
در این مثال ها ما طبقه بندی را با دو متغیر انجام می دهیم که به آن binary classification problem نیز گفته می شود.
مشابه با رگرسیون خطی ساده و چندمتغیره، در مبحث طبقه بندی (Classification) نیز اگر مجموعه جواب مسئله دارای عضوهای بیشتر از 0 و 1 باشد به آن multiclass classification problem گفته می شود.
فهرست عناوین این مطلب
مثال 1. آموزش طبقه بندی (Classification)
مجموعه داده ای داریم که شامل مشخصات تعدادی تومور نمونه برداری شده است. این دیتاست دارای دو ویژگی اندازه تومور و بدخیم بودن یا نبودن آن است.
با توجه به شکل بالا می توان نتیجه گرفت که بین اندازه یک تومور و بدخیم بودن یا نبودن آن یک رابطه احتمالا خطی ؟؟ وجود دارد. به این معنی که هرچه اندازه تومور بزرگتر باشد احتمال بدخیم بودن آن نیز بیشتر می شود.
به این ترتیب آیا ما می توانیم از رگرسیون خطی مثل پیشبینی قیمت خانه، برای پیش بینی بدخیم بودن یا نبودن یک تومور هم استفاده کنیم؟
یعنی یک خط رگرسیون رسم کنیم و نتیجه بگیریم که اگر تومور از یک اندازه مشخصی بزرگتر باشد بدخیم است و اگر کوچکتر باشد، بدخیم نیست. این ایده در شکل زیر نشان داده شده است.
به صورت دقیق تر، تمام آیتم هایی که بیشتر از 0.5 هستند را به عنوان جواب مثبت و یک در نظر بگیریم و به همین ترتیب جواب های کمتر از 0.5 را به عنوان جواب های منفی لحاظ کنیم.
یادآوری: فرضیه (hypothesis) ما در رگرسیون خطی به طور کلی به صورت زیر است.
خب، تا اینجا که ظاهرا همه چیز به خوبی پیش می رود. مقادیر سمت راست حد آستانه (threshold) به عنوان تومورهای بدخیم و آیتم های کمتر از حدآستانه، به عنوان تومورهای غیربدخیم به خوبی از هم تفکیک شده اند.
حالا اگر مقادیر دیتاست به صورت زیر تغییر کند، چه می شود؟؟؟
مثلا تومورهای نمونه برداری شده از نظر اندازه با هم تفاوت زیادی داشته باشند.
مثال 2. آموزش طبقه بندی (Classification)
بر اساس روش مطرح شده باز هم خط رگرسیون را رسم می کنیم.
واضح است که این بار حد آستانه درنظر گرفته شده برای اندازه تومورها به خوبی عمل نمی کند و مدل اجرا شده خطای زیادی دارد.
پس استفاده از رگرسیون خطی برای مسایل مربوط به طبقه بندی داده ها (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.
مثال پیاده سازی رگرسیون لجستیک با استفاده از sklearn بر روی دیتاست Iris
### --- پیاده سازی رگرسیون لجستیک بر روی دیتاست 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_split 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) ### --- رگرسیون لجستیک | 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 ### --- پیاده سازی رگرسیون لجستیک بر روی دیتاست Iris --- end
فایل های مرتبط:
تمام کدهای مربوط به این قسمت و همچنین فایل iris.csv از لینک زیر قابل دسترس هستند:
https://github.com/alifallahi/MachineLearning_Warmup/tree/master/Session9-logistic_regression