Mengapa kita perlu memasukkan classifier k-terdekat?

11

Seperti yang saya pahami, k-NN adalah algoritma pelajar yang malas dan tidak membutuhkan fase pelatihan. Jadi mengapa kita perlu menggunakan .fit()sklearn dan apa yang terjadi ketika kita menggunakannya?

TmSmth
sumber

Jawaban:

9

Di tingkat konseptual

Menyesuaikan classifier berarti mengambil set data sebagai input, kemudian mengeluarkan classifier, yang dipilih dari ruang classifier mungkin. Dalam banyak kasus, suatu pengklasifikasi diidentifikasi - yaitu, dibedakan dari pengklasifikasi lain yang mungkin - oleh serangkaian parameter. Parameter biasanya dipilih dengan menyelesaikan masalah optimasi atau beberapa prosedur numerik lainnya. Tetapi, dalam kasus knn, classifier diidentifikasi oleh data pelatihan itu sendiri. Jadi, pada tingkat abstrak, pemasangan classifier knn hanya membutuhkan penyimpanan set pelatihan.

Di tingkat implementasi

Mengevaluasi pengelompokan knn pada titik data baru membutuhkan pencarian tetangga terdekatnya dalam set pelatihan, yang bisa menjadi operasi yang mahal ketika set pelatihan besar. Seperti yang disebutkan RUser, ada berbagai trik untuk mempercepat pencarian ini, yang biasanya bekerja dengan membuat berbagai struktur data berdasarkan set pelatihan. Gagasan umum adalah bahwa beberapa pekerjaan komputasi yang diperlukan untuk mengklasifikasikan poin baru sebenarnya umum terjadi di seluruh titik. Jadi, pekerjaan ini dapat dilakukan sebelumnya dan kemudian digunakan kembali, daripada diulang untuk setiap contoh baru. Implementasi knn menggunakan trik ini akan melakukan pekerjaan ini selama fase pelatihan. Sebagai contoh, scikit-belajar dapat membangun pohon kd atau pohon bola selama panggilan ke fit()fungsi.

k

k

pengguna20160
sumber
11

Anda dapat menerapkannya dengan cara yang malas dan membuat latihan yang layak ketika menemukan bahasa. (lihat contoh salah satu posting blog saya ). Tapi Anda juga bisa mengindeks data, untuk membuat prediksi (lebih cepat).

Jika ruang fitur memiliki dimensi satu, mengurutkan poin berdasarkan fitur ini akan membantu Anda menemukan tetangga lebih cepat (menggunakan per contoh pencarian dikotomik). Dalam dimensi yang lebih besar, tidak ada generalisasi penyortiran alami, tetapi Anda dapat mengindeks poin menggunakan (misalnya) quadtrees .

Melihat sumbernya , Anda dapat melihat bahwa berbagai metode telah diimplementasikan dalam scikit belajar. Dan ada beberapa penelitian , yang terus meningkatkan pertanyaan tetangga terdekat ini.

RUser4512
sumber
5

Sementara poin yang dibuat oleh penjawab lain tentu saja valid dan menarik, saya ingin menunjukkan satu hal lagi dari sudut pandang rekayasa perangkat lunak:

Agar konsisten dengan API mereka

Estimator sklearn harus, antara lain, memiliki fitmetode yang mengambil satu atau dua array-suka (tergantung pada apakah itu estimator yang diawasi / tidak diawasi) dan sejumlah detail spesifik implementasi ( Sumber ).

Jadi, bahkan jika fitmetode knn tidak melakukan apa-apa sama sekali, itu kemungkinan masih ada, karena knn adalah penaksir dan pengembang sklearn, serta kode yang dikontribusikannya, mengharapkan penaksir memiliki fitmetode.

Brian K.
sumber