microsoftml.rx_fast_linear: Modello lineare con ascesa a coordinate duali stocastiche

Usage

microsoftml.rx_fast_linear()

Descrzione

Un istruttore di ottimizzazione per la Stocastic Dual Coordinate Ascent (SDCA) per la classificazione e regressione binaria lineare.

dettagli

rx_fast_linear è un allenatore basato sul metodo Stocastic Dual Coordinate Ascent (SDCA), una tecnica di ottimizzazione all'avanguardia per funzioni obiettivo convesse. L'algoritmo può essere scalato per l'uso su grandi set di dati fuori memoria grazie a un'implementazione semi-assincrona che supporta il multithreading. La convergenza è sottoscritta dall'imposizione periodica della sincronizzazione tra aggiornamenti primal e dual in un thread separato. Sono inoltre disponibili diverse opzioni di funzioni di perdita. Il metodo SDCA combina alcune delle migliori proprietà e capacità degli algoritmi di regressione logistica e SVM. Per maggiori informazioni sulla SDCA, consulta le citazioni nella sezione riferimenti.

Gli algoritmi di ottimizzazione tradizionali, come la discesa del gradiente stocastico (SGD), ottimizzano direttamente la funzione di perdita empirica. La SDCA sceglie un approccio diverso che ottimizza invece il problema duale. La funzione di perdita duale è parametrizzata da pesi per esempio. In ogni iterazione, quando viene letto un esempio di addestramento dal set di dati di addestramento, il corrispondente peso dell'esempio viene regolato in modo che la funzione di perdita doppia sia ottimizzata rispetto all'esempio corrente. Non è necessario alcun tasso di apprendimento per determinare la dimensione del passo come richiesto dai vari metodi di discesa a gradiente.

rx_fast_linear Attualmente supporta la classificazione binaria con tre tipi di funzioni di perdita: perdita logaritmica, perdita da cerniera e perdita da cerniera levigata. La regressione lineare supporta anche la funzione di perdita al quadrato. La regolarizzazione elastica può essere specificata dai l2_weight parametri e.l1_weight Si noti che ha l2_weight un effetto sul tasso di convergenza. In generale, più grande è , l2_weightpiù velocemente converge SDCA.

Si noti che rx_fast_linear è un algoritmo di ottimizzazione stocastica e di streaming. I risultati dipendono dall'ordine dei dati di addestramento. Per risultati riproducibili, si raccomanda di impostare shuffle a False e train_threads a 1.

Arguments

formula

La formula descritta in revoscalepy.rx_formula. Termini di interazione e F() non sono attualmente supportati in microsoftml.

Dati

Oggetto origine dati o stringa di caratteri che specifica un file con estensione xdf o un oggetto frame di dati.

method

Specifica il tipo di modello con una stringa di caratteri: "binary" per la classificazione binaria predefinita o "regression" per la regressione lineare.

loss_function

Specifica la funzione di perdita empirica da ottimizzare. Per la classificazione binaria, sono disponibili le seguenti scelte:

  • log_loss: La perdita di log. Si tratta dell'impostazione predefinita.

  • hinge_loss: La perdita della cerniera SVM. Il suo parametro rappresenta la dimensione del margine.

  • smooth_hinge_loss: La perdita della cerniera levigata. Il suo parametro rappresenta la costante di levigamento.

Per la regressione lineare, attualmente è supportata la perdita squared_loss al quadrato. Quando questo parametro è impostato su Nessuno, il suo valore predefinito dipende dal tipo di apprendimento:

Il seguente esempio cambia il loss_function in hinge_loss: rx_fast_linear(..., loss_function=hinge_loss()).

l1_weight

Specifica il peso di regolarizzazione L1. Il valore deve essere o non negativo o Nessuno. Se None viene specificato, il valore effettivo viene calcolato automaticamente in base al set di dati. Nessuno è il valore predefinito.

l2_weight

Specifica il peso di regolarizzazione L2. Il valore deve essere o non negativo o Nessuno. Se None viene specificato, il valore effettivo viene calcolato automaticamente in base al set di dati. Nessuno è il valore predefinito.

train_threads

Specifica quanti thread concorrenti possono essere utilizzati per eseguire l'algoritmo. Quando questo parametro è impostato su Nessuno, il numero di thread utilizzati viene determinato in base al numero di processori logici disponibili per il processo e alla scarsità dei dati. Impostalo per 1 eseguire l'algoritmo in un singolo thread.

convergence_tolerance

Specifica la soglia di tolleranza utilizzata come criterio di convergenza. Deve essere tra 0 e 1. Il valore predefinito è 0.1. L'algoritmo è considerato convergente se il gap di dualità relativo, che è il rapporto tra il gap di dualità e la perdita primale, è inferiore alla tolleranza di convergenza specificata.

max_iterations

Specifica un limite superiore al numero di iterazioni di addestramento. Questo parametro deve essere positivo o Nullo. Se None viene specificato, il valore effettivo viene calcolato automaticamente in base al set di dati. Ogni iterazione richiede un passaggio completo sui dati di addestramento. L'addestramento termina dopo che il numero totale di iterazioni raggiunge il limite superiore specificato o quando la funzione di perdita converge, a seconda di quale caso accada prima.

mescolare

Specifica se mescolare i dati di addestramento. Impostato True per mescolare i dati; False non per mescolare. Il valore predefinito è True. SDCA è un algoritmo di ottimizzazione stocastica. Se l'alletamento è attivato, i dati di addestramento vengono mescolati in ogni iterazione.

check_frequency

