Лассо и Ридж — это два метода регрессии, используемые для борьбы с переоснащением. Они направлены на сокращение количества функций, используемых в регрессии. Это делается путем применения стоимости к величине коэффициентов, а также минимизации ошибки между прогнозируемыми и фактическими наблюдениями. Это называется «регулирование».

Разница между двумя подходами в том, как применяется штраф за стоимость.

Лассо использует подход L1: а именно складывает сумму квадратов коэффициентов и умножает ее на альфу (определяемую пользователем — гиперпараметр), которая добавляется к стандартной функции стоимости.

Ridge использует подход L2: а именно, берет сумму абсолютных значений коэффициентов и применяет к ней альфа-канал, добавляя это к стандартной функции стоимости.

Лассо имеет дело с L1

Цель = RSS + α * (сумма абсолютных значений коэффициентов)

Ридж имеет дело с L2

Цель = RSS + α * (сумма квадратов значений коэффициентов)

NB Lasso в конечном итоге сделает некоторые коэффициенты равными нулю. Абсолютный уклон. Таким образом, он выполняет выбор функции

Ridge включает в себя все функции или ни одну из них.

  • Ridge: в основном используется для предотвращения переобучения. Поскольку он включает в себя все функции, он не очень полезен в случае непомерно высоких #features, скажем, в миллионах, поскольку это создаст вычислительные проблемы.
  • Лассо: поскольку он предоставляет разреженные решения, обычно это модель выбора (или какой-то вариант этой концепции) для моделирования случаев, когда #features исчисляются миллионами или более. В таком случае получение разреженного решения имеет большое вычислительное преимущество, поскольку признаки с нулевыми коэффициентами можно просто игнорировать.
  • Хребет: обычно хорошо работает даже при наличии сильно коррелированных признаков, поскольку включает их все в модель, но коэффициенты распределяются между ними в зависимости от корреляции.
  • Лассо: произвольно выбирает любой признак среди сильно коррелированных и сводит коэффициенты остальных к нулю. Кроме того, выбранная переменная изменяется случайным образом при изменении параметров модели. Как правило, это работает не так хорошо, как гребневая регрессия.

Ниже приведен код для некоторых примеров того, как использовать in в python.

# Импорт необходимых модулей
из sklearn.linear_model import Ridge
из sklearn.model_selection import cross_val_score

# Настройка массива альф и списков для хранения оценок
alpha_space = np.logspace(-4, 0, 50)

#alpha_space = np.linspace(0, 1, 5)
ridge_scores = []
ridge_scores_std = []

# Создадим регрессор гребня: ridge
ridge = Ridge(normalize=True)

# Вычислить баллы по диапазону альф
для альфы в alpha_space:

# Укажите используемое альфа-значение: ridge.alpha
ridge.alpha = alpha

# Выполните 10-кратное CV: ridge_cv_scores
ridge_cv_scores = cross_val_score(ridge,X,y, cv=10)

# Добавляем среднее значение ridge_cv_scores к ridge_scores
ridge_scores.append(np.mean(ridge_cv_scores))

# Добавляем стандартное значение ridge_cv_scores к ridge_scores_std
ridge_scores_std.append(np.std(ridge_cv_scores))

Код лассо

из sklearn.linear_model импортировать лассо

# Создать регрессор лассо: lasso
lasso = Lasso(alpha=0.4,normalize=True)

# Подгонка регрессора к данным
lasso.fit(X,y)

# Вычисление и печать коэффициентов
lasso_coef = lasso.coef_
print(lasso_coef)

# Постройте коэффициенты
plt.plot(range(len(df_columns)), lasso_coef)
plt.xticks(range(len(df_columns)), df_columns.values, rotate=60)
plt.margins(0,02)
plt.show()