You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python:寻找最小化CSV数据拟合误差的系数A与B

解决方案:多元线性回归求最优系数A和B

你的问题本质是多元线性回归,目标是找到系数A和B,使得线性组合 Value 1*A + Value 2*B 与Target的残差平方和最小。下面提供两种高效的实现方式,包括你提到的scipy.optimize.curve_fit的用法:

方法一:线性代数解析解(最小二乘法直接求解)

对于线性模型,最小二乘法有解析解,无需迭代优化,计算效率最高。核心公式为:
params = (X^T · X)^-1 · X^T · y
其中X是包含特征(Value 1、Value 2)的矩阵,y是Target向量。

代码示例

import numpy as np
import pandas as pd

# 读取CSV数据
df = pd.read_csv('your_data.csv')

# 构造特征矩阵X和目标向量y
X = df[['Value 1', 'Value 2']].values
y = df['Target'].values

# 若模型需要截距项(公式为 C + Value1*A + Value2*B),可添加全1列
# X = np.hstack((np.ones((X.shape[0], 1)), X))

# 计算最优系数
params = np.linalg.inv(X.T @ X) @ X.T @ y
A, B = params  # 加截距的话,params会是[截距, A, B]

print(f"最优系数A: {A}, B: {B}")

方法二:使用scipy.optimize.curve_fit

curve_fit支持多自变量拟合,只需将多个自变量打包成一个输入数组,再定义对应拟合函数即可。

代码示例

import numpy as np
import pandas as pd
from scipy.optimize import curve_fit

# 读取CSV数据
df = pd.read_csv('your_data.csv')

# 定义拟合函数:输入为自变量数组(每行是[Value1, Value2]),参数为A、B
def linear_model(x, A, B):
    value1, value2 = x
    return value1 * A + value2 * B

# 准备输入数据:将Value1和Value2转为(2, n_samples)的数组格式
x_data = np.vstack([df['Value 1'].values, df['Value 2'].values])
y_data = df['Target'].values

# 执行拟合,初始参数可设为[0,0]或其他合理值
popt, pcov = curve_fit(linear_model, x_data, y_data, p0=[0, 0])

A_opt, B_opt = popt
print(f"最优系数A: {A_opt}, B: {B_opt}")

注意事项

  • 两种方法结果几乎一致(误差来自数值计算精度),解析解速度更快,适合大数据量;curve_fit更灵活,可扩展到非线性模型。
  • 若需加入截距项,只需对应调整特征矩阵或拟合函数即可。

内容的提问来源于stack exchange,提问作者Shiverz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 01:09:09