gpt4 book ai didi

python - 闭式岭回归

转载 作者:太空宇宙 更新时间:2023-11-03 14:39:12 25 4
gpt4 key购买 nike

我无法理解实现多脊回归的函数的输出。对于该方法的封闭形式,我在 Python 中从头开始执行此操作。这种封闭形式如下所示:

Closed form

我有一个训练集 X100 行 x 10 列 和一个向量 y100x1.

我的尝试如下:

def ridgeRegression(xMatrix, yVector, lambdaRange):
wList = []

for i in range(1, lambdaRange+1):
lambVal = i

# compute the inner values (X.T X + lambda I)
xTranspose = np.transpose(x)
xTx = xTranspose @ x
lamb_I = lambVal * np.eye(xTx.shape[0])

# invert inner, e.g. (inner)**(-1)
inner_matInv = np.linalg.inv(xTx + lamb_I)

# compute outer (X.T y)
outer_xTy = np.dot(xTranspose, y)

# multiply together
w = inner_matInv @ outer_xTy
wList.append(w)

print(wList)

为了测试,我使用前 5 个 lambda 值运行它。wList 变为 5 个 numpy.arrays,每个长度为 10(我假设有 10 个系数)。

这是这 5 个数组中的第一个:

array([ 0.29686755,  1.48420319,  0.36388528,  0.70324668, -0.51604451,
2.39045735, 1.45295857, 2.21437745, 0.98222546, 0.86124358])

我的问题和说明:

不应该有 11 个系数(1 个用于 y 轴截距 + 10 个斜率)吗?我如何从这个计算中得到 Minimum Square Error?如果我想绘制这条线,接下来会发生什么?

我想我对我正在看的东西真的很困惑,因为我还在研究我的线性代数。

谢谢!

最佳答案

首先,我会将您的岭回归修改为如下所示:

import numpy as np
def ridgeRegression(X, y, lambdaRange):
wList = []
# Get normal form of `X`
A = X.T @ X
# Get Identity matrix
I = np.eye(A.shape[0])
# Get right hand side
c = X.T @ y
for lambVal in range(1, lambdaRange+1):
# Set up equations Bw = c
lamb_I = lambVal * I
B = A + lamb_I
# Solve for w
w = np.linalg.solve(B,c)
wList.append(w)
return wList

请注意,我用隐式求解替换了用于计算矩阵求逆的 inv 调用。这在数值上更加稳定,尤其是对于这些类型的问题而言,这是一个重要的考虑因素。

我还进行了A=X.T@X 计算、单位矩阵I 生成和右侧向量c=X.T@y 循环外的计算——这些在循环内不会改变并且计算成本相对较高。

正如@qwr 所指出的,X 的列数将决定您拥有的系数数。您还没有描述您的模型,因此不清楚底层域 x 是如何构造成 X 的。

传统上,人们可能会使用多项式回归,在这种情况下,XVandermonde Matrix .在这种情况下,第一个系数将与 y 截距相关联。但是,根据您问题的上下文,您似乎对多元线性回归感兴趣。无论如何,都需要明确定义模型。完成后,返回的权重可用于进一步分析您的数据。

关于python - 闭式岭回归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54771760/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com