我正在尝试加速 MSE 梯度函数计算的方法。我认为节省时间的一个好方法是预先计算一些矩阵运算,我在下面的函数
mse_grad_2
中尝试过。然而,当我与朴素函数进行比较时,结果有所不同(只有很小的量,但我想弄清楚为什么它们不完全相同)。
y=rnorm(10)
X=matrix(rnorm(10*15),ncol=15,nrow=10)
beta = rnorm(15)
mse_grad <- function(y,X,input,n){
r = -(1/n)*t(X)%*%(y-X%*%input)
return(r)
}
mse_grad_2 <- function(XTY,XTX, input,n){
r = -(1/n)*(XTY-XTX%*%input)
return(r)
}
mean(mse_grad(y,X,beta,10) - mse_grad_2(t(X)%*%y,t(X)%*%X,beta,10))
[1] 4.810966e-17
这是由于有限精度算术问题造成的(例如参见https://en.wikipedia.org/wiki/Floating-point_arithmetic)。出于同样的原因
03 == 02 - 01
[1] FALSE