KNN'de bağlarla, ağırlıklarla oylama ve oylama


15

Bir kNN algoritması programlıyorum ve aşağıdakileri bilmek istiyorum:

Tie-sonları:

  1. Çoğunluk oylamasında net bir kazanan yoksa ne olur? Örneğin, en yakın tüm k komşuları farklı sınıflardan veya k = 4 için A sınıfı 2 komşu ve B sınıfı 2 komşu var mı?
  2. Aynı mesafeye sahip daha fazla komşu olduğu için en yakın komşuları tam olarak belirlemek mümkün değilse ne olur? Mesafelerin listesi için, (x1;2), (x2;3.5), (x3;4.8), (x4;4.8), (x5;4.8), (x6;9.2)en yakın komşuları k = 3 veya k = 4 olarak belirlemek mümkün olmayacaktır, çünkü 3. ila 5. komşuların hepsi aynı mesafeye sahiptir.

Ağırlıklar:

  1. Kazanan sınıfı seçmeden önce en yakın k komşularına ağırlık vermenin iyi olduğunu okudum. Bu nasıl çalışıyor? Yani komşular nasıl ağırlıklı ve sınıf nasıl belirleniyor?

Çoğunluk oy alternatifleri:

  1. Kazanan sınıfı belirlemek için oy çokluğu dışında başka kurallar / stratejiler var mı?

Yanıtlar:


7

Bir bir kravat kırmaya ideal yolu k Bence komşu en yakın azalma olacağını k sen kravat kırık kadar 1 ile. Bu, oylama ağırlıklandırma şemasından bağımsız olarak her zaman işe yarayacaktır, çünkü k = 1 olduğunda bir kravat imkansızdır . Eğer ağırlıklandırma şemanızı ve kategori sayınızı bekleyen k değerini artıracaksanız , bir kravat kırılmasını garanti edemezsiniz.


12
k = 1 olduğunda neden kravat imkansızdır, aynı mesafede farklı sınıflara ait iki komşu varsa, k = 1 ile en yakın komşuyu nasıl belirlersiniz?
j5shi

7

KNN yaparken, bir şeyi aklınızda tutmanız gerekir, yani bu, kesinlikle matematiksel olarak türetilmiş bir algoritma değil, bir sezgiye dayanan basit bir sınıflandırıcı / regresördür - bağımsız değişkenler değişmediğinde temel işlev çok fazla değişmez çok. Başka bir deyişle, altta yatan işlev yerel olarak neredeyse sabittir. Bu varsayımla, herhangi bir noktada altta yatan işlevin değerini, en yakın k noktasının değerlerinin (muhtemelen ağırlıklı) ortalamasıyla tahmin edebilirsiniz.

Bunu akılda tutarak, çoğunluk oylamasında net bir kazanan olmadığında ne yapılacağı konusunda açık bir zorunluluk olmadığını fark edebilirsiniz. Her zaman tek bir k kullanabilir ya da bazı tarafsız ağırlık kullanabilirsiniz.

3 ila 5 arasındaki komşuların ilgilenilen noktadan aynı mesafede olması durumunda, ya yalnızca ikisini kullanabilir ya da 5'in tümünü kullanabilirsiniz. basit sezgi. Bu özel durumlarla nasıl başa çıkmak istediğiniz size kalmış.

1||xy||2

Ayrıca, bu yıl Samory Kpotufe ve Abdeslam Boularias tarafından NIPS ile ilgili doğru ağırlıklandırma konusuna değinen güzel bir makale de vardı. Genel sezgileri, altta yatan fonksiyonun farklı yönlerde (yani, farklı kısmi türevlerinin farklı büyüklükte) farklı olması, dolayısıyla bir anlamda bu sezgiye göre metriklerin / ağırlığın değiştirilmesinin akıllıca olacağıdır. Bu hile genellikle kNN ve çekirdek regresyonunun performansını geliştirdiğini iddia ediyorlar ve bence bu iddiayı desteklemek için bazı teorik sonuçlar bile var (bu teorik sonuçların gerçekte ne iddia ettiğinden emin olmasam da, gidecek zamanım yoktu) henüz tüm makalede). Makale, sitelerinden ücretsiz olarak indirilebilir veya Google Gradient Ağırlıkları Parametrik Olmayan Regresörlere yardımcı olur.

Şimdi, muhtemelen çekilişler varken gerçekleştirilecek doğru k, metrik, ağırlıklandırma, eylemi nasıl bulabileceğinizi bilmek isteyeceksiniz. Üzücü olan şey, bazı derin düşüncelerden sonra doğru hiperparametrelere ulaşmak temel olarak zor, muhtemelen farklı hiperparametreler demetlerini test etmeniz ve hangilerinin bazı doğrulama setlerinde iyi çalıştığını görmeniz gerekecek. Bazı hesaplama kaynaklarınız varsa ve iyi bir hiperparametre kümesinde otomatik olarak doğru parametrelere ulaşmak istiyorsanız, Gauss işlemlerini bu ortamda türevsiz optimizasyon için kullanmak için yakın zamanda bir fikir var.

Ayrıntıya gireyim - hiperparametreler setini bulmak (yani, doğrulama verilerindeki hatayı en aza indirgemek), bir optimizasyon problemi olarak görülebilir. Ne yazık ki, bu ayarda optimize etmeye çalıştığımız işlevin gradyanını elde edemiyoruz (bu genellikle yapmak istediğimiz, gradyan inişini veya bazı daha gelişmiş yöntemleri gerçekleştirmek için). Gauss süreçleri, bu noktada, büyük şansı olan hiperparametre kümelerini bulmak için, noktaya kadar bulduğumuz en iyi olanlardan daha iyi performans göstermek için kullanılabilir. Bu nedenle, algoritmayı bazı hiperparametreler kümesiyle tekrar tekrar çalıştırabilir, ardından Gauss işlemine hangilerinin daha sonra denemek için en iyi olacağını, bunları deneyip, vb.

Ayrıntılar için, Jasper Snoek, Hugo Larochelle ve Ryan P Adams'ın (ayrıca web sitelerinde veya Google üzerinden de bulunacak) "Makine Öğrenim Algoritmalarının Pratik Bayesci Optimizasyonu" makalesine bakın.


2
Uyarı: hiperparametreleri, doğrulama setinde en iyi doğruluğa sahip olacak şekilde optimize etmek, fazla takılmış unutulmanın düz bir yoludur. Yuvalanmış CV istiyorsunuz.

Kısa bir not, "tek bir k" nin bağlanma problemini mutlaka çözmeyeceğidir ... örneğin üç grubu sınıflandırırken k = 3. Bunun yanında katılıyorum. Güzel açıklama.
Pyll

1

Bu kravat kısmı hakkında, bağlar için en iyi temel fikir genellikle rastgele kırmadır, bu nedenle oylamayı kazanan herkesin rastgele sınıfını seçmek ve rastgele k'yi dolduracak kadar büyük bir bağlı nesnelerin alt kümesini seçmek.

Böyle bir çözüm, bunların kNN rejiminde karar vermek için yeterli bilgi sağlamayan patolojik vakalar olduğunu vurgulamaktadır. BTW verileriniz için ortaksa, belki biraz daha farklı bir mesafe denemelisiniz?


0

Olası bir yol, net bir kazanan elde edene kadar algoritmanın k değerini otomatik olarak artırması veya azaltmasıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.