Ağırlıklandırma: Birbirine yakın noktaların daha fazla ağırlık alabilmesi için her noktanın mesafesine bir ağırlık ekleyin Burada nasıl ağırlık verileceği açıklanmıştır.
Ters fonksiyon
Bu yöntemin en basit şekli, mesafe d, ağırlık 1 / d gibi mesafenin tersini döndürmektir. Bazen tamamen aynı veya çok yakın olan ürünlerin ağırlığı çok büyük hatta sonsuz olacaktır. Bu nedenle, mesafenin tersini hesaplarken mesafeye bir sabit ekleyin:
ağırlık = 1 / (mesafe + sabit)
Bu yöntemle ilgili olası sorun, komşulara büyük bir ağırlık vermesi ve uzak olanların hızla çürümesidir. İstediğimiz bu durum olsa da bazen algoritmayı gürültülü verilere daha duyarlı hale getiriyor.
Gauss işlevi
Gauss işlevi daha karmaşıktır, ancak yukarıda belirtilen işlevin eksikliklerinin, biçiminin üstesinden gelir:
Nerede a, b, c R
Gauss fonksiyonunun grafiği ters çevrilmiş bir saat şeklindedir. a eğrinin yüksekliğidir, b x ekseni üzerindeki eğrinin merkez çizgisinin ofsetidir ve c yarım genişliktir (fonksiyon tepe noktasının yarısı arasındaki genişlik).
Yarı genişlik
def gaussian (dist, a = 1, b = 0, c = 0.3):
return a * math.e ** (- (dist-b) ** 2 / (2 * c ** 2))
Yukarıdaki Gauss fonksiyonunun, mesafe 0 olduğunda ağırlığı 1'dir. Mesafe arttıkça ağırlık azalır, ancak 0 olmaz. Aşağıdaki şekil, Gauss işlevi ile diğer birkaç işlev arasındaki farkı göstermektedir: Mesafe belirli bir ölçüde arttığında, diğer işlevlerin ağırlığı 0'a veya altına düşer.
hesaplama süreci
Ağırlıklı kNN önce sıralanmış mesafe değerini ve ardından en yakın k elemanı alır.
1. Ayrık verileri işlerken, bu k verisine ağırlıklarla farklı şekilde davranın ve tahmin sonucunun n'inci verinin etiketiyle aynı olma olasılığı:
Hangi sınıfın en büyük olduğu, hangi sınıfa ait olduğu her sınıfın tahmin edilen ağırlık değerlerini ekleyin.
f (x) = Wi, x sınıfına aittir / Wi toplamı i = 1,2, ..., k
2. Sayısal verilerle uğraşırken, bu k verisinin basit bir ortalaması değil, ağırlıklı ortalamadır: her bir öğenin değerini karşılık gelen ağırlıkla çarparak ve ardından sonucu toplayarak. Toplamı bulduktan sonra, tüm ağırlıkların toplamına bölün.
f (x) = Wi * Vi toplamı / Wi toplamı i = 1,2, ..., k
Vi, komşu i'nin değerini temsil eder, Wi onun ağırlığını temsil eder ve f (x) tahmin edilen sayısal sonuçtur. Yeni bir numunenin kategorisi tahmin edilirken, genel numune taranacaktır.KNN'nin verimliliğinin aslında çok düşük olduğu görülebilir.
---------------------
Orijinal: https://blog.csdn.net/weixin_41770169/article/details/81560946