关于 python 岭回归的问题:缩放和解释

Posted

技术标签:

【中文标题】关于 python 岭回归的问题:缩放和解释【英文标题】:Questions about ridge regression on python : Scaling, and interpretation 【发布时间】:2019-06-03 08:19:13 【问题描述】:

我尝试使用 python 对波士顿住房数据进行岭回归,但我有以下问题无法在任何地方找到答案,因此我决定将其发布在这里:

在拟合模型之前是否建议进行缩放?因为当我扩展和不扩展时,我得到相同的分数。此外,在选择最佳 alpha 方面,alpha/coeff 图的解释是什么?

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns 
import matplotlib.pyplot as plt
%matplotlib inline
from sklearn import linear_model

df = pd.read_csv('../housing.data',delim_whitespace=True,header=None)
col_names = ['CRIM','ZN','INDUS','CHAS','NOX','RM','AGE','DIS','RAD','TAX','PTRATIO','B','LSTAT','MEDV']
df.columns = col_names
X = df.loc[:,df.columns!='MEDV']
col_X = X.columns 
y = df['MEDV'].values

# Feature Scaling:

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_std = scaler.fit_transform(X)
from sklearn.linear_model import Ridge
from sklearn.metrics import mean_squared_error
clf = Ridge()
coefs = []
alphas = np.logspace(-6, 6, 200)

for a in alphas:
    clf.set_params(alpha=a)
    clf.fit(X_std, y)
    coefs.append(clf.coef_)

plt.figure(figsize=(20, 6))
plt.subplot(121)
ax = plt.gca()
ax.plot(alphas, coefs) 
ax.set_xscale('log')
plt.xlabel('alpha')
plt.ylabel('weights')
plt.title('Ridge coefficients as a function of the regularization')
plt.axis('tight')
plt.show()

Alpha/coefficient graph for scaled X

Alpha/coefficient graph for unscaled X

在缩放数据上,当我计算分数并通过 CV 选择 alpha 时,我得到:

from sklearn.linear_model import RidgeCV
clf = RidgeCV(alphas=[1e-3, 1e-2, 1e-1, 1, 5, 7]).fit(X_std, y)

> clf.score(X_std, y)
> 0.74038
> clf.alpha_
> 5.0

在未缩放的数据上,我什至用完全不同的 alpha 获得了更好的分数:

clf = RidgeCV(alphas=[1e-3, 1e-2, 1e-1, 1, 6]).fit(X, y)

> clf.score(X, y)
> 0.74064
> clf.alpha_
> 0.01

感谢您对此事的见解,期待阅读您的答案!

【问题讨论】:

【参考方案1】:

我认为您应该进行缩放,因为 Ridge 正则化会惩罚较大的值,因此您不希望因为缩放问题而丢失有意义的特征。也许您看不出有什么不同,因为住房数据是一个玩具数据集,并且已经很好地扩展了。

较大的 alpha 对较大值的惩罚更强。该图向您显示(尽管它没有标签),使用更强的 alpha,您将系数更强烈地发送到零。越平缓的线越小权重,因此在 alpha 变得足够大之前,它们的影响较小或几乎完全不受影响。较尖锐的是较大的权重,因此它们会更快地降为零。当他们这样做时,该功能将从您的回归中消失。

【讨论】:

谢谢,所以基本上一个太强的 alpha 会抹去我所有的自变量的权重?抱歉没有标注!我上传图片的时候没看到 确切地说,将权重发送到零,因此在您的回归中,变量完全消失了。如果您不想这么快丢失变量,请尝试 sklearn.linear_model.Lasso【参考方案2】:

对于缩放后的数据,设计矩阵的量级更小,系数往往更大(并且施加了更多的 L2 惩罚)。为了最小化 L2,我们需要越来越小的系数。如何获得越来越多的小系数?方法是选择一个非常大的 alpha,这样我们就可以有更多更小的系数。这就是为什么如果你缩放数据,最佳 alpha 是一个很大的数字。

【讨论】:

以上是关于关于 python 岭回归的问题:缩放和解释的主要内容,如果未能解决你的问题,请参考以下文章

python Ridge 回归(岭回归)的原理及应用

Python之岭回归

python 机器学习之岭回归

数学建模MATLAB应用实战系列(九十三)-岭回归应用案例(附MATLAB和Python代码)

用Python实现岭回归算法与Lasso回归算法并处理Iris数据集

封闭式岭回归