microsoftml.rx_fast_linear: Model liniowy ze stochastycznym podwójnym wznoszeniem współrzędnych

Usage

microsoftml.rx_fast_linear()

Description

Stochastyczny trener optymalizacji z podwójnym wzniesieniem współrzędnych (SDCA) do liniowej klasyfikacji binarnej i regresji.

Szczegóły

rx_fast_linear jest trenerem opartym na metodzie Stochastic Dual Coordinate Ascent (SDCA), nowoczesnej technice optymalizacji funkcji celowych wypukłych. Algorytm może być skalowany do użycia na dużych zbiorach danych z wyłączeniem pamięci dzięki pół-asynchronicznej implementacji obsługującej wielowątkowość. Konwergencja jest wspierana przez okresowe wymuszanie synchronizacji między aktualizacjami pierwotnymi a dualnymi w osobnym wątku. Dostępnych jest także kilka opcji funkcji strat. Metoda SDCA łączy kilka najlepszych właściwości i możliwości algorytmów regresji logistycznej i SVM. Więcej informacji o SDCA można znaleźć w cytowaniach w sekcji referencyjnej.

Tradycyjne algorytmy optymalizacyjne, takie jak stochastyczny gradient descent (SGD), optymalizują bezpośrednio funkcję strat empirycznych. SDCA wybiera inne podejście, które optymalizuje problem dualny. Dualna funkcja strat jest parametryzowana przez wagi dla przykładu. W każdej iteracji, gdy odczytany jest przykład treningowy ze zbioru danych treningowych, odpowiadający mu przykładowi waga jest korygowana tak, aby dualna funkcja strat była optymalizowana względem bieżącego przykładu. SDCA nie wymaga tempa uczenia się do określenia wielkości kroku, jak wymaga to w różnych metodach gradientowego zejścia.

rx_fast_linear Obecnie wspiera klasyfikację binarną za pomocą trzech typów funkcji strat: straty logarytmu, straty zawiasów oraz wygładzonych strat zawiasowych. Regresja liniowa również wspiera z funkcją strat kwadratowych. Elastyczną nieto regularizację można określić za pomocą parametrów l2_weight i l1_weight . Należy zauważyć, że ma l2_weight wpływ na szybkość zbieżności. Ogólnie rzecz biorąc, im większe , l2_weighttym szybciej SDCA zbiega.

Należy zauważyć, że rx_fast_linear jest to algorytm optymalizacji stochastycznej i strumieniowej. Wyniki zależą od kolejności danych treningowych. Aby uzyskać powtarzalne wyniki, zaleca się ustawienie shuffle na i Falsetrain_threads na 1.

Arguments

formuła

Wzór opisany w revoscalepy.rx_formula. Terminy interakcji i F() nie są obecnie obsługiwane w języku microsoftml.

dane

Obiekt źródła danych lub ciąg znaków określający plik xdf lub obiekt ramki danych.

metoda

Określa typ modelu za pomocą ciągu znaków: "binary" dla domyślnej klasyfikacji binarnej lub "regression" dla regresji liniowej.

loss_function

Określa funkcję strat empirycznych do optymalizacji. Dla klasyfikacji binarnej dostępne są następujące opcje:

  • log_loss: Strata logów. Jest to opcja domyślna.

  • hinge_loss: Strata zawiasów SVM. Jego parametr reprezentuje rozmiar marginesu.

  • smooth_hinge_loss: Wygładzone straty zawiasu. Jego parametr reprezentuje stałą wygładzania.

Dla regresji liniowej obecnie obsługiwana jest strata squared_loss kwadratowa. Gdy ten parametr jest ustawiony na Brak, jego wartość domyślna zależy od rodzaju uczenia:

Poniższy przykład zmienia loss_function na hinge_loss: rx_fast_linear(..., loss_function=hinge_loss()).

l1_weight

Określa wagę regularizacji L1. Wartość musi być albo nieujemna, albo Brak. Jeśli podano Brak , rzeczywista wartość jest automatycznie obliczana na podstawie zbioru danych. Zero jest wartością domyślną.

l2_weight

