microsoftml.rx_fast_linear: Lineares Modell mit stochastischem dualen Koordinatenaufstieg

Usage

microsoftml.rx_fast_linear()

Description

Ein Optimierungstrainer für stochastische duale Koordinatenaufstiege (SDCA) für lineare binäre Klassifikation und Regression.

Details

rx_fast_linear ist ein Trainer, der auf der Stochastic Dual Coordinate Ascent (SDCA)-Methode basiert, einer hochmodernen Optimierungstechnik für konvexe Zielfunktionen. Der Algorithmus kann aufgrund einer halbasynchronisierten Implementierung, die Multi-Threading unterstützt, für große Datensätze ohne Speicher skaliert werden. Die Konvergenz wird durch periodische Synchronisation zwischen primalen und dualen Updates in einem separaten Thread durchgesetzt. Es werden auch verschiedene Verlustfunktionen angeboten. Die SDCA-Methode vereint mehrere der besten Eigenschaften und Fähigkeiten von logistischen Regressions- und SVM-Algorithmen. Weitere Informationen zu SDCA finden Sie in den Zitaten im Referenzbereich.

Traditionelle Optimierungsalgorithmen, wie der stochastische Gradientenabstieg (SGD), optimieren die empirische Verlustfunktion direkt. Die SDCA wählt stattdessen einen anderen Ansatz, der das duale Problem optimiert. Die duale Verlustfunktion wird durch Gewichte pro Beispiel parametrisiert. In jeder Iteration wird beim Lesen eines Trainingsbeispiels aus dem Trainingsdatensatz das entsprechende Beispielgewicht so angepasst, dass die duale Verlustfunktion im Vergleich zum aktuellen Beispiel optimiert wird. SDCA benötigt keine Lernrate, um die Schrittlänge zu bestimmen, wie es bei verschiedenen Gradientenabstiegsmethoden erforderlich ist.

rx_fast_linear unterstützt derzeit binäre Klassifikation mit drei Arten von Verlustfunktionen: Logstockverlust, Scharnierverlust und geglätteter Scharnierverlust. Die lineare Regression unterstützt auch eine quadratische Verlustfunktion. Die elastische Netzregularisierung kann durch die l2_weight und-Parameter l1_weight spezifiziert werden. Beachte, dass die l2_weight einen Einfluss auf die Konvergenzrate hat. Im Allgemeinen gilt: Je größer die l2_weight, desto schneller konvergiert SDCA.

Beachten Sie, dass rx_fast_linear es sich um einen stochastischen und Streaming-Optimierungsalgorithmus handelt. Die Ergebnisse hängen von der Reihenfolge der Trainingsdaten ab. Für reproduzierbare Ergebnisse wird empfohlen, auf False und train_threads auf zu 1setzenshuffle.

Argumente

Formel

Die in revoscalepy.rx_formula beschriebene Formel. Interaktionsausdrücke und F() werden derzeit in Microsoftml nicht unterstützt.

data

Ein Datenquellenobjekt oder eine Zeichenfolge, die eine XDF-Datei oder ein Datenframeobjekt angibt.

method

Spezifiziert den Modelltyp mit einer Zeichenkette: "binary" für die Standardbinärklassifikation oder "regression" für lineare Regression.

loss_function

Spezifiziert die empirische Verlustfunktion zu optimieren. Für die binäre Klassifikation stehen folgende Optionen zur Verfügung:

  • log_loss: Der Log-Verlust. Dies ist die Standardoption.

  • hinge_loss: Der SVM-Scharnierverlust. Sein Parameter stellt die Margengröße dar.

  • smooth_hinge_loss: Der geglättete Scharnierverlust. Ihr Parameter stellt die Glättungskonstante dar.

Für die lineare Regression wird derzeit der quadratische Verlust squared_loss unterstützt. Wenn dieser Parameter auf Null gesetzt ist, hängt sein Standardwert von der Art des Lernens ab:

Das folgende Beispiel ändert die loss_function zu hinge_loss: rx_fast_linear(..., loss_function=hinge_loss()).

l1_weight

Spezifiziert das L1-Regularisierungsgewicht. Der Wert muss entweder nicht-negativ oder Null sein. Wenn None angegeben ist, wird der tatsächliche Wert automatisch basierend auf dem Datensatz berechnet. Keiner ist der Standardwert.

l2_weight

