Mantığını bir türlü anlayamadım. Random_state değerini değiştirdikçe hassasiyette artıp azalıyor. Kısaca açıklayabilecek biri olursa çok memnun olurum
scikit-learn
kullanıyorsunuz değil mi?
train_test_split
'in random_state
'inden bahsediyorsunuz değil mi?
kodunuzu paylaşabilir misiniz?
İkisinde evet
Kodum burada ama daha yeni öğrenmeye başladığım için biraz karışık ve gereksiz şeyler var.
Şimdiden çok teşekkürler
KNN algoritmasının training
kısmında yaptığı kayda değer tek şey veriyi daha sonra hatırlayabilmek adına bir kenarda tutmaktır. Algoritmanın işleyişi aşağı yukarı şu şekilde:
Girdiler:
training_verileri: eğitim için ayrılmış veriler
k: kaç tane komşuya bakılacağı
test_verisi: sınıflandırılmak istenen eleman
Algoritma:
en_yakın_k_komşu = komşuları_bul(test_verisi, training_verileri, kaç_tane=k)
sınıf = çoğunluk_ne_diyor(en_yakın_k_komşu)
Çıktı:
test_verisi'ne komşuların oy çokluğuyla atanan değer
(veya ortalamasıyla eğer regresyon ise)
Dolayısıyla train_test_split
'in elimizdeki tüm veriyi nasıl bir biçimde train
ve test
alt kümelerine ayırdığı önem arz ediyor.
Regresyon üzerinden bir örnek:
Amacımız regresyon olduğunda en yakın k
komşunun değerinin ortalamasını atayabiliriz. Şimdi k = 1
olsun. Dolayısıyla ortalama yok direkt en yakın değer ne ise onu atıyoruz.
-
İlk figürde, kırmızı ile gösterilen 4 adet test verisinin her birine “en sol üstteki” mavi training verisinin değeri atanır. Yaklaşık
-2.1
. Ama gerçek değerler-3, -4
civarlarında: performans kötü olacaktır. -
İkinci figürde, yine kırmızı ile gösterilen 4 adet test verisine en yakın komşuları atanır yine. Komşular gerçek değerlere hayli yakın; sırf talihli bir train/test ayrımı yaptık diye performans yüksek olacaktır.
Bu durum sizin ele aldığınız sınıflandırma olayında da geçerli (görselleştirmesi biraz daha zor o kadar).
Velhasıl, train_test_split
'in random_state
parametresi aha da bu ayrımı gerçekleştirmeyi kontrol ettiği için, farklı performanslar alıyorsunuz.
Peki ne yapmak gerekir? Cross-validation
'a göz atmak isteyebilirsiniz: https://scikit-learn.org/stable/modules/cross_validation.html