Il numero di iterazioni dopo i quali la funzione di perdita viene calcolata e controllata per determinare se è convergente. Il valore specificato deve essere un intero positivo o Nessuno. Se nessuno, il valore effettivo viene calcolato automaticamente in base al set di dati. Altrimenti, ad esempio, se checkFrequency = 5 è specificato, allora la funzione di perdita viene calcolata e la convergenza viene controllata ogni 5 iterazioni. Il calcolo della funzione di perdita richiede un passaggio completo separato sui dati di addestramento.

normalizzare

Specifica il tipo di normalizzazione automatica utilizzata:

  • "Auto": se è necessaria la normalizzazione, viene eseguita automaticamente. Questa è la scelta predefinita.

  • "No": non viene eseguita alcuna normalizzazione.

  • "Yes": viene eseguita la normalizzazione.

  • "Warn": se è necessaria la normalizzazione, viene visualizzato un messaggio di avviso, ma la normalizzazione non viene eseguita.

La normalizzazione ridimensiona intervalli di dati diversi a una scala standard. La scalabilità delle funzionalità garantisce che le distanze tra i punti dati siano proporzionali e consentano a vari metodi di ottimizzazione, ad esempio la discesa del gradiente, di convergere molto più velocemente. Se viene eseguita la normalizzazione, viene usato un MaxMin normalizzatore. Normalizza i valori in un intervallo [a, b] dove -1 <= a <= 0 e 0 <= b <= 1b - a = 1 . Questo normalizzatore mantiene la spazità eseguendo il mapping di zero a zero.

ml_transforms

Specifica un elenco di trasformazioni MicrosoftML da eseguire sui dati prima del training o Nessuna se non devono essere eseguite trasformazioni. Per le trasformazioni supportate, vedere featurize_text, categoricale categorical_hash. Queste trasformazioni vengono eseguite dopo le trasformazioni Python specificate. Il valore predefinito è None.

ml_transform_vars

Specifica un vettore di caratteri di nomi di ml_transforms da utilizzare in o Nessuno se non è necessario usare nessuno. Il valore predefinito è None.

row_selection

NON SUPPORTATO. Specifica le righe (osservazioni) del set di dati che devono essere usate dal modello con il nome di una variabile logica del set di dati (tra virgolette) o con un'espressione logica usando variabili nel set di dati. Per esempio:

  • row_selection = "old" userà solo osservazioni in cui il valore della variabile old è True.

  • row_selection = (age > 20) & (age < 65) & (log(income) > 10) usa solo osservazioni in cui il valore della age variabile è compreso tra 20 e 65 e il valore della logincome variabile è maggiore di 10.

La selezione delle righe viene eseguita dopo l'elaborazione di tutte le trasformazioni dei dati (vedere gli transforms argomenti o transform_function). Come per tutte le espressioni, row_selection può essere definito all'esterno della chiamata di funzione usando la expression funzione .

Trasforma

NON SUPPORTATO. Espressione del form che rappresenta il primo round delle trasformazioni delle variabili. Come per tutte le espressioni, transforms (o row_selection) può essere definito all'esterno della chiamata di funzione usando la expression funzione .

transform_objects

NON SUPPORTATO. Elenco denominato che contiene oggetti a cui è possibile fare riferimento da transforms, transform_functione row_selection.

transform_function

Funzione di trasformazione della variabile.

transform_variables

Vettore di caratteri delle variabili del set di dati di input necessario per la funzione di trasformazione.

transform_packages

NON SUPPORTATO. Vettore di caratteri che specifica pacchetti Python aggiuntivi (al di fuori di quelli specificati in RxOptions.get_option("transform_packages")) da rendere disponibili e precaricati per l'uso nelle funzioni di trasformazione delle variabili. Ad esempio, quelli definiti in modo esplicito nelle funzioni revoscalepy tramite i relativi transforms argomenti e transform_function o quelli definiti in modo implicito tramite i rispettivi formula argomenti o row_selection . L'argomento transform_packages può anche essere Nessuno, a indicare che non vengono precaricati pacchetti esterni RxOptions.get_option("transform_packages") .

transform_environment

NON SUPPORTATO. Ambiente definito dall'utente da usare come padre per tutti gli ambienti sviluppati internamente e usati per la trasformazione dei dati delle variabili. Se transform_environment = None, viene invece usato un nuovo ambiente "hash" con revoscalepy.baseenv padre.

blocks_per_read

Specifica il numero di blocchi da leggere per ogni blocco di dati letto dall'origine dati.

report_progress

Valore intero che specifica il livello di creazione di report sullo stato di elaborazione delle righe:

  • 0: non viene segnalato alcun avanzamento.

  • 1: il numero di righe elaborate viene stampato e aggiornato.

  • 2: vengono segnalate le righe elaborate e le tempistiche.

  • 3: vengono segnalate le righe elaborate e tutte le tempistiche.

verbose

Valore intero che specifica la quantità di output desiderata. Se 0, non viene stampato alcun output dettagliato durante i calcoli. Valori interi da 1 per 4 fornire quantità crescenti di informazioni.

compute_context

Imposta il contesto in cui vengono eseguiti i calcoli, specificati con una revoscalepy valida. RxComputeContext. Attualmente locale e revoscalepy. Sono supportati i contesti di calcolo RxInSqlServer.

Ensemble

Parametri di controllo per l'incenso.

Returns

Oggetto FastLinear con il modello sottoposto a training.

Note

Questo algoritmo è multithread e non tenterà di caricare l'intero dataset in memoria.

References

Scalare l'ascesa stocastica a doppia coordinata

Metodi stocastici di ascesa a doppia coordinata per la minimizzazione regolarizzata della perdita

Esempio di classificazione binaria

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

Esempio di regressione

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

Funzioni di perdita