microsoftml.rx_fast_linear: Lineární model se stochastickým duálním souřadnicovým vzestupem

Usage

microsoftml.rx_fast_linear()

Description

Stochastický optimalizační trenér s duálním vzestupem souřadnic (SDCA) pro lineární binární klasifikaci a regresi.

Podrobnosti

rx_fast_linear je trenér založený na metodě Stochastic Dual Coordinate Ascent (SDCA), což je špičková optimalizační technika pro konvexní cílové funkce. Algoritmus lze škálovat pro použití na velkých datových sadách s nedostatkem paměti díky polo-asynchronizované implementaci, která podporuje vícevláknové zpracování. Konvergence je podporována pravidelným vynucováním synchronizace mezi primárními a duálními aktualizacemi v samostatném vlákně. K dispozici je také několik možností ztrátových funkcí. Metoda SDCA kombinuje několik nejlepších vlastností a schopností logistické regrese a SVM algoritmů. Pro více informací o SDCA viz citace v sekci literatury.

Tradiční optimalizační algoritmy, jako je stochastický gradientní sestup (SGD), optimalizují empirickou ztrátovou funkci přímo. SDCA zvolila jiný přístup, který optimalizuje duální problém. Duální ztrátová funkce je parametrizována váhami podle příkladu. V každé iteraci, když je načten tréninkový příklad z trénovací datové sady, je odpovídající váha příkladu upravena tak, aby byla optimalizována duální ztrátová funkce vzhledem k aktuálnímu příkladu. SDCA nepotřebuje žádnou rychlost učení k určení velikosti kroku, jak je vyžadováno u různých metod gradientního sestupu.

rx_fast_linear V současnosti podporuje binární klasifikaci třemi typy ztrátových funkcí: logaritmická ztráta, ztráta závěsu a vyhlazená ztráta závěsu. Lineární regrese také podporuje s druhou mocnou ztrátovou funkcí. Elastická čistá regularizace může být specifikována pomocí parametrů l2_weight a l1_weight . Všimněte si, že má l2_weight vliv na rychlost konvergence. Obecně platí, že čím větší , l2_weighttím rychleji SDCA konverguje.

Všimněte si, že rx_fast_linear jde o stochastický a proudový optimalizační algoritmus. Výsledky závisí na pořadí trénovacích dat. Pro reprodukovatelné výsledky se doporučuje nastavit na shuffle a Falsetrain_threads na 1.

Arguments

vzorec

Vzorec popsaný v revoscalepy.rx_formula. Výrazy interakce a F() v microsoftml se v současné době nepodporují.

data

Objekt zdroje dat nebo řetězec znaku určující soubor .xdf nebo objekt datového rámce.

metoda

Specifikuje typ modelu pomocí řetězce znaků: "binary" pro výchozí binární klasifikaci nebo "regression" pro lineární regresi.

loss_function

Specifikuje empirickou ztrátovou funkci pro optimalizaci. Pro binární klasifikaci jsou k dispozici následující možnosti:

  • log_loss: Ztráta logu. Toto je výchozí hodnota.

  • hinge_loss: Ztráta kloubu SVM. Jeho parametr představuje velikost okraje.

  • smooth_hinge_loss: Vyhlazená ztráta pantu. Jeho parametr představuje vyhlazovací konstantu.

Pro lineární regresi je v současnosti podporována druhá mocnina ztráty squared_loss . Pokud je tento parametr nastaven na Nulu, jeho výchozí hodnota závisí na typu učení:

Následující příklad mění loss_function na hinge_loss: rx_fast_linear(..., loss_function=hinge_loss()).

l1_weight

Specifikuje váhu regularizace L1. Hodnota musí být buď nezáporná, nebo žádná. Pokud je specifikováno Žádné , skutečná hodnota se automaticky vypočítá na základě datové sady. Žádná je výchozí hodnota.

l2_weight

Specifikuje váhu regularizace L2. Hodnota musí být buď nezáporná, nebo žádná. Pokud je specifikováno Žádné , skutečná hodnota se automaticky vypočítá na základě datové sady. Žádná je výchozí hodnota.

train_threads

Specifikuje, kolik souběžných vláken lze použít k spuštění algoritmu. Pokud je tento parametr nastaven na Žádné, počet použitých vláken se určuje na základě počtu dostupných logických procesorů pro proces i na základě řídkosti dat. Nastavte ho tak, 1 aby algoritmus běžel v jednom vlákně.

convergence_tolerance

Specifikuje toleranci používaný jako kritérium konvergence. Musí být mezi 0 a 1. Výchozí hodnota je 0.1. Algoritmus se považuje za konvergující, pokud relativní dualitní mezera, což je poměr mezi dualitní mezerou a primární ztrátou, klesá pod specifikovanou toleranci konvergence.

max_iterations

Specifikuje horní hranici počtu trénovacích iterací. Tento parametr musí být kladný nebo žádný. Pokud je specifikováno Žádné , skutečná hodnota se automaticky vypočítá na základě datové sady. Každá iterace vyžaduje kompletní průchod trénovacích dat. Trénování končí poté, co celkový počet iterací dosáhne stanovené horní meze, nebo když se ztrátová funkce konverguje, podle toho, co nastane dříve.

náhodné pořadí

Specifikuje, zda má trénovací data zamíchat. Nastavte True na míchání dat; False ne na náhodné přehrávání. Výchozí hodnota je True. SDCA je stochastický optimalizační algoritmus. Pokud je míchání zapnuto, trénovací data se při každé iterace promíchávají.

check_frequency