Spezifiziert das L2-Regularisierungsgewicht. Der Wert muss entweder nicht-negativ oder Null sein. Wenn None angegeben ist, wird der tatsächliche Wert automatisch basierend auf dem Datensatz berechnet. Keiner ist der Standardwert.

train_threads

Spezifiziert, wie viele gleichzeitige Threads verwendet werden können, um den Algorithmus auszuführen. Wenn dieser Parameter auf Null gesetzt ist, wird die Anzahl der verwendeten Threads basierend auf der Anzahl der dem Prozess verfügbaren logischen Prozessoren sowie der Datensparsamkeit bestimmt. Stelle es so ein, dass 1 der Algorithmus in einem einzelnen Thread ausgeführt wird.

convergence_tolerance

Spezifiziert die als Konvergenzkriterium verwendete Toleranzschwelle. Es muss zwischen 0 und 1 liegen. Der Standardwert ist 0.1. Der Algorithmus gilt als konvergiert, wenn die relative Dualitätslücke, die das Verhältnis zwischen der Dualitätslücke und dem Primalverlust ist, unter der angegebenen Konvergenztoleranz liegt.

max_iterations

Spezifiziert eine obere Grenze für die Anzahl der Trainingiterationen. Dieser Parameter muss positiv oder Keine sein. Wenn None angegeben ist, wird der tatsächliche Wert automatisch basierend auf dem Datensatz berechnet. Jede Iteration erfordert einen vollständigen Durchgang der Trainingsdaten. Das Training endet, wenn die Gesamtzahl der Iterationen die festgelegte obere Schranke erreicht hat oder wenn die Verlustfunktion konvergiert, je nachdem, was früher eintritt.

umsortieren

Spezifiziert, ob die Trainingsdaten gemischt werden sollen. Eingestellt True , um die Daten zu mischen; False nicht auf Mälzen. Der Standardwert ist True. SDCA ist ein stochastischer Optimierungsalgorithmus. Wenn das Mischen aktiviert ist, werden die Trainingsdaten bei jeder Iteration gemischt.

check_frequency

Die Anzahl der Iterationen, nach denen die Verlustfunktion berechnet und überprüft wird, um festzustellen, ob sie konvergiert ist. Der angegebene Wert muss eine positive ganze Zahl oder Keine sein. Wenn keine, wird der tatsächliche Wert automatisch basierend auf dem Datensatz berechnet. Andernfalls, wenn checkFrequency = 5 spezifiziert ist, wird die Verlustfunktion berechnet und die Konvergenz alle 5 Iterationen überprüft. Die Berechnung der Verlustfunktion erfordert einen separaten vollständigen Durchlauf der Trainingsdaten.

Normalisieren

Gibt den Typ der verwendeten automatischen Normalisierung an:

  • "Auto": Wenn die Normalisierung erforderlich ist, wird sie automatisch ausgeführt. Dies ist die Standardauswahl.

  • "No": Es wird keine Normalisierung durchgeführt.

  • "Yes": Normalisierung wird durchgeführt.

  • "Warn": Wenn die Normalisierung erforderlich ist, wird eine Warnmeldung angezeigt, die Normalisierung wird jedoch nicht ausgeführt.

Durch die Normalisierung werden unterschiedliche Datenbereiche auf eine Standardskala skaliert. Die Featureskalierung stellt die Abstände zwischen Datenpunkten proportional dar und ermöglicht verschiedene Optimierungsmethoden wie Farbverlaufsabstieg viel schneller zu konvergen. Wenn die Normalisierung durchgeführt wird, wird ein MaxMin Normalisierer verwendet. Sie normalisiert Werte in einem Intervall [a, b] wobei -1 <= a <= 0 und 0 <= b <= 1 .b - a = 1 Dieser Normalisierer behält Sparsamkeit bei, indem null zu Null zugeordnet wird.

ml_transforms

Gibt eine Liste der MicrosoftML-Transformationen an, die vor dem Training oder none für die Daten ausgeführt werden sollen, wenn keine Transformationen ausgeführt werden sollen. Siehe featurize_text, categoricalund categorical_hash, für Transformationen, die unterstützt werden. Diese Transformationen werden nach allen angegebenen Python-Transformationen ausgeführt. Der Standardwert ist Keiner.

ml_transform_vars

Gibt einen Zeichenvektor von Variablennamen an, die verwendet ml_transforms werden sollen, oder "None ", wenn keine verwendet werden soll. Der Standardwert ist Keiner.

row_selection

