LASSO регрессия для начинающих

машинное обучение

Автор: Benjamin obi tayo ph.d.d.

Перевод: Лао Ци

Книги, относящиеся к этой статье: Подготовка данных и разработка функций


Регрессия LASSO является примером регуляризации алгоритмов регрессии. Регуляризация — это метод, который решает проблему переобучения путем добавления дополнительных параметров, тем самым уменьшая параметры модели и ограничивая сложность. Тремя наиболее часто используемыми методами регуляризованной линейной регрессии являются гребневая регрессия, оператор наименьшей абсолютной сходимости и выбора (LASSO) и эластичная сетевая регрессия.

В этой статье я сосредоточусь на LASSO с простыми расширениями на регрессию гребня и регрессию эластичной сети.

Предположим, мы хотим построить регуляризованную регрессионную модель на наборе данных, содержащем n наблюдений и m признаков.

Регрессия LASSO — это модель со штрафом L1, мы просто добавляем норму L1 к функции стоимости наименьших квадратов:

Смотри сюда

Увеличивая значение гиперпараметра α, мы усиливаем силу регуляризации модели и уменьшаем вес модели. Обратите внимание, что член пересечения w0 не регуляризован, а также обратите внимание, что α = 0 соответствует стандартной регрессии.

Регулируя силу регуляризации, некоторые веса могут стать нулевыми, что делает метод LASSO очень мощным методом уменьшения размерности.

Алгоритм ЛАССО

  • Для заданного α просто минимизируйте функцию стоимости, чтобы найти веса или параметры модели w.
  • Затем норма w (исключая w0) рассчитывается с использованием следующего уравнения:

Практический пример: прогнозирование размера экипажа с использованием набора данных круизного лайнера

Мы будем использовать набор данных круиза Cruise_ship_info.csv, чтобы продемонстрировать метод LASSO.

Этот случай был опубликован на экспериментальной платформе, обратите внимание на публичный аккаунт WeChat: Lao Qi Classroom. и ответ:#姓名+手机号+案例#Получать.Уведомление:#должен иметь.

1. Импортируйте необходимые библиотеки

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

2. Прочитайте набор данных и отобразите столбцы

df = pd.read_csv("cruise_ship_info.csv")
df.head()

3. Выберите важные переменные

Из соответствующей разработки в разделе «Подготовка данных и проектирование признаков» граф матрицы ковариаций можно использовать для выбора признаков и уменьшения размерности. Из вышеупомянутого набора данных видно, что среди 6 прогностических признаков ([‘age’, ‘tonnage’, ‘passengers’, ‘length’, ‘cabins’, ‘passenger_density’]), если мы предположим, что коэффициент корреляции между важной характеристикой и целевой переменной составляет 0,6 или выше, то целевая переменная «экипаж» сильно коррелирует с 4 предикторными переменными «тоннаж», «пассажиры», «длина» и « кабины" Strong. Таким образом, мы можем уменьшить размерность пространства признаков с 6 до 4.

cols_selected = ['Tonnage', 'passengers', 'length', 'cabins','crew']
df[cols_selected].head()

X = df[cols_selected].iloc[:,0:4].values    # features matrix 
y = df[cols_selected]['crew'].values        # target variable

4. Реализуйте регрессию LASSO

А. Разделите набор данных на обучающий набор и тестовый набор

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split( X, y, 
                                      test_size=0.4, random_state=0)

б. Интервализация данных признаков

from sklearn.preprocessing import StandardScaler

sc_y = StandardScaler()
sc_x = StandardScaler()
y_std = sc_y.fit_transform(y_train[:, np.newaxis]).flatten()
X_train_std = sc_x.fit_transform(X_train)
X_test_std = sc_x.transform(X_test)
y_train_std = sc_y.fit_transform(y_train[:, np.newaxis]).flatten()

C. Реализовать регрессию LASSO

from sklearn.linear_model import Lasso
from sklearn.metrics import r2_score

alpha = np.linspace(0.01,0.4,10)
r2_train =[]
r2_test =[]
norm = []
alpha = np.linspace(0.01,0.4,10)
for i in range(10):
    lasso = Lasso(alpha = alpha[i])
    lasso.fit(X_train_std,y_train_std)
    y_train_std = lasso.predict(X_train_std)
    y_test_std = lasso.predict(X_test_std)
    r2_train = np.append(r2_train,
              r2_score(y_train,sc_y.inverse_transform(y_train_std)))
    r2_test = np.append(r2_test,
              r2_score(y_test,sc_y.inverse_transform(y_test_std)))
    norm = np.append(norm,np.linalg.norm(lasso.coef_))

г. Визуализируйте результаты

plt.figure(figsize=(8,6))
plt.scatter(alpha,r2_train,label='r2_train')
plt.plot(alpha,r2_train)
plt.scatter(alpha,r2_test,label='r2_test')
plt.plot(alpha,r2_test)
plt.scatter(alpha,norm,label = 'norm')
plt.plot(alpha,norm)
plt.ylim(-0.1,1)
plt.xlim(0,.43)
plt.xlabel('alpha', size = 14)
plt.ylabel('R2_score',size = 14)
plt.legend()
plt.show()

Заметим, что по мере увеличения параметра регуляризации α норма коэффициентов регрессии становится все меньше и меньше. Это означает, что большее количество коэффициентов регрессии обнуляется, что увеличивает систематическую ошибку (чрезмерное упрощение модели). Сохранение α низким, например, когда α = 0,1 или ниже, является лучшим балансом смещения и дисперсии. Прежде чем решить, какой метод уменьшения размерности использовать, этот метод следует сравнить с анализом главных компонентов (PCA).

Оригинальная ссылка:к data science.com/lasso - тепловая трубка…

Найдите общедоступный номер технических вопросов и ответов: класс Лао Ци

Ответ в публичном аккаунте:Лао Ципросмотреть все статьи, книги, курсы.