rxFastLinear: Schnelles lineares Modell mit stochastischem doppelten Koordinatenanstieg
Ein Trainingsmodul zur Optimierung des stochastischen doppelten Koordinatenanstiegs für lineare binäre Klassifizierung und Regression.
rxFastLinear
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.
Primäre und duale Aktualisierungen in einem separaten Thread. 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.
rxFastLinear
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 l2Weight
und l1Weight
festgelegt werden. Beachten Sie, dass l2Weight
sich auf die Konvergenzrate auswirkt. Im Allgemeinen gilt: je größer l2Weight
ist, desto schneller konvergiert SDCA.
Beachten Sie, dass rxFastLinear
ein stochastischer und Streamingoptimierungsalgorithmus ist. Das Ergebnis hängt von der Reihenfolge der Trainingsdaten ab. Um reproduzierbare Ergebnisse zu erzielen, empfiehlt es sich, shuffle
auf FALSE
und trainThreads
auf 1
festzulegen.
Verwendung
rxFastLinear(formula = NULL, data, type = c("binary", "regression"),
lossFunction = NULL, l2Weight = NULL, l1Weight = NULL,
trainThreads = NULL, convergenceTolerance = 0.1, maxIterations = NULL,
shuffle = TRUE, checkFrequency = NULL, normalize = "auto",
mlTransforms = NULL, mlTransformVars = NULL, rowSelection = NULL,
transforms = NULL, transformObjects = NULL, transformFunc = NULL,
transformVars = NULL, transformPackages = NULL, transformEnvir = NULL,
blocksPerRead = rxGetOption("blocksPerRead"),
reportProgress = rxGetOption("reportProgress"), verbose = 1,
computeContext = rxGetOption("computeContext"),
ensemble = ensembleControl(), ...)
Argumente
formula
Die in rxFormula beschriebene Formel. Interaktionsterme und F()
werden derzeit in MicrosoftMl nicht unterstützt.
data
Ein Datenquellenobjekt oder eine Zeichenfolge, die eine .xdf-Datei oder ein Datenrahmenobjekt angibt.
type
Gibt den Modelltyp mit einer Zeichenfolge an: "binary"
für standardmäßige binäre Klassifizierung oder "regression"
für lineare Regression.
lossFunction
Gibt die zu optimierende empirische Verlustfunktion an. Für binäre Klassifizierung sind die folgenden Optionen verfügbar:
- logLoss: der Protokollverlust. Dies ist die Standardoption.
- hingeLoss: der SVM-Scharnierverlust. Dessen Parameter stellt die Randgröße dar.
- smoothHingeLoss: geglätteter Scharnierverlust. Dessen Parameter stellt die Glättungskonstante dar.
Für lineare Regression wird derzeit der quadratische Verlust squaredLoss unterstützt. Wenn dieser Parameter aufNULL
festgelegt ist, hängt sein Standardwert vom Lerntyp ab: - logLoss für binäre Klassifizierung.
- squaredLoss für lineare Regression.
l2Weight
Gibt die L2-Regularisierungsgewichtung an. Der Wert muss eine nicht negative ganze Zahl oder NULL
sein. Falls NULL
angegeben ist, wird der tatsächliche Wert automatisch basierend auf dem Dataset berechnet. Der Standardwert lautet NULL
.
l1Weight
Gibt die L1-Regularisierungsgewichtung an. Der Wert muss eine nicht negative ganze Zahl oder NULL
sein. Falls NULL
angegeben ist, wird der tatsächliche Wert automatisch basierend auf dem Dataset berechnet. Der Standardwert lautet NULL
.
trainThreads
Gibt an, wie viele gleichzeitige Threads zum Ausführen des Algorithmus verwendet werden können. Wenn dieser Parameter auf NULL
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.
convergenceTolerance
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.
maxIterations
Gibt eine Obergrenze für die Anzahl der Trainingsiterationen an. Dieser Parameter muss ein positiver Wert oder NULL
sein. Falls NULL
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.
checkFrequency
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 NULL
sein. Falls NULL
, 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 der Standardwert."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 NormalisierungsfunktionMaxMin
verwendet. Sie normalisiert Werte im Intervall [a, b], wobei gilt:-1 <= a <= 0
und0 <= b <= 1
undb - a = 1
. Diese Normalisierungsfunktion behält geringe Datendichte bei, indem 0 zu 0 zugeordnet wird.
mlTransforms
Gibt eine Liste von MicrosoftML-Transformationen an, die vor dem Training für die Daten erfolgen sollen, oder NULL
, wenn keine Transformationen erfolgen sollen. Für unterstützte Transformationen siehe featurizeText, categorical und categoricalHash. Diese Transformationen werden nach allen angegebenen R-Transformationen ausgeführt. Der Standardwert ist NULL
.
mlTransformVars
Gibt einen Zeichenvektor von Variablennamen an, die in mlTransforms
verwendet werden sollen, oder NULL
, wenn keine verwendet werden sollen. Standardwert: NULL
.
rowSelection
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. rowSelection = "old"
verwendet z. B. nur Beobachtungen, bei denen TRUE
der Wert der Variablen old
ist. rowSelection = (age > 20) & (age < 65) & (log(income) > 10)
verwendet nur Beobachtungen, bei denen der Wert der Variablen age
zwischen 20 und 65 liegt und der Wert von log
der Variablen income
größer als 10 ist. Die Zeilenauswahl erfolgt nach der Verarbeitung von Datentransformationen (siehe die Argumente transforms
oder transformFunc
). Wie bei allen Ausdrücken kann rowSelection
außerhalb des Funktionsaufrufs mit der expression-Funktion definiert werden.
transforms
Ein Ausdruck der Form list(name = expression, ``...)
, der die erste Runde der Variablentransformationen darstellt. Wie bei allen Ausdrücken kann transforms
(oder rowSelection
) außerhalb des Funktionsaufrufs mit der expression-Funktion definiert werden.
transformObjects
Eine benannte Liste, die Objekte enthält, auf die mit transforms
, transformsFunc
und rowSelection
verwiesen werden kann.
transformFunc
Die Variablentransformationsfunktionen. Weitere Informationen finden Sie unter „rxTransform“.
transformVars
Ein Zeichenvektor von Eingabedatasetvariablen, die für die Transformationsfunktion erforderlich sind. Weitere Informationen finden Sie unter „rxTransform“.
transformPackages
Ein Zeichenvektor, der zusätzliche R-Pakete (außerhalb der in rxGetOption("transformPackages")
angegebenen) angibt, die für die Verwendung in Variablentransformationsfunktionen verfügbar gemacht und im Voraus geladen werden sollen. Zum Beispiel solche, die explizit in RevoScaleR-Funktionen über ihre Argumente transforms
und transformFunc
definiert sind oder solche, die implizit über ihre Argumente formula
oder rowSelection
definiert sind. Das Argument transformPackages
kann auch NULL
lauten, was angibt, dass keine Pakete außerhalb von rxGetOption("transformPackages")
im Voraus geladen werden.
transformEnvir
Eine benutzerdefinierte Umgebung, die als übergeordnete Umgebung für alle intern entwickelten Umgebungen dient und für die Transformation von Variablendaten verwendet wird. Falls transformEnvir = NULL
, wird stattdessen eine neue „hash“-Umgebung mit der übergeordneten baseenv()
verwendet.
blocksPerRead
Gibt die Anzahl der Blöcke an, die für jeden Datenblock gelesen werden, der aus der Datenquelle gelesen wird.
reportProgress
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.
verbose
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.
computeContext
Legt den Kontext fest, in dem Berechnungen erfolgen, angegeben mit einer gültigen Angabe für RxComputeContext. Derzeit werden lokale und RxInSqlServer-Computekontexte unterstützt.
ensemble
Steuerungsparameter für die Bildung von Ensembles.
...
Zusätzliche Argumente, die direkt an die Microsoft-Compute-Engine übergeben werden sollen.
Wert
rxFastLinear
: Ein rxFastLinear
-Objekt mit dem trainierten Modell.
FastLinear
: Ein Learnerspezifikationsobjekt der Klasse maml
für den Fast Linear-Trainer.
Notizen
Dieser Algorithmus ist ein Multithread-Algorithmus, der nicht versucht, das gesamte Dataset in den Arbeitsspeicher zu laden.
Autor(en)
Microsoft Corporation Microsoft Technical Support
References
Scaling Up Stochastic Dual Coordinate Ascent
Stochastic Dual Coordinate Ascent Methods for Regularized Loss Minimization
Weitere Informationen
logLoss, hingeLoss, smoothHingeLoss, squaredLoss, rxFastTrees, rxFastForest, rxLogisticRegression, rxNeuralNet, rxOneClassSvm, featurizeText, categorical, categoricalHash, rxPredict.mlModel.
Beispiele
# Train a binary classiication model with rxFastLinear
res1 <- rxFastLinear(isCase ~ age + parity + education + spontaneous + induced,
transforms = list(isCase = case == 1),
data = infert,
type = "binary")
# Print a summary of the model
summary(res1)
# Score to a data frame
scoreDF <- rxPredict(res1, data = infert,
extraVarsToWrite = "isCase")
# Compute and plot the Radio Operator Curve and AUC
roc1 <- rxRoc(actualVarName = "isCase", predVarNames = "Probability", data = scoreDF)
plot(roc1)
rxAuc(roc1)
#########################################################################
# rxFastLinear Regression
# Create an xdf file with the attitude data
myXdf <- tempfile(pattern = "tempAttitude", fileext = ".xdf")
rxDataStep(attitude, myXdf, rowsPerRead = 50, overwrite = TRUE)
myXdfDS <- RxXdfData(file = myXdf)
attitudeForm <- rating ~ complaints + privileges + learning +
raises + critical + advance
# Estimate a regression model with rxFastLinear
res2 <- rxFastLinear(formula = attitudeForm, data = myXdfDS,
type = "regression")
# Score to data frame
scoreOut2 <- rxPredict(res2, data = myXdfDS,
extraVarsToWrite = "rating")
# Plot the rating versus the score with a regression line
rxLinePlot(rating~Score, type = c("p","r"), data = scoreOut2)
# Clean up
file.remove(myXdf)