Yanıtlar:
Kavramsal düzeyde
Bir sınıflandırıcının yerleştirilmesi, bir veri kümesinin girdi olarak alınması ve daha sonra olası sınıflandırıcılardan seçilen bir sınıflandırıcının çıkarılması anlamına gelir. Çoğu durumda, bir sınıflandırıcı - diğer olası sınıflandırıcılardan ayırt edilir - bir dizi parametre ile tanımlanır. Parametreler tipik olarak bir optimizasyon problemi veya başka bir sayısal prosedür çözülerek seçilir. Ancak, knn durumunda, sınıflandırıcı eğitim verilerinin kendisi tarafından tanımlanır. Yani, soyut bir seviyede, knn bir sınıflandırıcıyı takmak sadece eğitim setinin saklanmasını gerektirir.
Uygulama düzeyinde
Knn sınıflandırıcısını yeni bir veri noktasında değerlendirmek için eğitim setinde en yakın komşularının aranması gerekir, bu da eğitim seti büyük olduğunda pahalı bir işlem olabilir. RUser'in belirttiği gibi, bu aramayı hızlandırmak için genellikle eğitim setine dayalı çeşitli veri yapıları oluşturarak çalışan çeşitli hileler vardır. Genel fikir, yeni noktaları sınıflandırmak için gereken bazı hesaplama çalışmalarının aslında noktalar arasında yaygın olduğudur. Bu nedenle, bu çalışma her yeni örnek için tekrarlanmak yerine önceden yapılabilir ve daha sonra yeniden kullanılabilir. Bu hileleri kullanan bir uygulama, eğitim aşamasında bu işi yapacaktır. Örneğin, scikit-learn, fit()
işleve çağrı sırasında kd ağaçları veya top ağaçları oluşturabilir .
seçme
Tembel bir şekilde uygulayabilirsiniz ve bir dil keşfederken iyi bir egzersiz yapar. (örnek olarak blog yayınlarımdan birine bakın ). Ancak tahmini yapmak için verileri çok daha hızlı bir şekilde endeksleyebilirsiniz.
Özellik alanının bir boyutu varsa, noktaları bu özelliğe göre sıralamak, komşuları çok daha hızlı bulmanıza yardımcı olur (her bir örnekte iki ayrı arama kullanarak). Daha büyük boyutta, sıralamanın doğal bir genellemesi yoktur, ancak noktaları (örneğin) dörtlü kullanarak indeksleyebilirsiniz .
Kaynağa bakarak, scikit öğrenmesinde çeşitli yöntemlerin uygulandığını görebilirsiniz. Ve en yakın komşu sorguları geliştirmeye devam eden bazı araştırmalar var .
Diğer cevaplayıcıların dikkat çektiği noktalar kesinlikle geçerli ve ilginç olsa da, kesinlikle yazılım mühendisliği bakış açısından bir şey daha belirtmek isterim:
API'leriyle tutarlı hale getirmek için
sklearn Tahmincileri, diğer şeylerin yanı sıra, fit
bir veya iki dizi benzeri (denetlenen / denetlenmeyen bir tahmin edici olup olmamasına bağlı olarak) ve uygulamaya özel birkaç ayrıntı ( Kaynak ) alan bir yönteme sahip olmalıdır .
Knn'ın fit
yöntemi kesinlikle hiçbir şey yapmasa bile , muhtemelen hala var olacaktır, çünkü knn bir tahmin edicidir ve sklearn'un geliştiricileri ve katkıda bulundukları kod, tahmin edicilerin bir fit
yönteme sahip olmasını bekler .