Ролята на регуляризацията: Балансиране на сложността и генерализацията в машинното обучение

Когато става въпрос за машинно обучение, нашият обхват е да намерим ML модела, който прави най-добрите прогнози за данни, върху които не е бил обучен.

За да направим това, ние обучаваме нашите ML модели на данни за обучение и виждаме как се представят при правенето на прогнози. След това сравняваме ефективността на прогнозите на набора от влакове и на тестовия набор, тоест наборът с нови данни, за да решим кой е най-добрият ML модел между тези, които тестваме, за да разрешим проблема, пред който сме изправени .

В тази статия ще опишем регулирането в машинното обучение като начин за избягване на пренастройването.

Проблемът с пренастройването в машинното обучение

Прекомерното оборудване е проблем, който възниква при машинното обучение, който се дължи на модел, който е станал „твърде специализиран и фокусиран“ върху конкретните данни, за които е бил обучен, и не може да обобщи добре.

Нека покажем картина, описваща трите условия в ML: прекомерно прилягане, недостатъчно прилягане и добро прилягане.

Така че пренастройването е като ученици да запаметяват отговорите на конкретни въпроси: шансовете са те да се провалят на теста, защото не са разбрали предмета. Просто се сетиха как да отговорят на някои въпроси.

От страна на производителността, това, което обикновено се случва, е, че можем да разберем, че един ML е прекалено подходящ, когато показател, който сме избрали да оценим нашия ML модел, е много висок (близо до 100%) както във влака, така и в тестовите набори.

Така че прекомерното оборудване – както и недостатъчното оборудване – е нещо, което ние, като специалисти по данни, абсолютно трябва да избягваме.

Начин да се избегне прекомерното оборудване е чрез регулиране. Да видим как.

Разрешаване на прекомерното оборудване чрез регулиране

Регулирането добавя наказателен период към функцията за загуба по време на обучението на модела: това „обезсърчава“ модела да стане твърде сложен.

Идеята е, че чрез ограничаване на способността на модела да пасва на данните за обучението твърде близо, можем също така да намалим способността му да пасва на шум или случайни вариации в данните. Така избягваме прекомерното оборудване.

Да предположим, че имаме функция на разходите, дефинирана по следния начин:

Къде имаме:

  • „Тета“ е оценител.
  • `x` и `y` са съответно функцията и етикетът на нашия модел.

Ако дефинираме параметъра за регулиране като „ламбда“, а функцията за регулиране като „омега“, тогава регуляризираната целева функция е:

И така, функцията за изучаване сега е сумата от функцията на разходите плюс функция за регулиране.

Функцията за регулиране и параметърът за регулиране могат да варират в зависимост от вида на регулирането, което искаме да използваме.

В следващия параграф ще опишем двата типа функции за регулиране, които са най-използвани в машинното обучение.

Описване на регулацията на Ласо и Ридж

Регулираният модел на Ласо

Регулирането с ласо (най-малко абсолютно и оператор за избор) извършва L1 регулиране, което добавя наказание, равно на абсолютната стойност на големината на коефициентите. Този метод за регулиране кара губещия теглото към произхода чрез добавяне на член за регулиране:

Можем да добавим наказание за регулиране на L1, например към MSE (или към всяка друга функция на разходите, която бихме искали) така:

където имаме:

  • `n` е общият брой на точките/данните, които изучаваме
  • `yi` са действителните стойности
  • „hat yi“ са стойностите, предвидени от нашия модел

Геометричната интерпретация на регулацията на Ласо

Регулирането с ласо, под капака, изпълнява това, което наричаме избор на функции. Нека да дадем графична интерпретация на регулацията на Ласо, за да разберем този факт. За по-голяма простота ще създадем 2-D чертеж с две тегла, w_1 и w_2:

Оранжевите концентрични елипси са геометричното представяне на функцията на разходите, която сме избрали (MSE в нашия случай), докато светлосиният ромб е геометричната интерпретация на наказателната функция (L1).

