آموزش طبقه‌بندی در متلب با مثال KNN

مثال طبقه‌بندی داده در متلب با KNN؛ تعریف ویژگی و برچسب، تفکیک داده‌ها، ماتریس درهم‌ریختگی و محدودیت معیار دقت.

راهنمای آموزشی دیجی‌استاد · حدود 4 دقیقه مطالعه · بررسی منابع:

طبقه‌بندی یعنی انتخاب یک برچسب

فرض کن می‌خواهی برای هر محصول، برچسب «گروه A» یا «گروه B» پیش‌بینی کنی. داده ورودی ویژگی‌های محصول است و خروجی یک کلاس. اگر هدف پیش‌بینی وزن یا دمای محصول باشد، با مسئله رگرسیون روبه‌رو هستی. پیش از انتخاب ابزار، باید این تفاوت را در تعریف مسئله روشن کنی.

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

KNN چه ایده‌ای دارد؟

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

مثال کدنویسی با دو ویژگی

کد زیر صرفاً یک آزمایش با داده مصنوعی است و به Statistics and Machine Learning Toolbox نیاز دارد. تقسیم آموزش و آزمون با برچسب‌ها ساخته می‌شود و استانداردسازی بخشی از مدل آموزش‌دیده است.

rng(13);
X = [randn(80,2); randn(80,2) + 1.8];
Y = categorical([zeros(80,1); ones(80,1)]);
cv = cvpartition(Y,'HoldOut',0.25);
isTrain = training(cv);
isTest = test(cv);
model = fitcknn(X(isTrain,:),Y(isTrain), ...
    'NumNeighbors',5,'Standardize',true);
yHat = predict(model,X(isTest,:));
confusion = confusionmat(Y(isTest),yHat);
disp(confusion);
disp(mean(yHat == Y(isTest)));

یک مثال که دقت ۹۸ درصد را زیر سؤال می‌برد

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

معیاربه چه چیزی کمک می‌کند؟
Accuracyسهم کل پیش‌بینی‌های درست را نشان می‌دهد.
Recall کلاس مثبتمی‌گوید چه سهمی از مثبت‌های واقعی پیدا شده‌اند.
Precision کلاس مثبتمی‌گوید چه سهمی از موارد مثبت اعلام‌شده واقعاً مثبت بوده‌اند.
ماتریس درهم‌ریختگینوع و تعداد اشتباه‌ها را با حفظ کلاس‌ها نشان می‌دهد.

چطور مقایسه منصفانه انجام دهیم؟

  1. برای مقایسه دو مدل، تقسیم داده و معیار اصلی را یکسان نگه دار.
  2. آزمون نهایی را از تنظیم تعداد همسایه‌ها یا انتخاب ویژگی جدا کن.
  3. اگر چند نمونه از یک فرد، دستگاه یا گروه داری، مراقب حضور همان گروه در آموزش و آزمون باش.
  4. برای داده زمانی، آینده را وارد آموزش گذشته نکن.
  5. برچسب کلاس‌ها و ترتیب سطر و ستون ماتریس خطا را هنگام گزارش بنویس.

کدنویسی یا Classification Learner؟

محیط Classification Learner برای مقایسه تعاملی چند مدل و دیدن نتایج مفید است. کدنویسی هم امکان ثبت روشن مراحل و تکرار تحلیل را فراهم می‌کند. به‌جای انتخاب صرفاً بر اساس سلیقه، ببین می‌خواهی داده را اکتشاف کنی، یک فرایند تکراری بسازی یا نتایج را بازتولید کنی.

اگر با ورودی و خروجی یک برنامه راحت نیستی، ابتدا تمرین تابع‌نویسی در متلب را انجام بده. برای مدل دیگر، راهنمای شبکه عصبی قدم بعدی مناسبی است.

پرسش‌های رایج

KNN بهتر است یا شبکه عصبی؟

بدون شناخت داده و مقایسه معتبر نمی‌توان حکم کلی داد. یک تقسیم و معیار مشترک انتخاب کن و هزینه، خطا و نیاز به توضیح‌پذیری را کنار هم بسنج.

دوره مرتبط: آموزش متلب از مقدماتی تا پیشرفته