最小二乘法在实践中的应用

非常简单的回归任务。我有三个变量 x1, x2, x3 带有一些随机噪声。我知道目标方程是: y = q1*x1 + q2*x2 + q3*x3。现在我想找到目标系数: q1, q2, q3,并使用均方相对误差(RSE) (Prediction/Real - 1)^2 来评估我们的预测方法的性能。

在研究中,我发现这是一个普通的最小二乘问题。但我无法从网上的例子中了解到如何在Python中解决这个特定问题。假设我有如下数据:

import numpy as npsourceData = np.random.rand(1000, 3)koefs = np.array([1, 2, 3])target = np.dot(sourceData, koefs)

(在现实生活中,这些数据是有噪声的,且不符合正态分布。)如何在Python中使用最小二乘法找到这些系数? 可以使用任何库。


回答:

@[隐藏人名] 发表了一个有价值的评论。

你的代码存在一个问题:实际上你收集的数据中没有噪声。输入数据虽然有噪声,但在乘法之后,你没有添加任何额外的噪声。

我已经在你的测量中添加了一些噪声,并使用最小二乘公式来拟合参数,以下是我的代码:

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) * 1noisy_measurements = true_measurements + noiseestimated_theta = np.linalg.inv(data.T @ data) @ data.T @ noisy_measurements

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)

你可以在这里阅读关于最小二乘法的更多信息: https://en.wikipedia.org/wiki/Linear_least_squares_(mathematics)#The_general_problem

更新:

或者你可以直接使用 内置的最小二乘 函数:

np.linalg.lstsq(data, noisy_measurements)

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注