为什么这两种在 R 中计算 MSE 梯度的方法不能给出相同的结果?

问题描述 投票:0回答:1

我正在尝试加速 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
r matrix statistics gradient matrix-multiplication
1个回答
0
投票

这是由于有限精度算术问题造成的(例如参见https://en.wikipedia.org/wiki/Floating-point_arithmetic)。出于同样的原因

03 == 02 - 01
[1] FALSE
© www.soinside.com 2019 - 2024. All rights reserved.