我正在尝试手动计算 R kknn 包输出的距离和权重测量。当数据未经过缩放时,我能够正确地计算欧几里得距离和倒数权重,如下所示:
欧几里得距离
sqrt((6-8)^2 + (4-5)^2) = 2.236068
sqrt((6-3)^2 + (4-7)^2) = 4.242641
sqrt((6-7)^2 + (4-3)^2) = 1.414214
倒数权重
1 / (2.236068 / 4.242641) = 1.897368
1 / (1.414214 / 4.242641) = 3.000000。
我不知道矩形权重是如何计算的,因为我得到了以下结果:
1/2 * 1 = 0.50
1/2 * 1 = 0.50
但是 kknn 包给出了 1 和 1。
最后,当数据被缩放时,我完全无法计算距离和权重。任何帮助都将不胜感激,因为我正在尝试理解 kknn 包的工作原理。
library(kknn)
training <- data.frame(class = c(1, 0, 1), height = c(8, 3, 7), weight = c(5, 7, 3))
training
holdouts <- data.frame(class = 1, height = 6, weight = 4)
holdouts
rectangular_no_scale <- kknn(class ~., training, holdouts, distance = 2, kernel = "rectangular", k = 2, scale = FALSE)
rectangular_no_scale[["D"]]
rectangular_no_scale[["W"]]
inversion_no_scale <- kknn(class ~., training, holdouts, distance = 2, kernel = "inv", k = 2, scale = FALSE)
inversion_no_scale[["D"]]
inversion_no_scale[["W"]]
rectangular_with_scale <- kknn(class ~., training, holdouts, distance = 2, kernel = "rectangular", k = 2, scale = TRUE)
rectangular_with_scale[["D"]]
rectangular_with_scale[["W"]]
inversion_with_scale <- kknn(class ~., training, holdouts, distance = 2, kernel = "inv", k = 2, scale = TRUE)
inversion_with_scale[["D"]]
inversion_with_scale[["W"]]