Saya memiliki kumpulan data dengan kolom a b c
(3 atribut). a
bersifat numerik dan kontinu sementara b
dan c
masing-masing kategori dengan dua tingkat. Saya menggunakan metode Tetangga K-terdekat untuk mengklasifikasikan a
dan b
pada c
. Jadi, untuk dapat mengukur jarak saya mengubah set data saya dengan menghapus b
dan menambahkan b.level1
dan b.level2
. Jika observasi i
memiliki level pertama dalam b
kategori, b.level1[i]=1
dan b.level2[i]=0
.
Sekarang saya bisa mengukur jarak di set data baru saya: a b.level1 b.level2
Dari sudut pandang teoretis / matematis: Bisakah Anda melakukan tetangga terdekat (KNN) dengan data biner dan kontinu?
Saya menggunakan FNN
paket dalam R dan fungsinyaknn()
r
classification
k-nearest-neighbour
k.dkhk
sumber
sumber
Jawaban:
Tidak apa-apa menggabungkan variabel kategori dan kontinu (fitur).
Entah bagaimana, tidak ada banyak landasan teori untuk metode seperti k-NN. Heuristik adalah bahwa jika dua titik dekat satu sama lain (menurut jarak), maka mereka memiliki kesamaan dalam hal output. Mungkin ya mungkin tidak. Dan itu tergantung pada jarak yang Anda gunakan.
Dalam contoh Anda, Anda menentukan jarak antara dua titik dan seperti:( a ′ , b ′ , c ′ )(a,b,c) (a′,b′,c′)
Ini sesuai dengan memberi bobot secara implisit ke setiap fitur.
Perhatikan bahwa jika mengambil nilai besar (seperti 1000, 2000 ...) dengan varians besar maka bobot fitur biner akan diabaikan dibandingkan dengan bobot . Hanya jarak antara dan benar-benar penting. Dan sebaliknya: jika mengambil nilai kecil seperti 0,001: hanya fitur biner yang akan dihitung.a a a ' aa a a a′ a
Anda dapat menormalkan perilaku dengan menimbang-ulang: membagi setiap fitur dengan standar deviasinya. Ini berlaku untuk variabel kontinu dan biner. Anda juga dapat memberikan bobot pilihan Anda sendiri.
Perhatikan bahwa fungsi R kNN () melakukannya untuk Anda: https://www.rdocumentation.org/packages/DMwR/versions/0.4.1/topics/kNN
Sebagai upaya pertama, cukup gunakan norm = true (normalisasi). Ini akan menghindari sebagian besar non-akal yang mungkin muncul ketika menggabungkan fitur terus menerus dan kategorikal.
sumber
Ya, Anda tentu dapat menggunakan KNN dengan data biner dan kontinu, tetapi ada beberapa pertimbangan penting yang harus Anda perhatikan ketika melakukannya.
Hasilnya akan sangat diinformasikan oleh binary splits relatif terhadap dispersi di antara hasil bernilai nyata (untuk skala 0-1, vektor tidak tertimbang), seperti diilustrasikan di bawah ini:
Anda dapat melihat dalam contoh ini bahwa tetangga terdekat pengamatan individu berdasarkan jarak akan JAUH lebih banyak diinformasikan oleh variabel biner daripada oleh variabel nilai riil diskalakan.
Lebih jauh lagi, ini meluas ke beberapa variabel biner - jika kita mengubah salah satu variabel bernilai nyata menjadi biner, kita dapat melihat bahwa jarak akan lebih banyak diinformasikan dengan mencocokkan semua variabel biner yang terlibat daripada dalam kedekatan nilai riil:
Anda ingin memasukkan hanya variabel biner kritis - Anda, pada dasarnya, bertanya "dari semua pengamatan yang cocok dengan konfigurasi variabel biner ini (jika ada), yang memiliki nilai real-value terdekat?" Ini adalah rumusan yang masuk akal dari banyak masalah yang dapat diatasi dengan KNN, dan perumusan masalah lainnya yang sangat buruk.
sumber