【问题标题】:lin_reg.coef_ function returns coefficients that are too high when using StandardScaler to scale the training datalin_reg.coef_ 函数在使用 StandardScaler 缩放训练数据时返回过高的系数
【发布时间】:2021-11-15 00:48:02
【问题描述】:

我在以下上下文中使用 StandardScalar() 和 lin_reg.coef_ 函数:

for i in range(100):
    
    x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.3,random_state=i)
    scaler = StandardScaler().fit(x_train)
    x_train = scaler.transform(x_train)
    x_test = scaler.transform(x_test)
    lin_reg = LinearRegression().fit(x_train, y_train)
    
    if i == 0:
        print(lin_reg.coef_)
    if i == 1:
        print(lin_reg.coef_)

这导致以下输出:

代码输出

因此,正如预期的那样,coef_ 函数返回我传递给线性回归的 22 个不同特征的系数。但是,对于第二个输出,一些系数太大(例如 1.61e+14)。我很确定使用 StandardScaler() 进行缩放可以正常工作。但是,如果我在应用 coef_ 函数之前不缩放训练数据,我不会得到这些高系数。我应该提到的一件重要的事情是最后 13 个特征是二元特征,而前 9 个特征是连续的(例如年龄)。我可以想象这个问题在某种程度上与这个事实有关,尽管对于第一个二进制特征,系数是正确计算的(只是最后 12 个二进制特征的系数太大)。

【问题讨论】:

    标签: python scikit-learn linear-regression


    【解决方案1】:

    当数据来自高斯分布时,您应该使用标准化。对二进制数据使用 StandardScal() 没有任何意义。

    您应该只缩放前 9 个九个变量,然后将它们全部传递到线性回归中。

    https://www.atoti.io/when-to-perform-a-feature-scaling/ Avoid scaling binary columns in sci-kit learn StandsardScaler

    【讨论】:

      猜你喜欢
      • 2022-11-17
      • 2021-04-19
      • 2015-03-28
      • 2020-03-24
      • 1970-01-01
      • 2018-08-05
      • 2013-08-30
      • 1970-01-01
      • 2021-09-09
      相关资源
      最近更新 更多