Bilişim dünyasına kaliteli, özgün ve Türkçe içerikler kazandırmayı hedefleyen bir platform..

friends friends friends

k-En Yakın Komşu Algoritması (KNN)✨

k-En Yakın Komşu Algoritması (k-Nearest Neighbor Algorithm) uzaklık hesaplamasına dayalı geliştirilen bir sınıflandırma yöntemidir, benzerliğe dayalı bir algoritmadır. Sınıfı bilinmeyen verinin diğer verilere olan uzaklıklarının hesaplanarak, en yakın sınıfa dahil edilmesi mantığına dayanır. O yüzden öncelikle veriler arasındaki uzaklıkların hesaplanmasında kullanılan yaygın yöntemler üzerinde durulmalıdır.

Hangi uzaklık ölçüsünü kullanacağınızı bilmenizde fayda var: Öklid Mesafesi, Minkowski uzaklık, Manhattan uzaklık, Jaccard katsayısı

The 'metric' parameter of KNeighborsClassifier must be a str among {'l2', 'sokalmichener', 'p', 'infinity', 'matching', 'chebyshev', 'l1', 'euclidean', 'canberra', 'mahalanobis', 'nan_euclidean', 'minkowski', 'rogerstanimoto', 'precomputed', 'hamming', 'jaccard', 'yule', 'dice', 'wminkowski', 'cityblock', 'kulsinski', 'sqeuclidean', 'correlation', 'pyfunc', 'russellrao', 'sokalsneath', 'cosine', 'manhattan', 'haversine', 'seuclidean', 'braycurtis'}

Python İle KNN Sınıflandırma

Backward Elimination-Geri Eleme
Veri Kümesi: veriler.csv (indirmek için tıklayınız)
#1. kutuphaneler
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

veriler=pd.read_csv("veriler.csv")
#ulke,boy,kilo,yas,cinsiyet
x=veriler.iloc[:,1:4].values
y=veriler.iloc[:,4:].values

#Şimdi Train ve Test olarak ayırma işlemi yapalım
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.33,random_state=0)

#STANDARTLAŞTIRMA
from sklearn.preprocessing import StandardScaler
sc=StandardScaler()
X_train=sc.fit_transform(x_train)#fit_transform
X_test=sc.transform(x_test)#transform

#KNN
from sklearn.neighbors import KNeighborsClassifier
knn_r=KNeighborsClassifier(n_neighbors=1,metric='minkowski')
knn_r.fit(X_train,y_train)#X den Y öğren

#şimdi öğrendiğin bilgi ile predict-tahmin yap
y_pred=knn_r.predict(X_test)
print(y_pred)
print(y_test)
#CONFUSION MATRİX-HATA MATRİSİ
from sklearn.metrics import confusion_matrix
cm=confusion_matrix(y_test,y_pred)
print(cm)
KNN-algoritması

K-En Yakın Komşu (KNN), benzerlik ilkesine dayanan basit ve sezgisel bir denetimli makine öğrenmesi algoritmasıdır. Hem sınıflandırma hem de regresyon problemlerinde kullanılabilir.

Hayal edin ki elinizde kırmızı ve mavi noktaların bulunduğu bir dağılım grafiği var. Bu noktalar, kırmızı olanlar bir sınıfı, mavi olanlar ise başka bir sınıfı temsil ediyor. Şimdi elinize daha önce hiç görmediğiniz yeni bir nokta geçti ve bu noktanın hangi sınıfa ait olduğunu tahmin etmek istiyorsunuz.

İşte KNN bu noktada devreye giriyor: Bu yeni veriye en yakın olan “K” adet komşu noktayı buluyor (K, sizin belirlediğiniz bir hiperparametredir). Diyelim ki K = 3 ve bu yeni noktaya en yakın 3 noktadan 2’si kırmızı, 1’i mavi.

Bu durumda KNN, yeni noktayı çoğunluk olan sınıfa (kırmızıya) atar. Yani kısaca: “En yakın komşuların kimse, sen de onlardansın” mantığıyla çalışır.

K-En Yakın Komşu (K-NN) Algoritması ile Satın Alma Tahmini

1. Giriş

Bu döküman, Social_Network_Ads.csv veri kümesindeki yaş ve maaş bilgilerine göre satın alma tahminini yapmak amacıyla bir K-En Yakın Komşu (K-NN) sınıflandırıcısının uygulanmasını açıklamaktadır. İş akışı veri ön işleme, model eğitimi, değerlendirme ve analiz adımlarını içerir.

2. Kütüphanelerin Yüklenmesi

Aşağıdaki Python kütüphaneleri kullanılmaktadır:


import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler

3. Veri Kümesinin Yüklenmesi

