如何使用固定斜率进行线性回归并计算截距?
固定斜率的线性回归求解截距方法
你需求的固定斜率求截距的线性回归完全可行,而且有比你设想的近似方法更简单、准确的实现方式,核心是通过最小化残差平方和推导解析解,或者用scikit-learn做变通拟合,以下是具体实现:
方法一:直接用解析解计算(最简便)
固定斜率为(k)时,拟合直线(y = kx + b)的最优截距(b),本质是最小化所有样本的残差平方和(\sum_{i=1}^n (y_i - (kx_i + b))^2)。对(b)求导并令导数为0,可直接推导出:
[b = \text{mean}(y_i - k \cdot x_i)]
代码实现
import numpy as np # 替换为你的固定斜率值 fixed_slope = 1.5 XX = np.array(plotx_aj).reshape((-1, 1)) YY = np.array(ploty_aj) # 计算最优截距 optimal_intercept = np.mean(YY - fixed_slope * XX.flatten()) # 生成拟合直线的预测值 y_fit = fixed_slope * XX.flatten() + optimal_intercept
方法二:用scikit-learn变通拟合
如果想沿用scikit-learn的回归框架,可以将原问题转化为拟合常数项的问题:把方程变形为(y - kx = b),此时(b)相当于一个没有自变量的模型输出,只需构造全1的特征矩阵来拟合。
代码实现
from sklearn.linear_model import LinearRegression import numpy as np fixed_slope = 1.5 XX = np.array(plotx_aj).reshape((-1, 1)) YY = np.array(ploty_aj) # 构造新的目标变量:y - kx Y_transformed = YY - fixed_slope * XX.flatten() # 构造全1的特征矩阵(对应常数项b的输入) X_constant = np.ones_like(XX) # 关闭截距拟合,因为我们已经把截距作为目标变量处理 model = LinearRegression(fit_intercept=False) model.fit(X_constant, Y_transformed) optimal_intercept = model.coef_[0]
这两种方法都比你设想的旋转近似法更高效、准确,不需要复杂的轮廓点处理,直接基于原始数据计算即可。
内容的提问来源于stack exchange,提问作者matthieu balikdjian
相关产品推荐
相关产品推荐

