我尝试使用python在波士顿的房屋数据上进行Ridge回归分析,但是我遇到以下问题,无法在任何地方找到答案,因此我决定将其发布在这里:
在拟合模型之前是否建议缩放比例?因为当我缩放和不缩放时我得到相同的分数。此外,就选择最佳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()
在缩放数据上,当我计算分数并通过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
感谢您对此事的见解,期待阅读您的答案!
答案 0 :(得分:3)
我认为您应该进行缩放,因为Ridge正则化会惩罚较大的值,因此您不希望由于缩放问题而失去有意义的功能。也许您看不到差异,因为房屋数据是玩具数据集,并且已经很好地缩放了。
较大的alpha值表示对较大值的较强惩罚。该图向您显示(虽然没有标签),但alpha越强,发送系数的强度就越大。渐变线越多,权重越小,因此在alpha变得足够大之前,它们受到的影响较小或几乎没有。较尖的是较大的权重,因此它们更快地下降到零。当他们这样做时,该功能将从您的回归中消失。
答案 1 :(得分:0)
对于缩放后的数据,设计矩阵的量级较小,系数往往较大(施加更多的 L2 惩罚)。为了最小化 L2,我们需要越来越多的小系数。如何得到越来越小的系数?方法是选择一个非常大的alpha,这样我们就可以有更多更小的系数。这就是为什么如果您缩放数据,最佳 alpha 是一个很大的数字。