Określa wagę regularizacji L2. Wartość musi być albo nieujemna, albo Brak. Jeśli podano Brak , rzeczywista wartość jest automatycznie obliczana na podstawie zbioru danych. Zero jest wartością domyślną.

train_threads

Określa, ile wątków współbieżnych można użyć do uruchomienia algorytmu. Gdy ten parametr jest ustawiony na Zero, liczba użytych wątków jest określana na podstawie liczby dostępnych procesorów logicznych oraz rzadkości danych. Ustaw tak, 1 aby algorytm uruchamiał w jednym wątku.

convergence_tolerance

Określa próg tolerancji stosowany jako kryterium zbieżności. Musi być między 0 a 1. Wartość domyślna to 0.1. Algorytm uważa się za zbieżny, jeśli względna luka dualności, czyli stosunek między luką dualności a stratą pierwotną, znajduje się poniżej określonej tolerancji zbieżności.

max_iterations

Określa górną granicę liczby iteracji treningowych. Ten parametr musi być dodatni lub braku. Jeśli podano Brak , rzeczywista wartość jest automatycznie obliczana na podstawie zbioru danych. Każda iteracja wymaga pełnego przejścia danych treningowych. Trening kończy się po osiągnięciu przez całkowitą liczbę iteracji określonej górnej granicy lub gdy funkcja strat zbiegnie, w zależności od tego, co nastąpi wcześniej.

shuffle

Określa, czy należy tasować dane treningowe. Ustaw True tasowanie danych; False nie tasowanie. Wartość domyślna to True. SDCA to stochastyczny algorytm optymalizacji. Jeśli tasowanie jest włączone, dane treningowe są tasowane przy każdej iteracji.

check_frequency

Liczba iteracji, po których funkcja strat jest obliczana i sprawdzana, aby ustalić, czy się zbiega. Podana wartość musi być dodatnia liczba całkowita lub Brak. Jeśli Brak, rzeczywista wartość jest automatycznie obliczana na podstawie zbioru danych. W przeciwnym razie, na przykład, jeśli checkFrequency = 5 jest określona, to funkcja strat jest obliczana, a zbieżność sprawdzana jest co 5 iteracji. Obliczenie funkcji utraty wymaga osobnego, pełnego przejścia danych treningowych.

normalizowanie

Określa typ używanej automatycznej normalizacji:

  • "Auto": jeśli jest wymagana normalizacja, jest wykonywana automatycznie. Jest to wybór domyślny.

  • "No": nie jest wykonywana normalizacja.

  • "Yes": jest wykonywana normalizacja.

  • "Warn": jeśli jest wymagana normalizacja, zostanie wyświetlony komunikat ostrzegawczy, ale normalizacja nie jest wykonywana.

Normalizacja zmienia skalowanie różnych zakresów danych do standardowej skali. Skalowanie funkcji zapewnia proporcjonalne odległości między punktami danych i umożliwia różne metody optymalizacji, takie jak spadek gradientu, znacznie szybsze. W przypadku normalizacji MaxMin jest używany normalizator. Normalizuje wartości w interwale [a, b] gdzie -1 <= a <= 0 i 0 <= b <= 1 .b - a = 1 Ten normalizator zachowuje rozrzedliwość przez mapowanie zera na zero.

ml_transforms

Określa listę przekształceń MicrosoftML, które mają być wykonywane na danych przed trenowanie lub Brak , jeśli nie mają być wykonywane żadne przekształcenia. Zobacz featurize_text, categoricali categorical_hash, aby zapoznać się z obsługiwanymi przekształceniami. Te przekształcenia są wykonywane po wszelkich określonych przekształceniach języka Python. Wartość domyślna to Brak.

ml_transform_vars

Określa wektor znaków nazw zmiennych do użycia w ml_transforms lub Brak , jeśli nie ma być używany. Wartość domyślna to Brak.

row_selection

NIEOBSŁUGIWANE. Określa wiersze (obserwacje) z zestawu danych, które mają być używane przez model z nazwą zmiennej logicznej z zestawu danych (w cudzysłowie) lub z wyrażeniem logicznym przy użyciu zmiennych w zestawie danych. Przykład:

  • row_selection = "old" będzie używać tylko obserwacji, w których wartość zmiennej old to True.

  • row_selection = (age > 20) & (age < 65) & (log(income) > 10) Używa tylko obserwacji, w których wartość age zmiennej wynosi od 20 do 65, a wartość log zmiennej income jest większa niż 10.

