Python 线性回归系数如何存储在Sklearn管道中?

Python 线性回归系数如何存储在Sklearn管道中?,python,scikit-learn,linear-regression,pipeline,Python,Scikit Learn,Linear Regression,Pipeline,下面是我关于StackOverflow的第一个问题:) 我一直在努力理解Sklearn管道的用法 我运行以下代码来缩放数据,在管道中拟合线性回归,并绘制回归图: pipe = make_pipeline(StandardScaler(), LinearRegression()) pipe.fit(x_train, y_train) xfit = np.linspace(0, 1.25, 50) #Fake data to plot straight line yfit = pipe.pred

下面是我关于StackOverflow的第一个问题:)

我一直在努力理解Sklearn管道的用法

我运行以下代码来缩放数据,在管道中拟合线性回归,并绘制回归图:

pipe = make_pipeline(StandardScaler(), LinearRegression())
pipe.fit(x_train, y_train) 

xfit = np.linspace(0, 1.25, 50) #Fake data to plot straight line
yfit = pipe.predict(xfit[:, np.newaxis])
plt.scatter(x_train, y_train)
plt.plot(xfit, yfit, color='r')

但是,当尝试手动绘制线性回归时,即使用以下代码查找线性回归系数并截取管道中存储的线性回归对象。涉及到暗魔法,因为它不会显示与管道使用的回归(coef+截距)相同的回归(见图)

可能会涉及StandardScaler,因为将其从管道中移除可以使用上面的代码单元找到回归系数

关于非规范化回归系数和截距在管道对象中的存储位置,有什么想法吗?或者等效地,我们如何使用标准定标器从归一化回归系数计算它们

非常感谢

关于非规范化回归系数和截距在管道对象中的存储位置,有什么想法吗

它们不是,因为管道除了把变压器和模型串在一起之外什么都不做。模型对象只知道缩放的输入数据

或者等效地,我们如何使用标准定标器从归一化回归系数计算它们

StandardScaler
具有属性
mean
scale
(也称为
var
),其中包含用于转换数据的原始数据的每列平均值和标准差。因此,我们:

y_hat=lr.coef*x_变换+lr.intercept_
=lr.coef*(x-scaler.mean*)/scaler.scale*+lr.intercept_
=(lr.coef u/scaler.scale)*x+(lr.intercept-lr.coef*scaler.mean u/scaler.scale)
也就是说,您的非标准化回归系数是
lr.coef\uu/scaler.scale\uu
,非标准化截距是
lr.intercept\uu-lr.coef\u*scaler.mean\uu/scaler.scale\u

(我还没有测试过,所以一定要检查它是否合理。)

print("Linear Regression intercept: ", pipe['linearregression'].intercept_)
print("Linear Regression coefficients: ", pipe['linearregression'].coef_)