gpt4 book ai didi

python - 带正则化的 Numpy 线性回归

转载 作者:太空狗 更新时间:2023-10-29 21:39:45 25 4
gpt4 key购买 nike

我没有发现我的正则化线性回归代码有什么问题。不规则化我只是这样,我有理由确定这是正确的:

import numpy as np

def get_model(features, labels):
return np.linalg.pinv(features).dot(labels)

这是我的正则化解决方案代码,我看不出它有什么问题:

def get_model(features, labels, lamb=0.0):
n_cols = features.shape[1]
return linalg.inv(features.transpose().dot(features) + lamb * np.identity(n_cols))\
.dot(features.transpose()).dot(labels)

使用 lamb 的默认值 0.0,我的意图是它应该给出与(正确的)非正则化版本相同的结果,但实际上差异非常大。

有人知道问题出在哪里吗?

最佳答案

问题是:

features.transpose().dot(features) 可能不可逆。根据文档,numpy.linalg.inv 仅适用于满秩矩阵。然而,(非零)正则化项总是使方程非奇异。

顺便说一下,您对实现的看法是正确的。但效率不高。求解该方程的一种有效方法是最小二乘法。

np.linalg.lstsq(features, labels) 可以完成 np.linalg.pinv(features).dot(labels) 的工作。

一般来说,你可以这样做

def get_model(A, y, lamb=0):
n_col = A.shape[1]
return np.linalg.lstsq(A.T.dot(A) + lamb * np.identity(n_col), A.T.dot(y))

关于python - 带正则化的 Numpy 线性回归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27476933/

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