标准化测试数据集时提高精度
Increase precision when standardizing test dataset
我正在处理 R 中的数据集,分为训练和测试。我预先处理数据居中并除以标准差,因此,我想存储训练集的均值和标准差值,以使用相同的值缩放测试集。但是,如果我使用 scale
函数获得的精度比我使用 colmeans
和 apply(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
函数的情况下缩放数据时获得更好的精度?
自定义函数在矩阵布局中存在错误。您需要在用 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)
另请参阅:How to divide each row of a matrix by elements of a vector in R
我正在处理 R 中的数据集,分为训练和测试。我预先处理数据居中并除以标准差,因此,我想存储训练集的均值和标准差值,以使用相同的值缩放测试集。但是,如果我使用 scale
函数获得的精度比我使用 colmeans
和 apply(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
函数的情况下缩放数据时获得更好的精度?
自定义函数在矩阵布局中存在错误。您需要在用 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)
另请参阅:How to divide each row of a matrix by elements of a vector in R