线性拟合约束通过 Python 中的第一个点
Linear fit constrained to go through the first point in Python
我有两个 numpy
等长的一维数组 x
和一个响应变量 y
。我想做一个最小二乘法拟合,迫使结果线通过点 (x_0, y_0)
。最简单的方法是什么?
注:已提出部分优化方案。这些在理论上是好的,但线必须恰好穿过该点——即使其余点的拟合更差。
一种方法是将数据集中在 (x_0、y_0)、运行 线性回归(不指定截距)上,然后将预测转换回来到原来的规模。
这是一个例子:
import numpy as np
import matplotlib.pyplot as plt
x = np.random.randn(100)
y = np.random.randn(100) + x
plt.plot(x, y, "o")
plt.plot(x[0], y[0], "o") # x_0, y_0 is the orange dot
接下来,使用不带截距的线性回归来拟合通过转换数据的直线。
from sklearn.linear_model import LinearRegression
lm = LinearRegression(fit_intercept = False)
# center data on x_0, y_0
y2 = y - y[0]
x2 = x - x[0]
# fit model
lm.fit(x2.reshape(-1, 1), y2)
最后,预测直线并按原始比例绘制它
# predict line
preds = lm.predict(np.arange(-5, 5, 0.1).reshape(-1,1))
# plot on original scale
plt.plot(x, y, "o")
plt.plot(x[0], y[0], "o")
# add x_0 and y_0 back to the predictions
plt.plot(np.arange(-5, 5, 0.1) + x[0], preds + y[0])
我有两个 numpy
等长的一维数组 x
和一个响应变量 y
。我想做一个最小二乘法拟合,迫使结果线通过点 (x_0, y_0)
。最简单的方法是什么?
注:已提出部分优化方案。这些在理论上是好的,但线必须恰好穿过该点——即使其余点的拟合更差。
一种方法是将数据集中在 (x_0、y_0)、运行 线性回归(不指定截距)上,然后将预测转换回来到原来的规模。
这是一个例子:
import numpy as np
import matplotlib.pyplot as plt
x = np.random.randn(100)
y = np.random.randn(100) + x
plt.plot(x, y, "o")
plt.plot(x[0], y[0], "o") # x_0, y_0 is the orange dot
接下来,使用不带截距的线性回归来拟合通过转换数据的直线。
from sklearn.linear_model import LinearRegression
lm = LinearRegression(fit_intercept = False)
# center data on x_0, y_0
y2 = y - y[0]
x2 = x - x[0]
# fit model
lm.fit(x2.reshape(-1, 1), y2)
最后,预测直线并按原始比例绘制它
# predict line
preds = lm.predict(np.arange(-5, 5, 0.1).reshape(-1,1))
# plot on original scale
plt.plot(x, y, "o")
plt.plot(x[0], y[0], "o")
# add x_0 and y_0 back to the predictions
plt.plot(np.arange(-5, 5, 0.1) + x[0], preds + y[0])