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