Scikit Learn - Stochastic Gradient Descent
Tutaj dowiemy się o algorytmie optymalizacji w Sklearn, określanym jako Stochastic Gradient Descent (SGD).
Stochastic Gradient Descent (SGD) to prosty, ale skuteczny algorytm optymalizacji używany do znajdowania wartości parametrów / współczynników funkcji, które minimalizują funkcję kosztu. Innymi słowy, służy do dyskryminacyjnego uczenia się klasyfikatorów liniowych w wypukłych funkcjach straty, takich jak SVM i regresja logistyczna. Został on pomyślnie zastosowany do zestawów danych na dużą skalę, ponieważ aktualizacja współczynników jest wykonywana dla każdej instancji szkoleniowej, a nie na końcu instancji.
Klasyfikator SGD
Klasyfikator stochastycznego zejścia gradientowego (SGD) zasadniczo implementuje prostą procedurę uczenia się SGD obsługującą różne funkcje strat i kary do klasyfikacji. Scikit-learn zapewniaSGDClassifier moduł do implementacji klasyfikacji SGD.
Parametry
Poniższa tabela zawiera parametry używane przez SGDClassifier moduł -
Sr.No | Parametr i opis |
---|---|
1 | loss - str, domyślnie = 'zawias' Reprezentuje funkcję straty, która ma być używana podczas implementacji. Wartość domyślna to „zawias”, co da nam liniowy SVM. Inne opcje, których można użyć, to -
|
2 | penalty - str, „brak”, „l2”, „l1”, „elastyczna” Jest to termin regularyzacyjny używany w modelu. Domyślnie jest to L2. Możemy użyć L1 lub „elastycznej siatki”; ale oba mogą przynieść rzadkość do modelu, stąd nieosiągalne z L2. |
3 | alpha - float, domyślnie = 0.0001 Alfa, stała, która zwielokrotnia okres regularyzacji, jest parametrem strojenia, który decyduje o tym, jak bardzo chcemy ukarać model. Wartość domyślna to 0,0001. |
4 | l1_ratio - float, domyślnie = 0,15 Nazywa się to parametrem mieszania ElasticNet. Jego zakres wynosi 0 <= l1_ratio <= 1. Jeśli l1_ratio = 1, kara będzie wynosić L1. Jeśli l1_ratio = 0, karą byłaby kara L2. |
5 | fit_intercept - Boolean, Default = True Ten parametr określa, że do funkcji decyzyjnej należy dodać stałą (odchylenie lub punkt przecięcia). W obliczeniach nie zostanie użyty żaden punkt przecięcia z osią, a dane zostaną już wyśrodkowane, jeśli zostanie ustawione na fałsz. |
6 | tol - float lub none, opcjonalnie, domyślnie = 1.e-3 Ten parametr reprezentuje kryterium zatrzymania dla iteracji. Jego domyślną wartością jest False, ale jeśli jest ustawiona na None, iteracje zatrzymają się, gdyloss > best_loss - tol for n_iter_no_changekolejne epoki. |
7 | shuffle - Boolean, opcjonalne, domyślnie = True Ten parametr określa, czy chcemy, aby nasze dane treningowe były tasowane po każdej epoce, czy nie. |
8 | verbose - liczba całkowita, domyślnie = 0 Reprezentuje poziom gadatliwości. Jego domyślna wartość to 0. |
9 | epsilon - float, domyślnie = 0,1 Ten parametr określa szerokość niewrażliwego regionu. Jeśli strata = „niewrażliwa na epsilon”, każda różnica między bieżącą prognozą a prawidłową etykietą, mniejsza niż próg, zostanie zignorowana. |
10 | max_iter - int, opcjonalne, domyślnie = 1000 Jak sama nazwa wskazuje, reprezentuje maksymalną liczbę przejść przez epoki, czyli dane szkoleniowe. |
11 | warm_start - bool, opcjonalne, domyślnie = false Po ustawieniu tego parametru na True, możemy ponownie użyć rozwiązania poprzedniego wywołania, aby dopasować je jako inicjalizację. Jeśli wybierzemy domyślne, czyli fałszywe, usunie to poprzednie rozwiązanie. |
12 | random_state - int, instancja RandomState lub None, opcjonalne, default = none Ten parametr reprezentuje ziarno wygenerowanej liczby pseudolosowej, która jest używana podczas tasowania danych. Poniżej przedstawiono opcje.
|
13 | n_jobs - int lub none, opcjonalne, Default = None Reprezentuje liczbę procesorów, które mają być używane w obliczeniach OVA (jeden kontra wszystkie) w przypadku problemów z wieloma klasami. Wartość domyślna to none, co oznacza 1. |
14 | learning_rate - ciąg, opcjonalny, domyślny = 'optymalny'
|
15 | eta0 - podwójne, domyślnie = 0,0 Reprezentuje początkowy współczynnik uczenia się dla wyżej wymienionych opcji współczynnika uczenia się, tj. „Stały”, „invscalling” lub „adaptacyjny”. |
16 | power_t - idouble, domyślnie = 0,5 Jest to wykładnik współczynnika uczenia się „incscalling”. |
17 | early_stopping - bool, default = False Ten parametr reprezentuje użycie wczesnego zatrzymania w celu zakończenia treningu, gdy wynik walidacji nie poprawia się. Jego domyślna wartość to false, ale po ustawieniu na true automatycznie odkłada stratyfikowaną część danych szkoleniowych jako walidację i zatrzymuje uczenie, gdy wynik walidacji nie poprawia się. |
18 | validation_fraction - float, domyślnie = 0,1 Jest używany tylko wtedy, gdy wczesne_stopowanie jest prawdziwe. Reprezentuje odsetek danych szkoleniowych, które mają zostać odłożone jako zbiór walidacyjny do wcześniejszego zakończenia danych szkoleniowych. |
19 | n_iter_no_change - int, domyślnie = 5 Reprezentuje liczbę iteracji bez poprawy, jeśli algorytm powinien zostać uruchomiony przed wczesnym zatrzymaniem. |
20 | classs_weight - dict, {class_label: weight} lub „balance”, lub None, opcjonalnie Ten parametr reprezentuje wagi skojarzone z klasami. Jeśli nie zostanie podany, klasy mają mieć wagę 1. |
20 | warm_start - bool, opcjonalne, domyślnie = false Po ustawieniu tego parametru na True, możemy ponownie użyć rozwiązania poprzedniego wywołania, aby dopasować je jako inicjalizację. Jeśli wybierzemy domyślne, czyli fałszywe, usunie to poprzednie rozwiązanie. |
21 | average - iBoolean lub int, opcjonalnie, domyślnie = false Reprezentuje liczbę procesorów, które mają być używane w obliczeniach OVA (jeden kontra wszystkie) w przypadku problemów z wieloma klasami. Wartość domyślna to none, co oznacza 1. |
Atrybuty
Poniższa tabela zawiera atrybuty używane przez SGDClassifier moduł -
Sr.No | Atrybuty i opis |
---|---|
1 | coef_ - tablica, kształt (1, n_features) if n_classes == 2, else (n_classes, n_features) Ten atrybut określa wagę przypisaną do funkcji. |
2 | intercept_ - tablica, kształt (1,) if n_classes == 2, else (n_classes,) Reprezentuje niezależny termin w funkcji decyzyjnej. |
3 | n_iter_ - wew Podaje liczbę iteracji, aby osiągnąć kryterium zatrzymania. |
Implementation Example
Podobnie jak inne klasyfikatory, Stochastic Gradient Descent (SGD) musi być wyposażony w dwie następujące tablice -
Tablica X zawierająca próbki uczące. Ma rozmiar [n_samples, n_features].
Tablica Y zawierająca wartości docelowe, tj. Etykiety klas dla próbek uczących. Ma rozmiar [n_samples].
Example
Poniższy skrypt w Pythonie używa modelu liniowego SGDClassifier -
import numpy as np
from sklearn import linear_model
X = np.array([[-1, -1], [-2, -1], [1, 1], [2, 1]])
Y = np.array([1, 1, 2, 2])
SGDClf = linear_model.SGDClassifier(max_iter = 1000, tol=1e-3,penalty = "elasticnet")
SGDClf.fit(X, Y)
Output
SGDClassifier(
alpha = 0.0001, average = False, class_weight = None,
early_stopping = False, epsilon = 0.1, eta0 = 0.0, fit_intercept = True,
l1_ratio = 0.15, learning_rate = 'optimal', loss = 'hinge', max_iter = 1000,
n_iter = None, n_iter_no_change = 5, n_jobs = None, penalty = 'elasticnet',
power_t = 0.5, random_state = None, shuffle = True, tol = 0.001,
validation_fraction = 0.1, verbose = 0, warm_start = False
)
Example
Teraz, po dopasowaniu, model może przewidywać nowe wartości w następujący sposób -
SGDClf.predict([[2.,2.]])
Output
array([2])
Example
W powyższym przykładzie możemy uzyskać wektor wagi za pomocą następującego skryptu w Pythonie -
SGDClf.coef_
Output
array([[19.54811198, 9.77200712]])
Example
Podobnie możemy uzyskać wartość przechwycenia za pomocą następującego skryptu w Pythonie -
SGDClf.intercept_
Output
array([10.])
Example
Możemy uzyskać oznaczoną odległość do hiperpłaszczyzny za pomocą SGDClassifier.decision_function używany w następującym skrypcie w języku Python -
SGDClf.decision_function([[2., 2.]])
Output
array([68.6402382])
SGD Regressor
Regresor stochastycznego zejścia gradientowego (SGD) zasadniczo implementuje prostą procedurę uczenia się SGD obsługującą różne funkcje strat i kary w celu dopasowania modeli regresji liniowej. Scikit-learn zapewniaSGDRegressor moduł do implementacji regresji SGD.
Parametry
Parametry używane przez SGDRegressorsą prawie takie same, jak te używane w module SGDClassifier. Różnica polega na parametrze „straty”. DlaSGDRegressor parametr utraty modułów wartości dodatnie są następujące -
squared_loss - Odnosi się do zwykłego dopasowania metodą najmniejszych kwadratów.
huber: SGDRegressor- skoryguj wartości odstające, przechodząc od strat kwadratowych do liniowych po odległości epsilon. Praca „hubera” polega na zmodyfikowaniu parametru „squared_loss”, tak aby algorytm skupiał się mniej na korygowaniu wartości odstających.
epsilon_insensitive - Właściwie ignoruje błędy mniejsze niż epsilon.
squared_epsilon_insensitive- To jest to samo, co epsilon_insensitive. Jedyną różnicą jest to, że staje się to kwadratową stratą przekraczającą tolerancję epsilon.
Inną różnicą jest to, że parametr o nazwie „power_t” ma domyślną wartość 0,25 zamiast 0,5, jak w SGDClassifier. Ponadto nie ma parametrów „class_weight” i „n_jobs”.
Atrybuty
Atrybuty SGDRegressor są również takie same jak w module SGDClassifier. Ma raczej trzy dodatkowe atrybuty, jak następuje -
average_coef_ - tablica, kształt (n_features,)
Jak sama nazwa wskazuje, podaje średnie wagi przypisane cechom.
average_intercept_ - tablica, kształt (1,)
Jak sugeruje nazwa, zapewnia on uśredniony termin przechwycenia.
t_ - wew
Podaje liczbę aktualizacji wagi wykonanych podczas fazy treningu.
Note - atrybuty Average_coef_ i Average_intercept_ będą działać po ustawieniu parametru „Average” na True.
Implementation Example
Następujące użycie skryptu Python SGDRegressor model liniowy -
import numpy as np
from sklearn import linear_model
n_samples, n_features = 10, 5
rng = np.random.RandomState(0)
y = rng.randn(n_samples)
X = rng.randn(n_samples, n_features)
SGDReg =linear_model.SGDRegressor(
max_iter = 1000,penalty = "elasticnet",loss = 'huber',tol = 1e-3, average = True
)
SGDReg.fit(X, y)
Output
SGDRegressor(
alpha = 0.0001, average = True, early_stopping = False, epsilon = 0.1,
eta0 = 0.01, fit_intercept = True, l1_ratio = 0.15,
learning_rate = 'invscaling', loss = 'huber', max_iter = 1000,
n_iter = None, n_iter_no_change = 5, penalty = 'elasticnet', power_t = 0.25,
random_state = None, shuffle = True, tol = 0.001, validation_fraction = 0.1,
verbose = 0, warm_start = False
)
Example
Teraz, po dopasowaniu, możemy uzyskać wektor wagi za pomocą następującego skryptu w Pythonie -
SGDReg.coef_
Output
array([-0.00423314, 0.00362922, -0.00380136, 0.00585455, 0.00396787])
Example
Podobnie możemy uzyskać wartość przechwycenia za pomocą następującego skryptu w Pythonie -
SGReg.intercept_
Output
SGReg.intercept_
Example
Liczbę aktualizacji wagi podczas fazy treningu możemy uzyskać za pomocą następującego skryptu w Pythonie -
SGDReg.t_
Output
61.0
Plusy i minusy SGD
Podążając za zaletami SGD -
Stochastic Gradient Descent (SGD) jest bardzo wydajne.
Jest bardzo łatwy do zaimplementowania, ponieważ istnieje wiele możliwości dostrajania kodu.
Zgodnie z wadami SGD -
Stochastic Gradient Descent (SGD) wymaga kilku hiperparametrów, takich jak parametry regularyzacji.
Jest wrażliwy na skalowanie cech.