Machine learning dərs 2 — KNN
Əvvəlki dərsdə machine learning haaqında qısa məlumat vermişdik. İndi isə supervised learning alqoritmlərindən KNN — K-nearest neigherborhood (Ən yaxın qonşu) alqoritminə baxaq. Hər şeydən əvvəl bu sinifləndirmə alqoritmidir. Bundan əlavə reqresiya üçün də istifadə olunur. Machine learning-də ən sadə alqoritmlərdən biri sayılır. Knn verilən dataları öyrənmir əgər biz sinifləndirmə etməsini istəyiriksə verilən datada hər dəfə ən yaxın qonşuları axtarır tapır və ona görə sinifləndirmə aparır. KNN alqoritminin addımlarını bu şəkildə yazmaq olar.
- k parametrinin təyin edilməsi — Bu mərhələdə k parametri təyin edilir. Bu o deməkdir ki verilən nöqtənin ən yaxın qonşu nöqtələri dedikdə k qədər ən yaxın nöqtələrə baxılmalıdır. Tutaq ki k=5 təyin olunubsa onda ən yaxın 5 nöqtəyə baxılır və bu nöqtələrə görə sinifləndirmə edilir.
- Ən yaxın nöqtələrə qədər məsafənin hesablanması — Bu mərhələdə yeni daxil olunmuş (hələ ki sinifləndirilməmiş) nöqtənin qonşu nöqtələrə qədər olan məsafələri hesablanır. Məsafə hesablamaq üçün müxtəlif yollar var. Ən çox işlənilən 3 yol bunlardır.
1. Ekvlid uzaqlığı — İki ölçülü ekvlid uzaqlığını bu şəkildə hesablaya bilərik.
Deyək ki koordinat sistemində A(1,5) nöqtəsinin B(5,8) nöqtəsinə olan uzunluğunu hesablamaq lazımdır. Hesablama aşağıdakı şəkildə olacaq.
sqrt((5–1)²+(8–5)²)=sqrt(4²+3²)=5
2. Manhattan uzaqlığı — Bu şəkildə hesablanır.
Yuxarıdakı nöqtələrin arasındakı məsafəni manhattan ilə tapaq.
A(1,5)-B(5,8)=|5–1|+|8–5|=7
3. Minkowski uzaqlığı — Bu şəkildə hesablanır.
Əslində bu düstur məsafə hesablamanın ümumi halıdır. Diqqət yetirsək görərik ki q=1 olanda Manhattan məsafəsinin , q=2 olanda isə ekvlid məsafəsinin düsturu alınır. q sonsuzluğa çatanda limit hesablayan halda da Chebyshev düsturu alınır.
3. k parametri verildikdən və uzaqlıqlar tapıldıqdan sonra müqayisə edərək ən yaxın k qonşu nöqtəni tapa bilərik.
4. Yeni nöqtəmiz bu tapılmış ən yaxın qonşuların aid olduqları sinifə görə sinifləndirilmiş olur. Yəni ın yaxın qonşuda hansı sinifdən çox element varsa yeni nöqtə də o sinifə aid olacaq.
İndi isə bir nümunəyə baxaq. Tutaq ki aşağıdakı şəkildə datamız var.
Indi yeni A(3,8) nöqtəsi əlavə etmək istiyirk və sinifləndirmək istəyirik. Yuxarıda dediyimiz kimi 4 addımda bunu edək.
- k=4 seçək.
- Məsafə olaraq ekvlid məsafəsini hesablayaq. Yeni nöqtəmizin bütün nöqtələrə olan məsafəsini tapaq. Yuxarıda ekvlid məsafəsinin düsturu yazılıb. Mən exceldə eyni düsturu tətbiq edib alınan cədvəli bura kopyaladım.
3. Ən yaxın 3 nöqtəni seçirik. 3 — Good, 3,605551275 — Bad, 5,656854249 — Bad
4. 3 ən yaxın qonşu nöqtədən 2-si Bad, 1-i Good dəyərinə bərabərdir. Deməli yeni əlavə edəcəyəmiz nöqtə Bad dəyərində olmalıdır.
Bu yazıda əslində pythonda stickit-learn vasitəsilə knn-in necə tətqbiq olunduğuna baxmağı planlaşdırırdım. Ancaq scikit-learn kitabxanasını başa düşmək özü çətin məsələ olduğundan onu ayrıca bir stickit-learn dərslər toplusunda yazmağı qərara aldım. O məqalə hazır olanda linkini bura atacam.
KNN alqoritmində əsas məsələ k parametrinin düzgün seçilməsidir. Bundan əlavə knn-in zəif tərəfi odur ki hər dəfə bütün datadakı məlumatlarla yeni əlavə olunan məlumat arasında məsafə hesablanır. Buna görə KNN ən sadə alqoritm olmaqla yanaşı həmdə bu səbəblərdən çox istifadə edilməyən alqoritmdir.