Veri kümesi yüklenir ve ilk 5 satır görüntülenir:


import kagglehub

# Download latest version
path = kagglehub.dataset_download("akram24/social-network-ads")

print("Path to dataset files:", path)
df = pd.read_csv("/kaggle/input/social-network-ads/Social_Network_Ads.csv")
df.head()

Çıktı (ilk 5 satır):

User ID	Gender	Age	EstimatedSalary	Purchased
0	15624510	Male	19	19000	0
1	15810944	Male	35	20000	0
2	15668575	Female	26	43000	0
3	15603246	Female	27	57000	0
4	15804002	Male	19	76000	0

USER ID kullanılmayacağı için çıkarılmalı:


#Kullanılmayacak User ID sütununu çıkar
df = df.drop("User ID", axis=1)

Gender sütunu one-hot encoding yapılmalı


df = pd.get_dummies(df, columns=['Gender'], drop_first=True)

Öznitelikler X (Age, EstimatedSalary, Gender_Male) ve hedef Y(Purchased) değişkenleri ayrılır:


# X: Purchased hariç tüm sütunlar
X = df.drop("Purchased", axis=1).values

# Y: Doğrudan sütun adıyla al
Y = df["Purchased"].values

4. Veri Kümesinin Bölünmesi

Veri kümesi %80 eğitim ve %20 test olarak bölünür:


X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2, random_state=45)

5. Özellik Ölçekleme

Özellikler, K-NN’in mesafe metriğinin ölçekten etkilenmemesi için standartlaştırılır:


Sc = StandardScaler()
X_train = Sc.fit_transform(X_train)
X_test = Sc.transform(X_test)

6. K-NN Modelinin Eğitilmesi

K-NN sınıflandırıcısı, 5 komşu ile ve Öklid uzaklığı metriği kullanılarak eğitilir:


classifier = KNeighborsClassifier(n_neighbors=5, metric="minkowski", p=2)
classifier.fit(X_train, Y_train)

7. Yeni Bir Sonucun Tahmini

Yeni bir veri (Age=30, EstimatedSalary=87000, Gender_Male=True) için modelin tahmini:


print(classifier.predict(Sc.transform([[30, 87000,True]])))

Çıktı: [0]

8. Test Sonuçlarının Tahmini

Modelin test verisi üzerindeki tahminleri ve gerçek değerler karşılaştırılır:


y_pred = classifier.predict(X_test)
print(np.concatenate((y_pred.reshape(len(y_pred), 1), Y_test.reshape(len(Y_test), 1)), 1))

Çıktı (ilk 5 satır):

[[1 1]
 [1 1]
 [0 0]
 [1 1]
 [0 0]]

9. Karışıklık Matrisi Oluşturulması

Modelin başarımı karışıklık matrisi ve doğruluk skoru ile değerlendirilir:


from sklearn.metrics import confusion_matrix, accuracy_score
cm = confusion_matrix(Y_test, y_pred)
print(cm)
accuracy_score(Y_test, y_pred)

Çıktı:

[[45  3]
 [ 3 29]]

Doğruluk: 0.925 (92.5%)

10. Analiz

K-NN sınıflandırıcısı test kümesinde %92.5 doğruluk elde eder. 45 doğru negatif, 29 doğru pozitif, 3 yanlış pozitif ve 3 yanlış negatif gözlemlenmiştir. Bu yüksek doğruluk, yaş ve maaş gibi sayısal özniteliklerin sınıfları etkili bir şekilde ayırdığını gösterir. Ancak, 6 yanlış sınıflandırma modeli iyileştirme fırsatlarına (komşu sayısının ayarlanması, özellik etkileşimlerinin analiz edilmesi gibi) işaret eder.

Kaynaklar

  1. https://www.youtube.com/watch?v=NEAxrOP_OT0
  2. https://ichi.pro/tr/k-en-yakin-komsular-ile-k-ortalama-kumeleme-arasindaki-fark-nedir-36508279026525
  3. https://twitter.com/levikul09/status/1672896169763303424
  4. https://machinelearningmastery.com/types-of-classification-in-machine-learning/
  5. https://www.digitalocean.com/community/tutorials/k-nearest-neighbors-knn-in-python
  6. https://www.instagram.com/reels/DVai_Atkjf3/
k en yakın komşu algoritması Makine Öğrenmesi Yapay Zeka Machine Learning KNN Veri bilimi
0 Beğeni
Makine Öğrenmesi
Önceki Yazı

Naive Bayes sınıflandırıcı

12 Nis. 2020 tarihinde yayınlandı.
Sonraki Yazı

Adaboost Algoritması

12 Nis. 2020 tarihinde yayınlandı.
arrow