হ্যাঁ, আপনি অবশ্যই বাইনারি এবং অবিচ্ছিন্ন উভয় ডেটা দিয়েই কেএনএন ব্যবহার করতে পারেন তবে এটি করার সময় আপনার কিছু সচেতন হওয়া উচিত।
ফলাফলগুলি সত্যই মূল্যবান ফলাফলগুলির মধ্যে ছড়িয়ে পড়ার সাথে সম্পর্কিত বাইনারি বিভক্তদের দ্বারা ভারীভাবে অবহিত করা হবে (0-1 স্কেলড, অদ্বিতীয় ভেক্টরগুলির জন্য), নীচে চিত্রিত হিসাবে:
আপনি এই উদাহরণে দেখতে পারেন যে পৃথক পর্যবেক্ষণের নিকটতম নিকটবর্তী প্রতিবেশীদের দূরত্বে খুব বেশি পরিমাণে বাইনারি ভেরিয়েবল দ্বারা স্কেল করা আসল-মান ভেরিয়েবলের চেয়ে বেশি ভারী অবহিত করা উচিত।
তদুপরি, এটি একাধিক বাইনারি ভেরিয়েবলগুলিতে প্রসারিত- যদি আমরা আসল-মূল্যবান ভেরিয়েবলগুলির মধ্যে একটি বাইনারি রূপান্তর করি তবে আমরা দেখতে পাচ্ছি যে দূরত্বগুলি প্রকৃত মানগুলির নিকটতার চেয়ে জড়িত সমস্ত বাইনারি ভেরিয়েবলের সাথে মিল রেখে আরও বেশি অবহিত হবে:
আপনি কেবল সমালোচনামূলক বাইনারি ভেরিয়েবলগুলি অন্তর্ভুক্ত করতে চাইবেন - আপনি আসলে "বাইনারি ভেরিয়েবলগুলির এই কনফিগারেশনটির সাথে মেলে এমন সমস্ত পর্যবেক্ষণগুলির (যা যদি কোনও), যা নিকটতম আসল-মূল্যবান মান আছে জিজ্ঞাসা করছেন?" এটি কেএনএন দিয়ে সমাধান করা যেতে পারে এমন অনেক সমস্যার একটি যুক্তিসঙ্গত সূত্রপাত এবং অন্যান্য সমস্যার একটি খুব দুর্বল গঠন।
#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='')