NICHT UNTERSTÜTZT. Gibt die Zeilen (Beobachtungen) aus dem Dataset an, die vom Modell mit dem Namen einer logischen Variablen aus dem Dataset (in Anführungszeichen) oder mit einem logischen Ausdruck mithilfe von Variablen im Dataset verwendet werden sollen. Beispiel:

  • row_selection = "old" verwendet nur Beobachtungen, in denen der Wert der Variablen old lautet True.

  • row_selection = (age > 20) & (age < 65) & (log(income) > 10) verwendet nur Beobachtungen, in denen der Wert der age Variablen zwischen 20 und 65 liegt und der Wert der logincome Variablen größer als 10 ist.

Die Zeilenauswahl erfolgt nach der Verarbeitung von Datentransformationen (siehe die Argumente transforms oder transform_function). Wie bei allen Ausdrücken kann außerhalb des Funktionsaufrufs row_selection mithilfe der expression Funktion definiert werden.

Verwandelt

NICHT UNTERSTÜTZT. Ein Ausdruck des Formulars, das die erste Runde von Variablentransformationen darstellt. Wie bei allen Ausdrücken kann (oder transforms) außerhalb des Funktionsaufrufs row_selection mithilfe der expression Funktion definiert werden.

transform_objects

NICHT UNTERSTÜTZT. Eine benannte Liste, die Objekte enthält, auf die von transforms, und transform_function.row_selection

transform_function

Die Variable Transformationsfunktion.

transform_variables

Ein Zeichenvektor von Eingabedatensatzvariablen, die für die Transformationsfunktion erforderlich sind.

transform_packages

NICHT UNTERSTÜTZT. Ein Zeichenvektor, der zusätzliche Python-Pakete angibt (außerhalb der in ) RxOptions.get_option("transform_packages")zur Verfügung gestellt und für die Verwendung in Variablentransformationsfunktionen vorab geladen werden soll. Beispielsweise werden diejenigen, die explizit in Revoscalepy-Funktionen über ihre transforms und transform_function Argumente oder implizit über ihre formula Argumente row_selection definiert wurden, definiert. Das transform_packages Argument kann auch "None" sein, das angibt, dass keine Pakete vorgeladen RxOptions.get_option("transform_packages") werden.

transform_environment

NICHT UNTERSTÜTZT. Eine benutzerdefinierte Umgebung, die als übergeordnetes Element für alle Umgebungen dient, die intern entwickelt und für die Variable Datentransformation verwendet werden. Wenn transform_environment = Nonestattdessen eine neue "Hash"-Umgebung mit übergeordnetem revoscalepy.baseenv verwendet wird.

blocks_per_read

Gibt die Anzahl der zu lesenden Blöcke für jeden Datenabschnitt an, der aus der Datenquelle gelesen werden soll.

report_progress

Ein ganzzahliger Wert, der die Berichtsebene für den Fortschritt der Zeilenverarbeitung angibt:

  • 0: Es wird kein Fortschritt gemeldet.

  • 1: Die Anzahl der verarbeiteten Zeilen wird gedruckt und aktualisiert.

  • 2: Verarbeitete Zeilen und Anzeigedauern werden gemeldet.

  • 3: Verarbeitete Zeilen und alle Anzeigedauern werden gemeldet.

verbose

Ein ganzzahliger Wert, der die gewünschte Ausgabemenge angibt. Wird 0bei Berechnungen keine ausführliche Ausgabe gedruckt. Ganzzahlige Werte von 1 bis hin zu 4 steigenden Informationsmengen.

compute_context

Legt den Kontext fest, in dem Berechnungen ausgeführt werden, die mit einem gültigen Revoscalepy angegeben werden. RxComputeContext. Derzeit lokal und revoscalepy. RxInSqlServer-Computekontexte werden unterstützt.

Ensemble

Steuerungsparameter für die Ensembling.

Rückgaben

Ein FastLinear Objekt mit dem trainierten Modell.

Note

Dieser Algorithmus ist multithreaded und versucht nicht, den gesamten Datensatz in den Speicher zu laden.

Verweise

Skalierung des stochastischen, dualen Koordinatenaufstiegs

Stochastische Dualkoordinaten-Aufstiegsmethoden zur regularisierten Verlustminimierung

Beispiel für binäre Klassifizierung

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

Ausgabe:

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

Regressionsbeispiel

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

Ausgabe:

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

Verlustfunktionen