【问题标题】:Why does knnImpute preProcess change other data? Is this in error为什么 knnImpute preProcess 会更改其他数据?这是错误的吗
【发布时间】:2017-10-08 18:08:44
【问题描述】:

这是一些数据:

> 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 的工作原理?

【问题讨论】:

    标签: r missing-data r-caret knn


    【解决方案1】:

    这是预期的并在文档中提到。使用 knnImpute 时,数据默认缩放并居中(这就是为什么您看到的值大约为零的原因)。

    来自documentation

    preProcess 可用于仅基于训练集中的信息来估算数据集。一种方法是使用 K-最近邻。对于任意样本,在训练集中找到 K 个最近邻,并使用这些值(例如使用平均值)估算预测变量的值。使用此方法将自动触发 preProcess 以居中和缩放数据,而不管方法参数中的内容是什么。

    【讨论】:

    • 啊,缩放了。当然,我应该注意到这一点。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-01
    • 2016-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多