Machine learning dərs 2 — KNN

Original article can be found here (source): Artificial Intelligence on Medium

Machine learning dərs 2 — KNN

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.

  1. 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.
  2. Ə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.

  1. 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.
  2. 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.

A1

A2

B

3

5

Good

5

6

Bad

4

4

Bad

3

2

Bad

5

7

Good

7

10

Bad

9

3

Good

6

1

Good

5

5

Bad

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.

  1. k=4 seçək.
  2. 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.

R

B

3

Good

7,810249676

Bad

5,656854249

Bad

3,605551275

Bad

8,602325267

Good

12,20655562

Bad

9,486832981

Good

6,08276253

Good

7,071067812

Bad

  1. Ən yaxın 3 nöqtəni seçirik. 3 — Good, 3,605551275 — Bad, 5,656854249 — Bad
  2. 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.

A1

A2

B

3

5

Good

5

6

Bad

4

4

Bad

3

2

Bad

5

7

Good

7

10

Bad

9

3

Good

6

1

Good

5

5

Bad

3

8

Bad

Bu yazıda əslində pythonda stickit-learn vasitəsilə knn-in necə tətqbiq olunduğuna baxmağı planlaşdırırdım. Ancaq stickit-learn kitabxanasını başa düşmək özü çə

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.