microsoftml.rx_fast_linear: lineares Modell mit stochastischem doppelten Koordinatenanstieg
Verwendung
microsoftml.rx_fast_linear()
BESCHREIBUNG
Ein Trainingsmodul zur Optimierung des stochastischen doppelten Koordinatenanstiegs für lineare binäre Klassifizierung und Regression.
Details
rx_fast_linear
ist ein Trainingsprogramm, das auf der SDCA-Methode (Stochastic Dual Coordinate Ascent, stochastischer doppelter Koordinatenanstieg) basiert, einer modernen Optimierungstechnik für konvexe Zielfunktionen. Der Algorithmus kann dank einer semi-asynchronisierten Implementierung mit Unterstützung von Multithreading für den Einsatz mit großen Datasets mit Arbeitsspeicherproblemen skaliert werden.
Konvergenz wird durch regelmäßige Erzwingung der Synchronisierung zwischen primären und dualen Aktualisierungen in einem separaten Thread gewährleistet. Es gibt auch mehrere Optionen für Verlustfunktionen. Die SDCA-Methode kombiniert mehrere der besten Eigenschaften und Fähigkeiten von logistischer Regression und SVM-Algorithmen.
Weitere Informationen zur SDCA finden Sie über die Links im Abschnitt „Referenzen“.
Herkömmliche Optimierungsalgorithmen wie SGD (stochastischer Gradientenabstieg) optimieren die empirische Verlustfunktion direkt. Der SDCA wählt einen anderen Ansatz, der stattdessen das duale Problem optimiert. Die duale Verlustfunktion wird mittels beispielbezogener Gewichtungen parametrisiert. Wenn bei jeder Iteration ein Trainingsbeispiel aus dem Trainingsdataset gelesen wird, wird die entsprechende Gewichtung des Beispiels so angepasst, dass die duale Verlustfunktion in Bezug auf das aktuelle Beispiel optimiert wird. SDCA benötigt keine Lernrate, um die Schrittgröße zu bestimmen, wie dies bei verschiedenen Gradientenabstiegsmethoden erforderlich ist.
rx_fast_linear
unterstützt die binäre Klassifizierung mit derzeit drei Arten von Verlustfunktionen: Protokollverlust, Scharnierverlust und geglätteter Scharnierverlust.
Die lineare Regression unterstützt auch die quadratische Verlustfunktion. Die elastische Netzregularisierung kann durch die Parameter l2_weight
und l1_weight
festgelegt werden. Beachten Sie, dass l2_weight
sich auf die Konvergenzrate auswirkt. Im Allgemeinen gilt: je größer l2_weight
ist, desto schneller konvergiert SDCA.
Beachten Sie, dass rx_fast_linear
ein stochastischer und Streamingoptimierungsalgorithmus ist. Die Ergebnisse hängen von der Reihenfolge der Trainingsdaten ab. Um reproduzierbare Ergebnisse zu erzielen, empfiehlt es sich, shuffle
auf False
und train_threads
auf 1
festzulegen.
Argumente
Formel
Die Formel, wie in „revoscalepy.rx_formula“ beschrieben.
Interaktionsterme und F()
werden derzeit in microsoftml nicht unterstützt.
data
Ein Datenquellenobjekt oder eine Zeichenfolge, die eine .xdf-Datei oder ein Datenrahmenobjekt angibt.
Methode
Gibt den Modelltyp mit einer Zeichenfolge an: "binary"
für standardmäßige binäre Klassifizierung oder "regression"
für lineare Regression.
loss_function
Gibt die zu optimierende empirische Verlustfunktion an. Für binäre Klassifizierung sind die folgenden Optionen verfügbar:
log_loss
: der Protokollverlust. Dies ist die Standardeinstellung.hinge_loss
: der SVM-Scharnierverlust. Dessen Parameter stellt die Randgröße dar.smooth_hinge_loss
: der geglättete Scharnierverlust. Dessen Parameter stellt die Glättungskonstante dar.
Für lineare Regression wird derzeit der quadratische Verlust squared_loss
unterstützt. Wenn dieser Parameter auf None festgelegt ist, hängt sein Standardwert vom Lerntyp ab:
log_loss
zur binären Klassifizierung.squared_loss
für lineare Regression.
Im folgenden Beispiel wird loss_function in hinge_loss
geändert: rx_fast_linear(..., loss_function=hinge_loss())
.
l1_weight
Gibt die L1-Regularisierungsgewichtung an. Der Wert muss eine nicht negative ganze Zahl oder None sein. Falls None angegeben ist, wird der tatsächliche Wert automatisch basierend auf dem Dataset berechnet. None ist der Standardwert.
l2_weight
Gibt die L2-Regularisierungsgewichtung an. Der Wert muss eine nicht negative ganze Zahl oder None sein. Falls None angegeben ist, wird der tatsächliche Wert automatisch basierend auf dem Dataset berechnet. None ist der Standardwert.
train_threads
Gibt an, wie viele gleichzeitige Threads zum Ausführen des Algorithmus verwendet werden können. Wenn dieser Parameter auf None festgelegt ist, wird die Anzahl der verwendeten Threads basierend auf der Anzahl der für den Prozess verfügbaren logischen Prozessoren sowie der geringen Datendichte bestimmt. Legen Sie ihn auf 1
fest, um den Algorithmus in einem einzelnen Thread auszuführen.
convergence_tolerance
Gibt den Toleranzschwellenwert an, der als Konvergenzkriterium verwendet wird. Der Wert muss im Bereich 0 bis 1 liegen. Der Standardwert ist 0.1
. Der Algorithmus gilt als konvergiert, wenn die relative Dualitätslücke, d. h. das Verhältnis zwischen Dualitätslücke und Primärverlust, unter die angegebene Konvergenztoleranz fällt.
max_iterations
Gibt eine Obergrenze für die Anzahl der Trainingsiterationen an. Dieser Parameter muss ein positiver Wert oder None sein. Falls None angegeben ist, wird der tatsächliche Wert automatisch basierend auf dem Dataset berechnet. Jede Iteration erfordert einen vollständigen Durchlauf durch die Trainingsdaten. Das Training endet, wenn die Gesamtanzahl der Iterationen die angegebene Obergrenze erreicht oder die Verlustfunktion konvergiert, je nachdem, was früher eintritt.
Shuffle
Gibt an, ob die Trainingsdaten gemischt werden sollen. Legen Sie True
fest, um die Daten zu mischen, oder False
, um sie nicht zu mischen. Der Standardwert ist True
. SDCA ist ein stochastischer Optimierungsalgorithmus. Wenn 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, ob sie konvergiert. Der angegebene Wert muss eine positive ganze Zahl oder None sein. Falls None, wird der tatsächliche Wert automatisch basierend auf dem Dataset berechnet. Andernfalls, z. B. bei Angabe von checkFrequency = 5
, wird die Verlustfunktion berechnet, und Konvergenz wird alle 5 Iterationen überprüft. Die Berechnung der Verlustfunktion erfordert einen separaten vollständigen Durchlauf durch die Trainingsdaten.
normalize
Gibt den Typ der verwendeten automatischen Normalisierung an:
"Auto"
: Wenn eine Normalisierung erforderlich ist, erfolgt sie automatisch. Dies ist die Standardoption."No"
: Es erfolgt keine Normalisierung."Yes"
: Es erfolgt eine Normalisierung."Warn"
: Wenn eine Normalisierung erforderlich ist, wird eine Warnmeldung angezeigt, ohne dass die Normalisierung erfolgt.
Bei der Normalisierung werden unterschiedliche Datenbereiche anhand einer Standardskala neu skaliert. Die Featureskalierung stellt sicher, dass die Abstände zwischen den Datenpunkten proportional sind und ermöglicht verschiedene Optimierungsmethoden wie den Gradientenabstieg, um wesentlich schneller zu konvergieren. Wenn eine Normalisierung erfolgt, wird die Normalisierungsfunktion MaxMin
verwendet. Sie normalisiert Werte im Intervall [a, b], wobei gilt: -1 <= a <= 0
und 0 <= b <= 1
und b - a = 1
. Diese Normalisierungsfunktion behält geringe Datendichte bei, indem 0 zu 0 zugeordnet wird.
ml_transforms
Gibt eine Liste von MicrosoftML-Transformationen an, die vor dem Training für die Daten erfolgen sollen, oder None, wenn keine Transformationen erfolgen sollen. Unter featurize_text
, categorical
und categorical_hash
finden Sie unterstützte Transformationen.
Diese Transformationen werden nach allen angegebenen Python-Transformationen ausgeführt.
Der Standardwert ist None.
ml_transform_vars
Gibt einen Zeichenvektor von Variablennamen an, die in ml_transforms
verwendet werden sollen, oder None, wenn keine verwendet werden sollen.
Der Standardwert ist None.
row_selection
Nicht unterstützt. Gibt die Zeilen (Beobachtungen) aus dem Dataset an, die vom Modell verwendet werden sollen, mit dem Namen einer logischen Variablen aus dem Dataset (in Anführungszeichen) oder mit einem logischen Ausdruck unter Verwendung von Variablen im Dataset. Beispiel:
row_selection = "old"
verwendet nur Beobachtungen, bei denenTrue
der Wert der Variablenold
ist.row_selection = (age > 20) & (age < 65) & (log(income) > 10)
verwendet nur Beobachtungen, bei denen der Wert der Variablenage
zwischen 20 und 65 liegt und der Wert vonlog
der Variablenincome
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 row_selection
außerhalb des Funktionsaufrufs mit der Funktion expression
definiert werden.
Transformationen
Nicht unterstützt. Ein Ausdruck der Form, die die erste Runde der Variablentransformationen darstellt. Wie bei allen Ausdrücken kann transforms
(oder row_selection
) außerhalb des Funktionsaufrufs mit der Funktion expression
definiert werden.
transform_objects
Nicht unterstützt. Eine benannte Liste, die Objekte enthält, auf die mit transforms
, transform_function
und row_selection
verwiesen werden kann.
transform_function
Die Variablentransformationsfunktionen.
transform_variables
Ein Zeichenvektor von Eingabedatasetvariablen, die für die Transformationsfunktion erforderlich sind.
transform_packages
Nicht unterstützt. Ein Zeichenvektor, der zusätzliche Python-Pakete (außerhalb der in RxOptions.get_option("transform_packages")
angegebenen) angibt, die für die Verwendung in Variablentransformationsfunktionen verfügbar gemacht und im Voraus geladen werden sollen.
Zum Beispiel solche, die explizit in revoscalepy-Funktionen über ihre Argumente transforms
und transform_function
definiert sind oder solche, die implizit über ihre Argumente formula
oder row_selection
definiert sind. Das Argument transform_packages
kann auch None lauten, was angibt, dass keine Pakete außerhalb von RxOptions.get_option("transform_packages")
im Voraus geladen werden.
transform_environment
Nicht unterstützt. Eine benutzerdefinierte Umgebung, die als übergeordnete Umgebung für alle intern entwickelten Umgebungen dient und für die Transformation von Variablendaten verwendet wird.
Falls transform_environment = None
, wird stattdessen eine neue „hash“-Umgebung mit der übergeordneten „revoscalepy.baseenv“ verwendet.
blocks_per_read
Gibt die Anzahl der Blöcke an, die für jeden Datenblock gelesen werden, der aus der Datenquelle gelesen wird.
report_progress
Ein ganzzahliger Wert, der die Berichtsebene für den Status der Zeilenverarbeitung angibt:
0
: Es wird kein Status gemeldet.1
: Die Anzahl der verarbeiteten Zeilen wird ausgegeben und aktualisiert.2
: Verarbeitete Zeilen und Zeitsteuerungen werden gemeldet.3
: Verarbeitete Zeilen und alle Zeitsteuerungen werden gemeldet.
Ausführlich
Ein ganzzahliger Wert, der die gewünschte Ausgabemenge angibt.
Falls 0
, erfolgt während der Berechnungen keine ausführliche Ausgabe. Ganzzahlige Werte von 1
bis 4
liefern zunehmend mehr Informationen.
compute_context
Legt den Kontext fest, in dem Berechnungen erfolgen, angegeben mit einer gültigen Angabe für revoscalepy.RxComputeContext. Derzeit werden lokale und revoscalepy.RxInSqlServer-Computekontexte unterstützt.
ensemble
Steuerungsparameter für die Bildung von Ensembles.
Gibt zurück
Ein FastLinear
-Objekt mit dem trainierten Modell.
Hinweis
Dieser Algorithmus ist ein Multithread-Algorithmus, der nicht versucht, das gesamte Dataset in den Arbeitsspeicher zu laden.
Siehe auch
hinge_loss
, log_loss
, smoothed_hinge_loss
, squared_loss
, rx_predict
Referenzen
Hochskalieren des stochastischen doppelten Koordinatenanstiegs
Stochastische doppelte Koordinatenanstiegsmethoden zur Minimierung regularisierter Verluste
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