关于 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 岭回归的问题:缩放和解释的主要内容,如果未能解决你的问题,请参考以下文章
数学建模MATLAB应用实战系列(九十三)-岭回归应用案例(附MATLAB和Python代码)