ใช่แน่นอนคุณสามารถใช้ KNN กับทั้งข้อมูลไบนารีและข้อมูลต่อเนื่อง แต่มีข้อควรพิจารณาที่สำคัญบางประการที่คุณควรทราบเมื่อทำเช่นนั้น
ผลลัพธ์จะได้รับการแจ้งอย่างหนักจากตัวแยกไบนารีที่สัมพันธ์กับการกระจายตัวของผลลัพธ์ที่มีมูลค่าที่แท้จริง (สำหรับเวกเตอร์ที่ไม่ได้ปรับขนาด 0-1, ที่ไม่ได้ถ่วงน้ำหนัก) ดังแสดงด้านล่าง:
คุณสามารถเห็นได้ในตัวอย่างนี้ว่าเพื่อนบ้านที่ใกล้ที่สุดของการสังเกตการณ์แต่ละคนโดยระยะทางจะได้รับการบอกกล่าวอย่างมากจากตัวแปรไบนารีมากกว่าโดยตัวแปรที่มีมูลค่าจริง
ยิ่งไปกว่านั้นสิ่งนี้ขยายไปถึงตัวแปรไบนารีหลายตัว - ถ้าเราเปลี่ยนหนึ่งในตัวแปรมูลค่าจริงเป็นไบนารีเราจะเห็นว่าระยะทางจะได้รับการแจ้งมากขึ้นโดยการจับคู่กับตัวแปรไบนารีทั้งหมดที่เกี่ยวข้องมากกว่าใกล้ค่าจริง:
คุณจะต้องรวมเฉพาะตัวแปรไบนารีที่สำคัญซึ่งคุณจะได้รับ "การสังเกตทั้งหมดที่ตรงกับการกำหนดค่าของตัวแปรไบนารี (ถ้ามี) ซึ่งมีค่าจริงที่ใกล้เคียงที่สุด" นี่คือการกำหนดที่สมเหตุสมผลของปัญหามากมายที่สามารถแก้ไขได้ด้วย KNN และการกำหนดปัญหาที่ไม่ดีมากของปัญหาอื่น ๆ
#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='')