Wybór wiersza jest wykonywany po przetworzeniu wszystkich przekształceń danych (zobacz argumenty transforms lub transform_function). Podobnie jak w przypadku wszystkich wyrażeń, row_selection można zdefiniować poza wywołaniem funkcji przy użyciu expression funkcji.

Przekształca

NIEOBSŁUGIWANE. Wyrażenie formularza reprezentującego pierwszą rundę przekształceń zmiennych. Podobnie jak w przypadku wszystkich wyrażeń transforms (lub row_selection) można zdefiniować poza wywołaniem funkcji przy użyciu expression funkcji .

transform_objects

NIEOBSŁUGIWANE. Nazwana lista zawierająca obiekty, do których można odwoływać się w transformselementach , transform_functioni row_selection.

transform_function

Funkcja przekształcania zmiennej.

transform_variables

Wektor znaków zmiennych zestawu danych wejściowych potrzebnych do funkcji przekształcania.

transform_packages

NIEOBSŁUGIWANE. Wektor znaków określający dodatkowe pakiety języka Python (poza określonymi w ) RxOptions.get_option("transform_packages")do udostępnienia i wstępnie załadowane do użycia w funkcjach przekształcania zmiennych. Na przykład te jawnie zdefiniowane w funkcjach revoscalepy za pośrednictwem ich transforms argumentów i transform_function lub zdefiniowanych niejawnie za pośrednictwem ich formula lub row_selection argumentów. Argumentem transform_packages może być również Brak wskazujący, że żadne pakiety poza nie RxOptions.get_option("transform_packages") są wstępnie ładowane.

transform_environment

NIEOBSŁUGIWANE. Środowisko zdefiniowane przez użytkownika, które służy jako element nadrzędny dla wszystkich środowisk opracowanych wewnętrznie i używanych do przekształcania danych zmiennych. Jeśli transform_environment = Nonejest używane nowe środowisko "hash" z nadrzędnym elementem revoscalepy.baseenv.

blocks_per_read

Określa liczbę bloków do odczytu dla każdego fragmentu danych odczytywanych ze źródła danych.

report_progress

Wartość całkowita określająca poziom raportowania postępu przetwarzania wierszy:

  • 0: nie zgłoszono żadnego postępu.

  • 1: liczba przetworzonych wierszy jest drukowana i aktualizowana.

  • 2: są zgłaszane przetworzone wiersze i chronometraż.

  • 3: są zgłaszane wiersze przetworzone i wszystkie chronometraż.

pełny

Wartość całkowita określająca ilość żądanych danych wyjściowych. Jeśli 0podczas obliczeń nie są drukowane żadne pełne dane wyjściowe. Wartości całkowite z 1 , aby 4 zapewnić coraz większe ilości informacji.

compute_context

Ustawia kontekst, w którym są wykonywane obliczenia określone przy użyciu prawidłowej wersji revoscalepy. RxComputeContext. Obecnie lokalne i revoscalepy. Obsługiwane są konteksty obliczeniowe RxInSqlServer .

Zespół

Parametry sterowania dla ensembling.

Zwroty

FastLinear Obiekt z wytrenowanym modelem.

Note

Ten algorytm jest wielowątkowy i nie będzie próbował ładować całego zbioru danych do pamięci.

References

Skalowanie stochastycznego wznoszenia współrzędnych dualnych

Stochastyczne metody wzrostu współrzędnych dla minimalizacji uregulowanych strat

Przykład klasyfikacji binarnej

'''
Binary Classification.
'''
import numpy
import pandas
from microsoftml import rx_fast_linear, rx_predict
from revoscalepy.etl.RxDataStep import rx_data_step
from microsoftml.datasets.datasets import get_dataset

infert = get_dataset("infert")

import sklearn
if sklearn.__version__ < "0.18":
    from sklearn.cross_validation import train_test_split
else:
    from sklearn.model_selection import train_test_split

infertdf = infert.as_df()
infertdf["isCase"] = infertdf.case == 1
data_train, data_test, y_train, y_test = train_test_split(infertdf, infertdf.isCase)

