Автор: 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 - тепловая трубка…
Найдите общедоступный номер технических вопросов и ответов: класс Лао Ци
Ответ в публичном аккаунте:Лао Ципросмотреть все статьи, книги, курсы.