r - 如何在数据框中查找与给定向量最相似的行

标签 r machine-learning r-caret nearest-neighbor

假设我有一个如下所示的数据框:

Feature 1     Feature 2     Feature 3     Feature 4     Target
    1             1             1             1            a
    0             1             0             0            a 
    0             1             1             1            b

矢量如下所示:

0, 1, 1, 1

如何找到与向量最接近的匹配行的索引?例如,如果我想找到最近的 2 行,我将输入向量和数据帧(可能删除目标列),并且我将获得索引 1 和 3 作为函数的返回,因为这些行最接近类似于向量“0, 1, 1, 1”。

我尝试使用 R 中的“caret”包,命令为:

intrain <- createDataPartition(y = data$Target, p= 0.7, list = FALSE)
training <- data[intrain,]
testing <- data[-intrain,]

trctrl <- trainControl(method = "repeatedcv", number = 10, repeats = 3)
knn_fit <- train(Target~., data = training, method = "knn", trControl = trctrl, preProcess = c("center", "scale"), tuneLength = 10)
test_pred <- predict(knn_fit, newdata = testing)
print(test_pred)

但是,这不会返回匹配行的索引。它只是返回具有与测试数据集最接近的特征的目标的预测。

我想找到一个模型/命令/函数,其性能与 python 中 sklearn 的 KDtrees 模型类似,但在 R 中(KDtrees 可以返回 n 个最接近索引的列表)。此外,虽然不是必需的,但我希望所述模型能够使用特征的分类值(例如 TRUE/FALSE),这样我就不必创建虚拟变量,就像我在这里使用 1 和 0 所做的那样。

最佳答案

同意42的评论。使用简单的距离度量,第 1 行与向量 2 的差异相同。

# your data
featureframe <- data.frame(Feature1 = c(1,0,0), Feature2 = c(1,1,1), 
                           Feature3 = c(1,0,1), Feature4 = c(1,1,1), 
                           Target = c("a","a","b"))
vec <- c(0,1,1,1)

distances <- apply(featureframe[,1:4], 1, function(x) sum((x - vec)^2))
distances
# [1] 1 1 0

根据评论进行编辑:

要明确地测量相似之处,您可以量化相似性度量,其中总和越接近向量的长度,两个向量越接近:

similarity <- apply(featureframe[,1:4], 1, function(x) sum(x == vec))

如果您想对某些特征赋予更多权重,可以将函数内的相似性向量乘以相等长度的权重向量。

similarity <- apply(featureframe[,1:4], 1, function(x) sum((x == vec) * c(1,2,1,1)))

关于r - 如何在数据框中查找与给定向量最相似的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56095358/

相关文章:

r - 如何创建从 R 中的另一列获取日期的列?

r - 在 R 中使用按比例长度绘制的页面绘制 3 次

python - 你需要在 sklearn 中缩放 Vectorizers 吗?

使用线性内核调整 SVM 时,R 插入符号异常缓慢

r - 在另一个模块中使用一个 Shiny 模块的变量值

加载库时 R rgl 包错误

image-processing - 如何使超像素的标签在灰度图中局部一致?

python - 为什么 GridSearchCV 模型结果与我手动调整的模型不同?

r - 错误: predictors in new data do not match that of the training data when using raster attribute table (RAT)

r - 使用 stargazer 从插入符导出 glm 训练拟合摘要?