Вопросы о регрессии гребня на питоне: масштабирование и интерпретация - PullRequest
0 голосов
/ 08 января 2019

Я попытался выполнить регрессию Риджа для данных жилья в Бостоне с помощью python, но у меня возникли следующие вопросы, на которые я нигде не могу найти ответ, поэтому я решил опубликовать их здесь:

Рекомендуется масштабирование перед установкой модели? Потому что я получаю одинаковое количество баллов, когда я масштабируюсь, а когда не масштабируюсь. Кроме того, какова интерпретация графика альфа / коэффа с точки зрения выбора лучшей альфы?

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()

График альфа / коэффициента для масштабированного X

Альфа / график коэффициентов для немасштабированного X

На основании масштабированных данных, когда я вычисляю счет и выбираю альфа, благодаря CV я получаю:

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

На немасштабированных данных я даже получаю немного лучший результат с совершенно другой альфа:

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 Ответ

0 голосов
/ 08 января 2019

Я думаю, вам следует масштабировать, потому что Регуляризация Риджа наказывает большие значения, и поэтому вы не хотите терять значимые функции из-за проблем с масштабированием. Возможно, вы не видите никакой разницы, потому что данные о жилье представляют собой набор игрушечных данных и уже хорошо масштабированы.

Чем больше альфа, тем сильнее штраф на больших значениях. График показывает вам (хотя он не имеет маркировки), что при более сильном альфа-коэффициенте вы отправляете коэффициенты в ноль более сильно. Чем больше постепенных линий, тем меньше вес, поэтому они влияют меньше или почти не действуют, пока альфа не станет достаточно большой. Более острые имеют больший вес, поэтому они быстрее падают до нуля. Когда они это сделают, функция исчезнет из вашей регрессии.

...