2017-05-10 33 views
1

這裏有一些數據:爲什麼knnImpute preProcess會更改其他數據?這是在錯誤

> 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 

有未顯示的上方,我用預處理從插入符號中位值,以填補他們的一些缺失值:

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轉嫁給:

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

回答

2

這是預期的並在文檔中提到。在使用knnImpute時,默認縮放和居中數據(這就是爲什麼您會看到零值附近的值)。

documentation

預處理可以用來推諉僅基於訓練集信息數據集。一種做法是使用K最近的鄰居。對於任意樣本,在訓練集中找到K個最近鄰居,並且使用這些值(例如,使用均值)來估算預測變量的值。無論方法參數是什麼,使用這種方法都會自動觸發preProcess來集中和縮放數據。

+0

啊,它的規模。當然,我應該注意到這一點。非常感謝你! –

+0

非常歡迎。很容易錯過:) – LyzandeR

相關問題