Bra*_* Ds 5 python regression numpy machine-learning scipy
非常简单的回归任务。我有三个x1, x2, x3带有一些随机噪声的变量。我知道目标方程:y = q1*x1 + q2*x2 + q3*x3。现在我想找到目标系数:q1, q2, q3使用平均相对平方误差(RSE)(Prediction/Real - 1)^2来评估我们的预测方法的性能。
在研究中,我发现这是普通的最小二乘问题。但我无法从互联网上的示例中获取如何用 Python 解决这个特定问题。假设我有数据:
import numpy as np
sourceData = np.random.rand(1000, 3)
koefs = np.array([1, 2, 3])
target = np.dot(sourceData, koefs)
Run Code Online (Sandbox Code Playgroud)
(在现实生活中,数据是有噪声的,不符合正态分布。)如何在 python 中使用最小二乘法找到这个 koefs?任何库的使用。
@ayhan 提出了宝贵的评论。
您的代码存在问题:实际上您收集的数据中没有噪音。输入数据有噪声,但在乘法之后,您不会添加任何额外的噪声。
我在您的测量中添加了一些噪声,并使用最小二乘公式来拟合参数,这是我的代码:
data = np.random.rand(1000,3)
true_theta = np.array([1,2,3])
true_measurements = np.dot(data, true_theta)
noise = np.random.rand(1000) * 1
noisy_measurements = true_measurements + noise
estimated_theta = np.linalg.inv(data.T @ data) @ data.T @ noisy_measurements
Run Code Online (Sandbox Code Playgroud)
将会estimated_theta接近true_theta。如果不向测量结果添加噪声,它们将是相等的。
我使用了 python3 矩阵乘法语法。您可以使用np.dot而不是@
这使得代码更长,所以我拆分了公式:
MTM_inv = np.linalg.inv(np.dot(data.T, data))
MTy = np.dot(data.T, noisy_measurements)
estimated_theta = np.dot(MTM_inv, MTy)
Run Code Online (Sandbox Code Playgroud)
您可以在这里阅读最小二乘:https ://en.wikipedia.org/wiki/Linear_least_squares_(mathematics)#The_general_problem
更新:
或者您可以只使用内置的最小二乘函数:
np.linalg.lstsq(data, noisy_measurements)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2858 次 |
| 最近记录: |