我正在處理 R 中的資料集,分為訓練和測驗。我預處理資料中心并除以標準偏差,因此,我想存盤訓練集的平均值和 sd 值以使用相同的值縮放測驗集。但是,使用該scale函式獲得的精度比使用colmeansandapply(x, 2, sd)函式時要好得多。
set.seed(5)
a = matrix(rnorm(30000, mean=10, sd=5), 10000, 3) # Generate data
a_scale = scale(a) # scale using the scale function
a_scale_custom = (a - colMeans(a)) / apply(a, 2, sd) # Using custom function
現在,如果我比較兩個矩陣的平均值:
colMeans(a_scale)
[1] -9.270260e-17 -1.492891e-16 1.331857e-16
colMeans(a_scale_custom)
[1] 0.007461065 -0.004395052 -0.003046839
使用得到的矩陣scale的列均值為 0,而得到的矩陣減去均值而得到的矩陣colMeans誤差為10^-2。比較標準偏差時也會發生同樣的情況。
在不使用該scale函式的情況下縮放資料時,有什么方法可以獲得更好的精度?
uj5u.com熱心網友回復:
自定義函式在矩陣布局中存在錯誤。您需要在用 減去向量之前轉置矩陣t(),然后將其轉置回來。請嘗試以下操作:
set.seed(5)
a <- matrix(rnorm(30000, mean=10, sd=5), 10000, 3) # Generate data
a_scale <- scale(a) # scale using the scale function
a_scale_custom <- t((t(a) - colMeans(a)) / apply(a, 2, sd))
colMeans(a_scale)
colMeans(a_scale_custom)
另請參閱:如何將矩陣的每一行除以 R 中向量的元素
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/333092.html
