はい、確かにバイナリデータと連続データの両方でKNNを使用できますが、そうするときに注意すべきいくつかの重要な考慮事項があります。
結果は、以下に示すように、実数値の結果(0〜1のスケーリングされた、重み付けされていないベクトルの場合)間の分散に関連するバイナリ分割によって大きく通知されます。
この例では、個々の観測値の距離による最近傍が、スケーリングされた実数値変数よりもバイナリ変数の方がはるかに多く通知されることがわかります。
さらに、これは複数のバイナリ変数に拡張されます。実数値の変数の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='')