K Neirest Neighborhood

Kategori: Machine Learning , 06 Aralık 2019 , JanFranco


Sınıflandırma algoritmalarından K-NN yani K-Nearest Neighbours algoritması ile devam ediyoruz. Algoritmayı anlamak için iki boyutlu bir düzlem düşünelim. İki sınıf ikiye ayrılmış durumda olsun. Yeni bir veri geldiğinde, o verinin düzlemde olduğunu noktaya en yakın k kadar değer bulunur ve hangi değer daha fazlaysa yeni eklenen değer de o sınıfa dahil edilir. Resim üzerinden görelim:

knn

Buradak k değeri 3 alındığı için en yakın 3 komşuya bakıldı. 2 mavi bir turuncu olduğundan yeni eklenen değer mavi sınıfına dahil edildi. Burada k sayısı bir parametredir. Aynı zamanda mesafe de bir parametredir. Bir çok mesafe ölçme yöntemi mevcuttur, euclidean, manhattan, chebyshev, minkowski vs. K-NN modelini Python üzerinden oluşturup, fit edelim, görelim:


import pandas as pd
from sklearn.impute import SimpleImputer
from sklearn.metrics import confusion_matrix
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder, OneHotEncoder

df = pd.read_csv('veriler.csv')

missing = SimpleImputer()
age = df.iloc[:, [3]].values
age = missing.fit_transform(age)
age = pd.DataFrame(data=age, columns=['age'])

labelEncoder = LabelEncoder()
gender = df.iloc[:, [4]].values
gender = labelEncoder.fit_transform(gender.ravel())
gender = pd.DataFrame(data=gender, columns=['gender'])

oneHotEncoder = OneHotEncoder()
country = df.iloc[:, [0]].values
country = oneHotEncoder.fit_transform(country).toarray()
country = pd.DataFrame(data=country, columns=['fr', 'tr', 'us'])

hw = df.iloc[:, [1, 2]].values
hw = pd.DataFrame(data=hw, columns=['height', 'weight'])

df = pd.concat([country, hw, age, gender], axis=1)
print(df)

x = df.iloc[:, [3, 4, 5]]
y = df.iloc[:, [6]]
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=.33, random_state=0)

knn = KNeighborsClassifier(n_neighbors=3, metric='euclidean')
knn.fit(x_train, y_train.values.ravel())
knnRes = knn.predict(x_test)

confusionMatrix = confusion_matrix(y_true=y_test, y_pred=knnRes)
print("***** Confusion Matrix *****")
print("     E   K")
print("E   ", confusionMatrix[0][0], " ", confusionMatrix[0][1])
print("K   ", confusionMatrix[1][0], " ", confusionMatrix[1][1])

>>

     fr   tr   us  height  weight    age  gender
0   0.0  1.0  0.0     130      30  10.00       0
1   0.0  1.0  0.0     125      36  11.00       0
2   0.0  1.0  0.0     135      34  10.00       1
3   0.0  1.0  0.0     133      30   9.00       1
4   0.0  1.0  0.0     129      38  12.00       0
5   0.0  1.0  0.0     180      90  30.00       0
6   0.0  1.0  0.0     190      80  25.00       0
7   0.0  1.0  0.0     175      90  35.00       0
8   0.0  1.0  0.0     177      60  22.00       1
9   0.0  0.0  1.0     185     105  33.00       0
10  0.0  0.0  1.0     165      55  27.00       1
11  0.0  0.0  1.0     155      50  44.00       1
12  0.0  0.0  1.0     160      58  28.45       1
13  0.0  0.0  1.0     162      59  41.00       1
14  0.0  0.0  1.0     167      62  55.00       1
15  1.0  0.0  0.0     174      70  47.00       0
16  1.0  0.0  0.0     193      90  28.45       0
17  1.0  0.0  0.0     187      80  27.00       0
18  1.0  0.0  0.0     183      88  28.00       0
19  1.0  0.0  0.0     159      40  29.00       1
20  1.0  0.0  0.0     164      66  32.00       1
21  1.0  0.0  0.0     166      56  42.00       1
***** Confusion Matrix *****
     E   K
E    1   0
K    0   7
Burada metric ve n_neigbors parametreleri ile oynayarak sonuçları değiştirebilirsiniz. KNeighborsClassifier sınıfından obje türettiğimiz kısma kadarki kod daha önceki yazılarımızda tekrar tekrar kullandığımız koddur. sklearn kütüphanesini de nasıl kullandığımızı gördük. Bu sebeple tekrar açıklama gereği duymuyorum.


Sonraki Yazı: Support Vector Machine
Yorumlar

Henüz bir yorum bulunmuyor.