فهرست مطالب
Toggleالگوریتم knn چیست؟
k-Nearest Neighbors یا همان knn یک الگوریتم یادگیری ماشینی است که در یادگیری نظارت شده (supervised learning) برای پیشبینی برچسب نقاط داده با مشاهده اکثریت در نزدیکترین همسایهها استفاده میشود. الگوریتمی که از زندگی واقعی سرچشمه می گیرد؛ ضرب المثلی هست که میگه: شخصیت هر فرد، از 5 نفر اطرافش ساخته میشه :))
این یک رویکرد طبقه بندی است و با توجه به مقدار k، الگوریتم k-نزدیکترین همسایه، به آنچه در اطراف خود است نگاه میکند و سپس با شمردن تعداد اعضای هر کلاس، برچسب داده جدید را پیش بینی میکند. به طور مثال در شکل زیر، الگوریتم با مقدار k=5 انجام میشود و پنج نقطه مجاور داده تست انتخاب میشوند.
دایره سمت چپ شامل چهار نقطه قرمز (کلاس +) و یک نقطه آبی (کلاس -) است. بنابراین میتوانیم پیش بینی کنیم که آن نقطه مربوط به کلاس “+” است. همچنین در دایره سمت راست، که تعداد نقاط قرمز یکی بیشتر آبی هاست.
کاربرد الگوریتم knn در تست خون
حال که با کلیت این الگوریتم آشنا شدیم، قصد داریم یک کاربرد عملی از آن در حوزه پزشکی را مطالعه کنیم.
شمارش کامل سلول های خونی یک آزمایش مهم در تشخیص پزشکی برای ارزیابی وضعیت کلی سلامت است. به طور کلی انجام تست خونی با اهداف زیر صورت میگیرد:
- آنالیز وضعیت کلی سلامت بدنی شما
- بررسی احتمال ابتلا به عفونت خاص
- بررسی عملکرد ارگان های مختلف بدن مثل کبد و کلیه
- تشخیص بیماری های مختلف ژنتیکی فرد
به طور سنتی سلول های خونی به صورت دستی با استفاده از هموسیتومتر همراه با سایر تجهیزات آزمایشگاهی و ترکیبات شیمیایی شمارش می شوند که کاری زمان بر و خسته کننده است درحالیکه در این روش، در کمتر از یک ثانیه این کار محقق میشود. در این کار، یک رویکرد یادگیری ماشینی برای شناسایی و شمارش خودکار سه نوع سلول خونی گلبول های قرمز، گلبول های سفید و پلاکت ها با استفاده از الگوریتم تشخیص و طبقهبندی شی YOLO ‘you only look once’ و KNN ارائه میشود.
در این مقاله، از یک رویکرد متفاوت از آنچه که قبلا بوده استفاده شده است و تنها مبتنی بر شبکه های عصبی کانولوشنال (CNN) نیست. که در گام های بعدی به آنها میپردازیم.
گام های انجام پروژه انجام تست خون به کمک knn
گام اول – یولو
اگر بخواهیم توضیح مختصری از YOLO و ویژگی های آن ارائه دهیم، یک ابزار تشخیص و بررسی اشیا به کمک تصاویر است كه YOLO مخفف عبارت ” You Only Look Once” (تشخيص با يك نگاه) است . اين الگوريتم با رگرسیون (و نه کلاسیفیکیشن) میتواند تنها با یک بار نگاه به تصویر (همانطور که از اسم آن مشخص است)، اشیا مورد نظر را در آن پیدا و ردیابی کند. مستقیما از پیکسلهای تصویر به مختصات باکس و احتمال کلاسها میرسد و بسیار سریع و ساده است. الگوریتم YOLO از شبکه های عصبی کانولوشن (CNN) برای شناسایی اشیا در زمان واقعی استفاده می کند. همانطور که از نام آن پیداست، الگوریتم تنها به یک انتشار رو به جلو از طریق یک شبکه عصبی برای شناسایی اشیا نیاز دارد.
ویژگی های بارز یولو به شرح زیر هست:
- سرعت خوب YOLO: اصلی با کارت گرافیک Titan X با سرعت 45 فریمبرثانیه اجرا میشود. نسخه سریع YOLO هم سرعتی بیش از 150 فریمبرثانیه دارد. همچنین میتواند یک ویدئوی 40 فریمبرثانیه را درزمان واقعی (Real Time) ارزیابی کند و به تشخیص اشیا بپردازد.
- دقت تشخیص بالا
- نعمیم بهتر
- 4- متن باز بودن
نحوه عملکرد الگوریتم YOLO
الگوریتم YOLO با استفاده از سه تکنیک زیر کار می کند:
- بلوک های باقی مانده Residual blocks
- رگرسیون جعبه مرزی Bounding box regression
- اشتراك ميان واحدها (IOU) Intersection Over Union
گام دوم – دیتاست
در این پژوهش از دیتاست رایگان (Complete Blood Count) CBC استفاده شده است. شامل 360 تصویر اسمیر خون به همراه فایل های حاشیه نویسی آنها است که به مجموعه های آموزشی (train)، آزمایشی (test) و اعتبار سنجی (cross validation) تقسیم می شوند. پوشه آموزش شامل 300 تصویر با حاشیه نویسی است. پوشه تست و اعتبارسنجی هر دو شامل 60 تصویر با حاشیه نویسی است. این مجموعه برگرفته از Blood Cell Count Dataset (BCCD) میباشد که مقداری اصلاح شده است. میتوانید با کلیک روی تصویر زیر، به آن مراجعه کنید و از آن استفاده کنید.
گام سوم – آموزش روی داده ها
بعد از معرفی دیتاست و ابزار مورد استفاده، نوبت به مرحله آموزش دیدن یا training میرسد. YOLO پنج مقدار را همراه با احتمالات کلاس برای هر باکس پیش بینی می کند. مقادیر احتمال وجود یک شی در یک سلول شبکه، مختصات x و y شی، ارتفاع و عرض جسم (شکل 4). همچنین تعداد فیلترهای را می توان از تعداد جعبه ها و تعداد کلاس ها (مثلا در این مثال سه نوع سلول مورد ارزیابی است) محاسبه کرد.
گام چهارم – بررسی روش پیشنهادی
به کمک یک رویکرد یادگیری ماشین، لایه کانولوشن نهایی را برای سه خروجی تغییر میدهیم، سلولهای خونی را با آستانه مناسب شناسایی میکنیم و آنها را از روی برچسبهایشان میشماریم. در برخی موارد، مدلهای ما دو تشخیص متفاوت برای یک پلاکت واحد ارائه میدهند. ما مشاهده کردیم که دلیل آن تشخیص پلاکت مشابه از دو سلول شبکه متوالی است و بنابراین همان پلاکت دو بار شمارش می شود. برای جلوگیری از این مشکل شمارش مضاعف، الگوریتم KNN را در هر پلاکت اعمال می کنیم و نزدیکترین پلاکت آن را تعیین می کنیم و سپس با استفاده از تقاطع اتحاد (IOU) بین دو پلاکت، میزان همپوشانی آنها را محاسبه می کنیم. با استفاده از مشاهدات تجربی، ما اجازه می دهیم 10٪ از همپوشانی بین پلاکت و نزدیکترین پلاکت آن وجود داشته باشد.
امیدواریم از این مقاله لذت برده باشید و با الگوریتم KNN و استفاده واقعی اون در تشخیص و شمارش سلول های خونی آشنا شده باشید. هرگونه نظری درمورد هر چه بهترشدن محتوای سایت مدنظر دارید را، حتما با ما به اشتراک بگذارید.
لینک دانلود مقاله و کد ها و دیتاست های معرفی شده، در لینک زیر آمده که میتوانید به آنها رجوع کنید.