是的,您当然可以将 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='')