我试图从我的机器学习讲座中理解一个代码片段(参见下面的代码)。
它提取特征的均值和标准差,并使用它们来“标准化”(标准化)特征。数据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
