SKLearn 线性回归,但在开始之前设置某些系数

Posted

技术标签:

【中文标题】SKLearn 线性回归,但在开始之前设置某些系数【英文标题】:SKLearn Linear Regression but setting certain coefficients before starting 【发布时间】:2022-01-15 11:42:59 【问题描述】:

我想在具有 50 个变量的数据集上使用 SKLearn 运行线性回归。但是,我想在开始训练之前设置其中 2 个变量的系数。这可能吗?

【问题讨论】:

当你写“set”时,你的意思是它们是固定的吗?即,您不想通过任何培训来改变它们? 【参考方案1】:

您希望为系数提供初始值或猜测值,这对于 LinearRegression 是不可能的,因为它是 calls scipy.linalg.lstsq from scipy。

不太确定提供初始猜测的目的是什么,因为对于线性回归,您可以拟合模型,即使用 QR 分解或 SVD 找到最小二乘解,无需提供初始猜测左右。

如果您想出于某种目的尝试它,我认为您可以尝试lsmr 或curve_fit 之类的方法,但请记住,这并不是这里众所周知的线性回归:

from sklearn import datasets, linear_model
from scipy.optimize import curve_fit
from sklearn.preprocessing import StandardScaler

X, y = datasets.load_diabetes(return_X_y=True)
X = StandardScaler().fit_transform(X)

regr = linear_model.LinearRegression()
regr.fit(X,y)

regr.coef_
array([ -0.47623169, -11.40703082,  24.72625713,  15.42967916,
       -37.68035801,  22.67648701,   4.80620008,   8.422084  ,
        35.73471316,   3.21661161])

#lmsr
lsmr(X,y,x0 = np.repeat(2.0,X.shape[1]))
(array([ -0.4762317 , -11.40703083,  24.72625712,  15.42967915,
        -37.68035803,  22.67648699,   4.8062001 ,   8.42208398,
         35.73471314,   3.21661159])

#non linear least square
def func(x,*params):
    return x @ params

coef_, cov_ = curve_fit(func,X,y,p0 = np.repeat(2,X.shape[1]))
coef_

array([ -0.47623371, -11.40702964,  24.72625986,  15.42967394,
       -37.68022801,  22.67639202,   4.8061298 ,   8.42205138,
        35.73466837,   3.21661273])

【讨论】:

以上是关于SKLearn 线性回归,但在开始之前设置某些系数的主要内容,如果未能解决你的问题,请参考以下文章

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

使用 sklearn 线性回归,如何将计算出的回归系数约束为大于 0?

Python中某些特征的正系数线性回归

Python中具有正系数的线性回归

Python - 多元线性回归 - 每个输入变量的确定系数

sklearn (scikit-learn) 逻辑回归包——设置训练的分类系数。