使用插入符号查找最近的邻居
Find the nearest neighbor using caret
我正在使用 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 个观察结果实际上是测试观察结果的 "nearest"。除了手动计算距离,有没有更简单的方法来显示最近的邻居?
谢谢!
当您使用 knn 时,您是在基于自变量创建具有附近点的聚类。通常,这是使用 train(Price~., method='knn', train)
完成的,以便模型根据某些标准(也考虑因变量)选择最佳预测。鉴于我没有检查 R 对象是否存储每个训练值的预测价格,我只是使用训练的模型来预测给定模型的预期价格(预期价格位于 space ).
最后,因变量只是一个公共 space 中所有其他变量的表示,其中关联的价格被假定为相似,因为您是基于接近度进行聚类的。
作为步骤总结,您需要计算以下内容:
- 获取每个训练数据点的距离。这是通过预测它们来完成的。
- 计算训练数据与您感兴趣的观察之间的距离(绝对值,因为您不关心符号,只关心绝对距离)。
取N个小的索引(e.g.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
我正在使用 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 个观察结果实际上是测试观察结果的 "nearest"。除了手动计算距离,有没有更简单的方法来显示最近的邻居?
谢谢!
当您使用 knn 时,您是在基于自变量创建具有附近点的聚类。通常,这是使用 train(Price~., method='knn', train)
完成的,以便模型根据某些标准(也考虑因变量)选择最佳预测。鉴于我没有检查 R 对象是否存储每个训练值的预测价格,我只是使用训练的模型来预测给定模型的预期价格(预期价格位于 space ).
最后,因变量只是一个公共 space 中所有其他变量的表示,其中关联的价格被假定为相似,因为您是基于接近度进行聚类的。 作为步骤总结,您需要计算以下内容:
- 获取每个训练数据点的距离。这是通过预测它们来完成的。
- 计算训练数据与您感兴趣的观察之间的距离(绝对值,因为您不关心符号,只关心绝对距离)。
取N个小的索引(e.g.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