地面真实拟合比嘈杂数据的交叉验证拟合差吗?

时间:2020-07-05 17:59:47

标签: python cross-validation least-squares

在进行交叉验证时,我得到了这些奇怪的结果,如果有任何评论,我将不胜感激。

简而言之,与使用用于生成数据的“地面真实权重”进行比较时,使用交叉评估(CV)进行回归(最小二乘)时,我的均方误差(MSE)较低。

但是请注意,我是根据嘈杂的数据(生成的数据+噪声)计算MSE的,因此对于高于0的噪声水平,MSE不会为0。

奇怪的是,对于高噪声条件,与经过交叉验证的最小二乘法相比,我得到的MSE更低,而用于生成清晰数据的“地面”真实权重却要低-然后向输入(X)添加不同级别的噪声。相反,如果我在输出(y)中添加高斯噪声,则“地面真实权重”的效果会更好。

下面有更多详细信息。

数据模拟

我正在从波斯语中生成 beta ,从统一分布中生成 X 。然后,我将要回归的 y 计算为y = beta *X。 python 3代码:

def generate_data(noise_frac):
  X = np.random.rand(ntrials,nneurons)
  X = np.random.normal(size=(ntrials,nneurons))
  
  beta = np.random.randn(nneurons)
  y = X @ beta

  # not very important how I generated noise here
  noise_x = np.random.multivariate_normal(mean=zeros(nneurons), cov=diag(np.random.rand(nneurons)), size=ntrials)

                            
  X_noise = X + noise_x*noise_frac

  return X_noise, y, beta
  

如您所见,我还为 X 添加了噪音。

回归

然后,我将针对不同值 noise 的此噪声数据 X_noise 投影到 beta

y_hat = (X_noise) @ beta

并计算MSE:

mse = mean((y_hat - y)**2)

正如预期的那样,MSE随噪声而增加(图中的蓝线)。

MSE for CV and ground truth beta weights

但是,如果使用交叉验证的最小二乘法,我的MSE会降低!现在这是图中的橙色线。

要进行简历,我将 X_noise 分为100个随机训练和测试集。概括地说,这就是我在python中做简历的方法:

beta_lsq = pinv(X_train) @ y_train
y_hat_lsq = (X_test) @ beta_lsq
mse = mean((y_hat_lsq - y_test)**2)

另一方面,如果我将噪声添加到y而不是X,那么一切都有意义:

enter image description here

非常感谢您!

PS:这是堆栈溢出的交叉点

0 个答案:

没有答案