以下是一些数据:
> head(p.full)[,1:3]
id timestamp full_sq
1 30474 16617 39.00
2 30475 16617 79.20
3 30476 16617 40.50
4 30477 16617 62.80
5 30478 16617 40.00
6 30479 16617 48.43
上面没有显示一些缺失值,所以我使用了来自插入符号的preProcess来用中值填充它们:
p.full.medians <- predict(preProcess(p.full, method=c("medianImpute")), p.full)
> head(p.full.medians)[,1:3]
id timestamp full_sq
1 30474 16617 39.00
2 30475 16617 79.20
3 30476 16617 40.50
4 30477 16617 62.80
5 30478 16617 40.00
6 30479 16617 48.43
与上述完全相同,预期,因为我显示的相同df没有缺失值。
然后我尝试用knn impute:
p.full.knn <- predict(preProcess(p.full, method=c("knnImpute")), p.full)
> head(p.full.knn)[,1:3]
id timestamp full_sq
1 1.036042 0.9665495 -0.4296467
2 1.036133 0.9665495 0.7133352
3 1.036224 0.9665495 -0.3869981
4 1.036315 0.9665495 0.2470441
5 1.036405 0.9665495 -0.4012143
6 1.036496 0.9665495 -0.1615293
现在整个数据框中的值都已更改,而我预计只会更改NA值。
这是预期的吗?我误解了knnImpute的工作原理吗?
答案 0 :(得分:2)
这是预期的,并在文档中提到。使用knnImpute
数据时,默认情况下会缩放并居中(这就是为什么您会看到零左右的值)。
preProcess可用于仅根据训练集中的信息来估算数据集。这样做的一种方法是使用K-最近邻居。对于任意样本,在训练集中找到K个最近邻居,并且使用这些值(例如,使用均值)估算预测值的值。使用此方法将自动触发preProcess以使数据居中和缩放,无论方法参数中是什么。