Нашата цел е да минимизираме функцията на загубата; както можем да видим от горната илюстрация, елипсите могат да бъдат допирателни към ромба само в един от неговите ъгли. В тези ъгли имаме едно от теглата да е 0. Допирането може да бъде по-добре визуализирано в следното изображение, тъй като минимизирането се извършва при допирането на функциите, а не при пресичането между тях:

Сега си представете, че правим този процес за всички тегла w_i; В крайна сметка ще имаме това, което наричаме разреден модел, което означава, модел с по-малко характеристики от първоначалните – защото регулацията на Ласо наказва теглата, като достига до 0 най-големите тегла. Това означава, че нашият модел е извършил избора на функции, като е изпуснал някои функции (тъй като техните тегла са зададени на 0, за да се опрости първоначалният модел).

Математически казано, като помним, че трябва да изчислим градиента на функцията, за да я минимизираме, трябва да изчислим следното:

В този контекст рядкостта се отнася до факта, че някои параметри имат оптимална стойност нула. С други думи, това уравнение може да има числено решение: някои характеристики могат да бъдат доведени до 0 и това се нарича избор на характеристики.

Регулираният модел на Ридж.

Моделът Ridge извършва L2 регулация, която добавя наказание, равно на квадрата на големината на коефициентите. Тази стратегия за регулиране приближава теглата w_i до началото чрез добавяне на член за регулиране.

Можем да добавим наказание за регулиране на L2, например, към MSE (или към всяка друга разходна функция, която бихме искали) така:

Геометричната интерпретация на регуляризацията на Ридж

Нека да дадем графична интерпретация на регулацията на Ridge, за да разберем този факт. За по-голяма простота ще създадем 2-D чертеж с две тегла, w_1 и w_2:

За разлика от регулирането с ласо, Ridge не извършва избор на функции. Ridge намалява сложността на модела, без да намалява броя на независимите променливи, тъй като никога не води до стойност на коефициента до 0. Нека го визуализираме с помощта на следното изображение:

Ако погледнем горното изображение, можем да видим, че елипсите могат да бъдат допирателни към кръга (геометричната интерпретация на L2 наказание) навсякъде, което означава, че моделът наказва големи тегла, без да ги свива до 0. Това означава, че крайният модел ще включва всички независими променливи.

Също така, в този случай, като помним, че трябва да изчислим градиента на функцията, за да я минимизираме, трябва да изчислим следното:

Разликата с регуляризацията на Ласо е, че горното уравнение не винаги може да има числено решение и затова не извършва избор на характеристики.

Внедряване на регуляризирани модели на Ridge и Lasso в Python

И така, нека да видим как можем да приложим и двата узаконени метода.

Започваме с регулацията на Ласо:

import numpy as np
from sklearn.datasets import make_regression
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.metrics import r2_score
from sklearn.linear_model import Lasso
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import make_pipeline
from sklearn.linear_model import LinearRegression
#warnings
import warnings

#ignoring warnings
warnings.filterwarnings('ignore')

# Create a dataset
X, y = make_regression(n_samples=100, n_features=5, noise=10, random_state=42)

# Scale the features
scaler = StandardScaler()
X = scaler.fit_transform(X)

# Subdivide the data into train and test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Fit a 6-degree polynomial to the train data
poly = PolynomialFeatures(degree=6)
X_train_poly = poly.fit_transform(X_train)

# Fit the 6-degree polynomial to the train data
poly_reg = LinearRegression()
poly_reg.fit(X_train_poly, y_train)

# Evaluate the polynomial on the train and test data
X_test_poly = poly.transform(X_test)
y_pred_train = poly_reg.predict(X_train_poly)
y_pred_test = poly_reg.predict(X_test_poly)
r2_score_poly_train = r2_score(y_train, y_pred_train)
r2_score_poly_test = r2_score(y_test, y_pred_test)
print(f'R-squared of 6-degree polynomial on train set: {r2_score_poly_train: .3f}')
print(f'R-squared of 6-degree polynomial on test set: {r2_score_poly_test: .3f}')