forest_model = rx_fast_linear(
    formula=" isCase ~ age + parity + education + spontaneous + induced ",
    data=data_train)
    
# RuntimeError: The type (RxTextData) for file is not supported.
score_ds = rx_predict(forest_model, data=data_test,
                     extra_vars_to_write=["isCase", "Score"])
                     
# Print the first five rows
print(rx_data_step(score_ds, number_rows_read=5))

Output:

Automatically adding a MinMax normalization transform, use 'norm=Warn' or 'norm=No' to turn this behavior off.
Beginning processing data.
Rows Read: 186, Read Time: 0, Transform Time: 0
Beginning processing data.
Beginning processing data.
Rows Read: 186, Read Time: 0, Transform Time: 0
Beginning processing data.
Beginning processing data.
Rows Read: 186, Read Time: 0, Transform Time: 0
Beginning processing data.
Using 2 threads to train.
Automatically choosing a check frequency of 2.
Auto-tuning parameters: maxIterations = 8064.
Auto-tuning parameters: L2 = 2.666837E-05.
Auto-tuning parameters: L1Threshold (L1/L2) = 0.
Using best model from iteration 568.
Not training a calibrator because it is not needed.
Elapsed time: 00:00:00.5810985
Elapsed time: 00:00:00.0084876
Beginning processing data.
Rows Read: 62, Read Time: 0, Transform Time: 0
Beginning processing data.
Elapsed time: 00:00:00.0292334
Finished writing 62 rows.
Writing completed.
Rows Read: 5, Total Rows Processed: 5, Total Chunk Time: Less than .001 seconds 
  isCase PredictedLabel     Score  Probability
0   True           True  0.990544     0.729195
1  False          False -2.307120     0.090535
2  False          False -0.608565     0.352387
3   True           True  1.028217     0.736570
4   True          False -3.913066     0.019588

Przykład regresji

'''
Regression.
'''
import numpy
import pandas
from microsoftml import rx_fast_linear, rx_predict
from revoscalepy.etl.RxDataStep import rx_data_step
from microsoftml.datasets.datasets import get_dataset

attitude = get_dataset("attitude")

import sklearn
if sklearn.__version__ < "0.18":
    from sklearn.cross_validation import train_test_split
else:
    from sklearn.model_selection import train_test_split

attitudedf = attitude.as_df()
data_train, data_test = train_test_split(attitudedf)

model = rx_fast_linear(
    formula="rating ~ complaints + privileges + learning + raises + critical + advance",
    method="regression",
    data=data_train)
    
# RuntimeError: The type (RxTextData) for file is not supported.
score_ds = rx_predict(model, data=data_test,
                     extra_vars_to_write=["rating"])
                     
# Print the first five rows
print(rx_data_step(score_ds, number_rows_read=5))

Output:

Automatically adding a MinMax normalization transform, use 'norm=Warn' or 'norm=No' to turn this behavior off.
Beginning processing data.
Rows Read: 22, Read Time: 0.001, Transform Time: 0
Beginning processing data.
Beginning processing data.
Rows Read: 22, Read Time: 0.001, Transform Time: 0
Beginning processing data.
Beginning processing data.
Rows Read: 22, Read Time: 0, Transform Time: 0
Beginning processing data.
Using 2 threads to train.
Automatically choosing a check frequency of 2.
Auto-tuning parameters: maxIterations = 68180.
Auto-tuning parameters: L2 = 0.01.
Auto-tuning parameters: L1Threshold (L1/L2) = 0.
Using best model from iteration 54.
Not training a calibrator because it is not needed.
Elapsed time: 00:00:00.1114324
Elapsed time: 00:00:00.0090901
Beginning processing data.
Rows Read: 8, Read Time: 0, Transform Time: 0
Beginning processing data.
Elapsed time: 00:00:00.0330772
Finished writing 8 rows.
Writing completed.
Rows Read: 5, Total Rows Processed: 5, Total Chunk Time: Less than .001 seconds 
   rating      Score
0    71.0  72.630440
1    67.0  56.995350
2    67.0  52.958641
3    72.0  80.894539
4    50.0  38.375427

Funkcje straty