Počet iterací, po kterých je ztrátová funkce vypočítána a zkontrolována, aby se zjistilo, zda konvergovala. Uvedená hodnota musí být kladné celé číslo nebo žádné. Pokud žádná, skutečná hodnota se automaticky vypočítá na základě datové sady. Jinak je například checkFrequency = 5 specifikováno, pak se vypočítá ztrátová funkce a konvergence se kontroluje každých 5 iterací. Výpočet ztrátové funkce vyžaduje samostatný kompletní průchod trénovacích dat.

Normalizace

Určuje typ použité automatické normalizace:

  • "Auto": Pokud je potřeba normalizace, provede se automaticky. Toto je výchozí volba.

  • "No": Neprovádí se normalizace.

  • "Yes": normalizace se provádí.

  • "Warn": Pokud je potřeba normalizace, zobrazí se zpráva s upozorněním, ale normalizace se neprovede.

Normalizace rescales disparate data ranges to a standard scale. Škálování funkcí zajišťuje, že vzdálenosti mezi datovými body jsou proporcionální a umožňují mnohem rychleji konvergovat různé metody optimalizace, jako je gradientní sestup. Při normalizaci MaxMin se použije normalizátor. Normalizuje hodnoty v intervalu [a, b] where -1 <= a <= 0 a 0 <= b <= 1 .b - a = 1 Tento normalizátor zachovává sparsity tím, že namapuje nulu na nulu.

ml_transforms

Určuje seznam transformací MicrosoftML, které se mají provést s daty před trénováním nebo Žádná , pokud se neprovedou žádné transformace. Viz featurize_text, categoricala categorical_hash, pro transformace, které jsou podporovány. Tyto transformace se provádějí po všech zadaných transformacích Pythonu. Výchozí hodnota je None.

ml_transform_vars

Určuje vektor znaku názvů proměnných, který má být použit v ml_transforms nebo None , pokud se žádný použít. Výchozí hodnota je None.

row_selection

NEPODPORUJE SE. Určuje řádky (pozorování) ze sady dat, které má model používat s názvem logické proměnné ze sady dat (v uvozovkách) nebo logickým výrazem pomocí proměnných v sadě dat. Příklady:

  • row_selection = "old"použije pouze pozorování, ve kterých je oldhodnota proměnné True .

  • row_selection = (age > 20) & (age < 65) & (log(income) > 10) používá pouze pozorování, ve kterých je hodnota age proměnné mezi 20 a 65 a hodnotou logincome proměnné je větší než 10.

Výběr řádku se provede po zpracování všech transformací dat (viz argumenty transforms nebo transform_function). Stejně jako u všech výrazů row_selection je možné definovat mimo volání funkce pomocí expression funkce.

transformuje

NEPODPORUJE SE. Výraz formuláře, který představuje první kolo transformací proměnných. Stejně jako u všech výrazů transforms je možné definovat (nebo row_selection) mimo volání funkce pomocí expression funkce.

transform_objects

NEPODPORUJE SE. Pojmenovaný seznam obsahující objekty, na které lze odkazovat pomocí transforms, transform_functiona row_selection.

transform_function

Proměnná transformační funkce.

transform_variables

Znakový vektor vstupních proměnných množiny dat potřebných pro transformační funkci.

transform_packages

NEPODPORUJE SE. Vektor znaku určující další balíčky Pythonu (mimo balíčky zadané v RxOptions.get_option("transform_packages")) k dispozici a předem načtený pro použití v transformačních funkcích proměnných. Například explicitně definované v funkcích revoscalepy prostřednictvím jejich transforms a transform_function argumentů nebo těch, které jsou definovány implicitně prostřednictvím jejich formula nebo row_selection argumentů. Argumentem transform_packages může být také Žádný, což znamená, že nejsou předem načteny žádné balíčky mimo RxOptions.get_option("transform_packages") .

transform_environment

NEPODPORUJE SE. Uživatelem definované prostředí, které bude sloužit jako nadřazené všem prostředím vyvinutým interně a které se používají k transformaci proměnných dat. Pokud transform_environment = Nonese místo toho použije nové prostředí hash s nadřazeným revoscalepy.baseenv.

blocks_per_read

Určuje početblokůch

report_progress

Celočíselná hodnota, která určuje úroveň generování sestav o průběhu zpracování řádků:

  • 0: Nebyl hlášen žádný průběh.

  • 1: Počet zpracovaných řádků se vytiskne a aktualizuje.

  • 2: Jsou hlášeny řádky zpracovávané a časování.

  • 3: Jsou hlášeny řádky zpracovávané a všechna časování.

podrobný

Celočíselná hodnota, která určuje požadovanou velikost výstupu. Pokud 0se během výpočtů nevytiskne žádný podrobný výstup. Celočíselné hodnoty, od 1 které se 4 poskytují rostoucí množství informací.

compute_context

Nastaví kontext, ve kterém se výpočty spouštějí, zadané pomocí platné revoscalepy. RxComputeContext. V současné době místní a revoscalepy. Podporují se výpočetní kontexty RxInSqlServer .

Soubor

Kontrolní parametry pro přemíscení

Returns

Objekt FastLinear s natrénovaným modelem.

Poznámka:

Tento algoritmus je vícevláknový a nepokusí se načíst celou datovou sadu do paměti.

Odkazy

Škálování stochastického duálního souřadnicového vzestupu

Stochastické metody duálního souřadnicového vzestupu pro regularizovanou minimalizaci ztrát

Příklad binární klasifikace

'''
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

Příklad regrese

'''
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

Ztrátové funkce