r - 使用插入符号查找最近的邻居
问题描述
我正在使用 R 的caret
包拟合 k 最近邻模型。
library(caret)
set.seed(0)
y = rnorm(20, 100, 15)
predictors = matrix(rnorm(80, 10, 5), ncol=4)
data = data.frame(cbind(y, predictors))
colnames(data)=c('Price', 'Distance', 'Cost', 'Tax', 'Transport')
我留下一个观察作为测试数据,并使用训练数据拟合模型。
id = sample(nrow(data)-1)
train = data[id, ]
test = data[-id,]
knn.model = train(Price~., method='knn', train)
predict(knn.model, test)
当我显示knn.model
时,它告诉我它使用k=9
. 我很想知道哪 9 个观察结果实际上是与测试观察结果“最近”的。除了手动计算距离之外,有没有更简单的方法来显示最近的邻居?
谢谢!
解决方案
当您使用 knn 时,您正在创建具有基于自变量附近的点的集群。通常,这是使用 来完成的train(Price~., method='knn', train)
,这样模型会根据一些标准选择最佳预测(也考虑因变量)。鉴于我没有检查 R 对象是否存储每个训练值的预测价格,我只是使用训练的模型来预测给定模型的预期价格(预期价格位于空间中)。
最后,因变量只是公共空间中所有其他变量的表示,其中相关的价格被假定为相似,因为您基于邻近度进行聚类。作为步骤摘要,您需要计算以下内容:
- 获取每个训练数据点的距离。这是通过对它们进行预测来完成的。
- 计算训练数据与您感兴趣的观察之间的距离(绝对值,因为您不关心符号,而只关心绝对距离)。
取N个较小的索引(例如N = 9)。您可以获得与此较低距离相关的观察结果。
TestPred<-predict(knn.model, newdata = test) TrainPred<-predict(knn.model, train) Nearest9neighbors<-order(abs(TestPred-TrainPred))[1:9] train[Nearest9neighbors,] Price Distance Cost Tax Transport 15 95.51177 13.633754 9.725613 13.320678 12.981295 7 86.07149 15.428847 2.181090 2.874508 14.984934 19 106.53525 16.191521 -1.119501 5.439658 11.145098 2 95.10650 11.886978 12.803730 9.944773 16.270416 4 119.08644 14.020948 5.839784 9.420873 8.902422 9 99.91349 3.577003 14.160236 11.242063 16.280094 18 86.62118 7.852434 9.136882 9.411232 17.279942 11 111.45390 8.821467 11.330687 10.095782 16.496562 17 103.78335 14.960802 13.091216 10.718857 8.589131
推荐阅读
- pyspark - 如何监控使用 pyspark 启动的任务
- algorithm - 符号状态探索在符号模型检查中的工作原理
- python - 硒和 IE
- javascript - 扩展编程:逻辑和动态行为应该存在于哪里?背景js,content_script,弹出js
- json - Can't Decode With JSONDecoder
- python - NameError: name is not defined. Circular Importing
- python - 在python中统一存入金额
- c# - 如何将 Web 请求保存到文件
- ember.js - Ember: Access name of active child route from parent
- javascript - How to add a picture element in javascript with multiple source tags