हां, आप निश्चित रूप से बाइनरी और निरंतर डेटा दोनों के साथ 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='')