# Fit a regularized 6-degree polynomial to the train data
lasso_reg = make_pipeline(PolynomialFeatures(degree=6), Lasso(alpha=1))
lasso_reg.fit(X_train, y_train)

# Evaluate the regularized polynomial on the test data
y_pred_lasso = lasso_reg.predict(X_test)
r2_score_lasso = r2_score(y_test, y_pred_lasso)
print(f'R-squared of regularized 6-degree polynomial on test set: {r2_score_lasso: .3f}')

И получаваме:

R-squared of 6-degree polynomial on train set:  1.000
R-squared of 6-degree polynomial on test set: -84.110
R-squared of regularized 6-degree polynomial on test set:  0.827

И така, както можем да видим, „стандартният“ 6-степенен полином е превъзходен, защото има R² от 1 на набора от влакове и отрицателен на тестовия комплект.

Вместо това 6-степенният регуляризиран модел има приемливо R² в тестовия набор, което означава, че има добра производителност на обобщение. По този начин регуляризацията е подобрила работата на нерегуларизирания модел.

Сега, нека направим подобен пример, използвайки модела Ridge:

import numpy as np
from sklearn.datasets import make_regression
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.metrics import r2_score
from sklearn.linear_model import Ridge
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import make_pipeline
from sklearn.linear_model import LinearRegression

# Create a dataset
X, y = make_regression(n_samples=100, n_features=3, noise=5, random_state=42)

# Scale the features
scaler = StandardScaler()
X = scaler.fit_transform(X)

# Subdivide the data into train and test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Fit a 6-degree polynomial to the train data
poly = PolynomialFeatures(degree=6)
X_train_poly = poly.fit_transform(X_train)

# Fit the 6-degree polynomial to the train data
poly_reg = LinearRegression()
poly_reg.fit(X_train_poly, y_train)

# Evaluate the polynomial on the train and test data
X_test_poly = poly.transform(X_test)
y_pred_train = poly_reg.predict(X_train_poly)
y_pred_test = poly_reg.predict(X_test_poly)
r2_score_poly_train = r2_score(y_train, y_pred_train)
r2_score_poly_test = r2_score(y_test, y_pred_test)
print(f'R-squared of 6-degree polynomial on train set: {r2_score_poly_train}')
print(f'R-squared of 6-degree polynomial on test set: {r2_score_poly_test}')

# Fit a regularized 6-degree polynomial to the train data
ridge_reg = make_pipeline(PolynomialFeatures(degree=6), Ridge(alpha=1))
ridge_reg.fit(X_train, y_train)

# Evaluate the regularized polynomial on the test data
y_pred_ridge = ridge_reg.predict(X_test)
r2_score_ridge = r2_score(y_test, y_pred_ridge)
print(f'R-squared of regularized 6-degree polynomial on test set: {r2_score_ridge}')

И получаваме:

R-squared of 6-degree polynomial on train set: 1.0
R-squared of 6-degree polynomial on test set: -1612.4842791834997
R-squared of regularized 6-degree polynomial on test set: 0.9266258222037977

Така че регуляризирането на гребена, дори в този случай, е повишило производителността на нерегуларизирания полиномен модел. Освен това се представя дори по-добре от модела Lasso.

Изводи

В тази статия обяснихме проблема с прекомерното оборудване и как да го разрешим чрез регулиране.

Но кога да използваме единия регулиран модел и един другия. Като основно правило:

  1. По-добре да използваме регулацията на Ridge, когато характеристиките са силно корелирани. Следователно е важно да проучим корелационната матрица, преди да решим кои характеристики да изтрием от изследването на нашия проблем.
  2. Регулирането с ласо помага за намаляване на функциите в набор от данни. Регулирането с ласо автоматично избира подмножество от най-важните характеристики, като същевременно свива коефициентите на по-малко важните характеристики до нула. Така че регулирането на ласо е полезно:
  3. За набори от данни с висока размерност.
  4. Когато значителен брой характеристики са свързани.
  5. За налагане на рядкост на коефициента на модела.