lin_reg.coef_ 函数在使用 StandardScaler 缩放训练数据时返回过高的系数
Posted
技术标签:
【中文标题】lin_reg.coef_ 函数在使用 StandardScaler 缩放训练数据时返回过高的系数【英文标题】:lin_reg.coef_ function returns coefficients that are too high when using StandardScaler to scale the training data 【发布时间】: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 个二进制特征的系数太大)。
【问题讨论】:
【参考方案1】:当数据来自高斯分布时,您应该使用标准化。对二进制数据使用 StandardScal() 没有任何意义。
您应该只缩放前 9 个九个变量,然后将它们全部传递到线性回归中。
https://www.atoti.io/when-to-perform-a-feature-scaling/ Avoid scaling binary columns in sci-kit learn StandsardScaler
【讨论】:
以上是关于lin_reg.coef_ 函数在使用 StandardScaler 缩放训练数据时返回过高的系数的主要内容,如果未能解决你的问题,请参考以下文章
Wiremock Stand alone - 如何使用请求数据操作响应
Linux中的两种守护进程stand alone和xinetd
windows server 2016 stand安装oracle12c