rxFastForest: Fast Forest
Machine Learning: Fast Forest
Verwendung
rxFastForest(formula = NULL, data, type = c("binary", "regression"),
numTrees = 100, numLeaves = 20, minSplit = 10, exampleFraction = 0.7,
featureFraction = 0.7, splitFraction = 0.7, numBins = 255,
firstUsePenalty = 0, gainConfLevel = 0, trainThreads = 8,
randomSeed = NULL, 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 = 2,
computeContext = rxGetOption("computeContext"),
ensemble = ensembleControl(), ...)
Argumente
formula
Die Formel, wie in rxFormula 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.
type
Eine Zeichenfolge, die den Typ „Fast Tree“ bezeichnet
"binary"
für die standardmäßige binäre Fast Tree-Klassifizierung oder"regression"
für Fast Tree-Regression.
numTrees
Gibt die Gesamtanzahl von Entscheidungsstrukturen an, die im Ensemble erstellt werden sollen. Mit einer höheren Anzahl von Entscheidungsstrukturen erzielen Sie u. U. eine bessere Abdeckung, allerdings verlängert sich dadurch auch die Trainingsdauer. Der Standardwert ist 100.
numLeaves
Die maximale Anzahl von Blättern (Endknoten) an, die in einem Baum erstellt werden können. Höhere Werte können zwar den Baum vergrößern und die Genauigkeit verbessern, bergen aber das Risiko einer Überanpassung und erfordern längere Trainingszeiten. Der Standardwert lautet 20.
minSplit
Mindestanzahl von Trainingsinstanzen an, die für die Erstellung eines Blatts erforderlich sind. Das heißt, die minimale Anzahl von Dokumenten, die in einem Blatt eines Regressionsbaums aus den Daten mit untergeordneten Stichproben zulässig sind. Eine „Aufteilung“ bedeutet, dass Features auf jeder Ebene des Baums (Knotens) zufällig aufgeteilt werden. Der Standardwert ist 10.
exampleFraction
Der Anteil zufällig gewählter Instanzen, die für jeden Baum verwendet werden sollen. Der Standardwert ist 0,7.
featureFraction
Der Anteil zufällig gewählter Features, die für jeden Baum verwendet werden sollen. Der Standardwert ist 0,7.
splitFraction
Der Anteil zufällig gewählter Features, die für jede Aufteilung verwendet werden sollen. Der Standardwert ist 0,7.
numBins
Maximale Anzahl unterschiedlicher Werte (Bins) pro Feature. Der Standardwert ist 255.
firstUsePenalty
Das Feature verwendet zuerst den Strafkoeffizienten. Der Standardwert ist 0.
gainConfLevel
Konfidenzanforderung für die Baumanpassung (muss im Bereich [0,1] liegen). Der Standardwert ist 0.
trainThreads
Die Anzahl der Threads zum Trainieren des Modells. Falls NULL
angegeben wird, wird die Anzahl der zu verwendenden Threads intern bestimmt. Der Standardwert ist NULL
.
randomSeed
Gibt den zufälligen Ausgangswert an. Der Standardwert ist NULL
.
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.
Details
Entscheidungsbäume sind nicht-parametrische Modelle, die eine Reihe
von einfachen Tests auf Eingaben anwenden. Dieses Entscheidungsverfahren ordnet sie Ausgaben aus dem Trainingsdataset zu, deren Eingaben der zu verarbeitenden Instanz ähnlich waren. Bei jedem Knoten der binären Baumstruktur wird eine Entscheidung auf Grundlage des Maßes der Ähnlichkeit getroffen, das jede Instanz rekursiv durch die Zweige des Baums zuordnet, bis der entsprechende Blattknoten erreicht und die Ausgabeentscheidung zurückgegeben wird.
Entscheidungsbäume haben mehrere Vorteile:
Sie sind während des Trainings und der Vorhersage effizient sowohl bei der Berechnung als auch bei der Arbeitsspeicherauslastung.
Sie können nicht lineare Entscheidungsgrenzen darstellen.
Sie führen eine integrierte Featureauswahl und -klassifizierung durch.
Sie sind resilient gegen störende Features.
Die Fast Forest-Regression ist eine Implementierung von Random Forest und Quantile Regression Forest unter Verwendung des Regressionsbaum-Lernmodus in rxFastTrees. Dieses Modell besteht aus einem Ensemble von Entscheidungsbäumen. Jeder Baum in einem Entscheidungswald gibt mittels Prognose eine Gauß-Verteilung aus. Es erfolgt eine Aggregation über das Baumensemble, um eine Gauß-Verteilung zu finden, die der kombinierten Verteilung für alle Bäume im Modell am nächsten kommt.
Dieser Entscheidungswaldklassifizierer besteht aus einem Ensemble von Entscheidungsbäumen. Im Allgemeinen bieten Ensemblemodelle eine bessere Abdeckung und Genauigkeit als einzelne Entscheidungsbäume. Jeder Baum in einem Entscheidungswald gibt mittels Prognose eine Gauß-Verteilung aus. Es erfolgt eine Aggregation über das Baumensemble, um eine Gauß-Verteilung zu finden, die der kombinierten Verteilung für alle Bäume im Modell am nächsten kommt.
Wert
rxFastForest
: Ein rxFastForest
-Objekt mit dem trainierten Modell.
FastForest
: Ein Learnerspezifikationsobjekt der Klasse maml
für den Fast Forest-Trainer.
Notizen
Dieser Algorithmus ist ein Multithread-Algorithmus, der immer versucht, das gesamte Dataset in den Arbeitsspeicher zu laden.
Autor(en)
Microsoft Corporation Microsoft Technical Support
References
From Stumps to Trees to Forests
Siehe auch
rxFastTrees, rxFastLinear, rxLogisticRegression, rxNeuralNet, rxOneClassSvm, featurizeText, categorical, categoricalHash, rxPredict.mlModel.
Beispiele
# Estimate a binary classification forest
infert1 <- infert
infert1$isCase = (infert1$case == 1)
forestModel <- rxFastForest(formula = isCase ~ age + parity + education + spontaneous + induced,
data = infert1)
# Create text file with per-instance results using rxPredict
txtOutFile <- tempfile(pattern = "scoreOut", fileext = ".txt")
txtOutDS <- RxTextData(file = txtOutFile)
scoreDS <- rxPredict(forestModel, data = infert1,
extraVarsToWrite = c("isCase", "Score"), outData = txtOutDS)
# Print the fist ten rows
rxDataStep(scoreDS, numRows = 10)
# Clean-up
file.remove(txtOutFile)
######################################################################
# Estimate a regression fast forest
# Use the built-in data set 'airquality' to create test and train data
DF <- airquality[!is.na(airquality$Ozone), ]
DF$Ozone <- as.numeric(DF$Ozone)
randomSplit <- rnorm(nrow(DF))
trainAir <- DF[randomSplit >= 0,]
testAir <- DF[randomSplit < 0,]
airFormula <- Ozone ~ Solar.R + Wind + Temp
# Regression Fast Forest for train data
rxFastForestReg <- rxFastForest(airFormula, type = "regression",
data = trainAir)
# Put score and model variables in data frame
rxFastForestScoreDF <- rxPredict(rxFastForestReg, data = testAir,
writeModelVars = TRUE)
# Plot actual versus predicted values with smoothed line
rxLinePlot(Score ~ Ozone, type = c("p", "smooth"), data = rxFastForestScoreDF)