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.
#code to reproduce plots:
library(scatterplot3d)
scalevector <- function(x){(x-min(x))/(max(x)-min(x))}
x <- scalevector(rnorm(100))
y <- scalevector(rnorm(100))
z <- ifelse(sign(rnorm(100))==-1, 0, 1)
df <- data.frame(cbind(x,y,z))
scatterplot3d(df$x, df$z, df$y, pch=16, highlight.3d=FALSE,
type="h", angle =235, xlab='', ylab='', zlab='')
x <- scalevector(rnorm(100))
y <- ifelse(sign(rnorm(100))==-1, 0, 1)
z <- ifelse(sign(rnorm(100))==-1, 0, 1)
df <- data.frame(cbind(x,y,z))
scatterplot3d(df$x, df$z, df$y, pch=16, highlight.3d=FALSE,
type="h", angle =235, xlab='', ylab='', zlab='')