将在已经标准化的数据集上获得的权重除以特征的标准差?(岭回归)

数据挖掘 机器学习 Python 线性回归 机器学习模型 岭回归
2022-03-01 17:24:26

我试图从我的机器学习讲座中理解一个代码片段(参见下面的代码)。

它提取特征的均值和标准差,并使用它们来“标准化”(标准化)特征。数据X在第一列中包含全1。变量t是我们训练权重的输出值。首先获得输出的平均值,以便可以在没有偏差项(截距)的情况下应用岭回归,然后删除全一列并对数据进行归一化。权重由以下公式获得:

在此处输入图像描述

我不明白的是,使用归一化数据获得的权重再次除以特征的标准差W[1:, 0] = Wn[:, 0] * Sinv有人可以帮我吗?谢谢!

PS:我知道规范化是另一回事,我的意思是标准化,但我的教授出于某种原因使用规范化。

这是代码:

def NormalisedRidgeRegression(X, t, p_lambda=0.0):
    K = X.shape[1] - 1

    M = np.mean(X[:, 1:], axis=0)
    S = np.std(X[:, 1:], axis=0)
    Sinv = 1 / S

    targetmean = np.mean(t)
    tn = t - targetmean

    Xn = np.dot(X[:, 1:] - M, np.diag(Sinv))

    Wn = np.dot(np.dot(np.linalg.pinv(np.dot(Xn.T, Xn) + p_lambda * np.eye(K)), Xn.T), tn)
    W = np.zeros((K + 1, 1))
    W[1:, 0] = Wn[:, 0] * Sinv
    W[0, 0] = targetmean
    y_hat = np.dot(X, W)
    return W, y_hat
1个回答

我自己找到了答案。我不确定是否应该删除该问题,所以我将分享:

假设在归一化之前给定数据点,我们有 a*x + b*z = y归一化a * x/std(x) + b * z/std(z) = y这意味着对于大于 1 的标准偏差,特征会缩小,因此权重会被放大。在代码中,y_hat值是使用原始数据获得的,这意味着必须缩小系数以反映输出与原始特征值之间的关系。