microsoftml.rx_logistic_regression: logistische Regression
Verwendung
microsoftml.rx_logistic_regression(formula: str,
data: [revoscalepy.datasource.RxDataSource.RxDataSource,
pandas.core.frame.DataFrame], method: ['binary',
'multiClass'] = 'binary', l2_weight: float = 1,
l1_weight: float = 1, opt_tol: float = 1e-07,
memory_size: int = 20, init_wts_diameter: float = 0,
max_iterations: int = 2147483647,
show_training_stats: bool = False, sgd_init_tol: float = 0,
train_threads: int = None, dense_optimizer: bool = False,
normalize: ['No', 'Warn', 'Auto', 'Yes'] = 'Auto',
ml_transforms: list = None, ml_transform_vars: list = None,
row_selection: str = None, transforms: dict = None,
transform_objects: dict = None, transform_function: str = None,
transform_variables: list = None,
transform_packages: list = None,
transform_environment: dict = None, blocks_per_read: int = None,
report_progress: int = None, verbose: int = 1,
ensemble: microsoftml.modules.ensemble.EnsembleControl = None,
compute_context: revoscalepy.computecontext.RxComputeContext.RxComputeContext = None)
BESCHREIBUNG
Machine Learning: logistische Regression
Details
Logistische Regression ist eine Methode zur Klassifizierung, die dazu dient, den Wert einer kategorischen abhängigen Variable anhand ihrer Beziehung zu einer oder mehreren unabhängigen Variablen vorherzusagen, für die eine logistische Verteilung angenommen wird. Wenn die abhängige Variable nur zwei mögliche Werte hat (Erfolg/Fehler), ist die logistische Regression binär. Wenn es für die abhängige Variable mehr als zwei mögliche Werte gibt (Blutgruppe bei Diagnosetestergebnissen), ist die logistische Regression multinomial.
Das für rx_logistic_regression
verwendete Optimierungsverfahren ist L-BFGS (Limited Memory Broyden-Fletcher-Goldfarb-Shanno) mit begrenztem Arbeitsspeicher. Sowohl der L-BFGS- als auch der herkömmliche BFGS-Algorithmus verwenden quasi-Newtonsche Methoden, um die rechenintensive Hessian-Matrix in der Gleichung zu schätzen, die von der Newton-Methode zur Berechnung der Schritte verwendet wird. Die L-BFGS-Näherung verwendet jedoch nur eine begrenzte Menge an Arbeitsspeicher, um die Richtung des nächsten Schritts zu berechnen, sodass sie besonders für Probleme mit einer großen Anzahl von Variablen geeignet ist. Der Parameter memory_size
gibt die Anzahl der bisherigen Positionen und Gradienten an, die für die Berechnung des nächsten Schritts gespeichert werden sollen.
Dieses Lernmodul kann die elastische Netzregularisierung verwenden: eine lineare Kombination von L1-Regularisierung (Lasso) und L2-Regularisierung (Ridge). Regularisierung ist eine Methode, die ein schlecht gestelltes Problem durch die Auferlegung von Einschränkungen, die Informationen zur Ergänzung der Daten liefern, überschaubarer macht und eine Überanpassung verhindert, indem Modelle mit extremen Koeffizientenwerten mit Straftermen versehen werden. Dadurch kann die Generalisierung des erlernten Modells verbessert werden, indem die optimale Komplexität im Kompromiss zwischen Voreingenommenheit und Varianz ausgewählt wird. Regularisierung funktioniert, indem die Strafterme, die mit Koeffizientenwerten verbunden sind, zum Fehler der Hypothese hinzufügt werden. Ein genaues Modell mit extremen Koeffizientenwerten würde stärker mit Straftermen belegt, während ein weniger genaues Modell mit konservativeren Werten weniger mit Straftermen belegt würde. L1- und L2-Regularisierung haben unterschiedliche Wirkungen und Zwecke, die sich in gewisser Hinsicht ergänzen.
l1_weight
kann bei der Arbeit mit hochdimensionalen Daten auf spärliche Modelle angewendet werden. Dabei werden Features mit geringer Gewichtung, die relativ unwichtig sind, gegen 0 gezogen.l2_weight
ist für nicht spärliche Daten vorzuziehen. Hohe Gewichtungen werden gegen 0 gezogen.
Durch Hinzufügen von Ridge-Straftermen zur Regularisierung werden einige der Einschränkungen von Lasso überwunden. Die Genauigkeit der Prognose kann beispielsweise verbessert werden, wenn die Zahl der Prädiktoren größer ist als der Umfang der Stichprobe.
Bei x = l1_weight
und y = l2_weight
definiert ax + by = c
die lineare Spanne der Regularisierungsterme. Der Standardwert von x und y ist 1
. Eine aggressive Regularisierung kann die Prognosefähigkeit beeinträchtigen, da wichtige Variablen aus dem Modell ausgeschlossen werden. Daher ist die Auswahl der optimalen Werte für die Regularisierungsparameter wichtig für die Leistung des logistischen Regressionsmodells.
Argumente
Formel
Die Formel, wie in „revoscalepy.rx_formula“ unter „Interaktionsterme“ beschrieben, und F()
werden in microsoftml derzeit nicht unterstützt.
data
Ein Datenquellenobjekt oder eine Zeichenfolge, die eine .xdf-Datei oder ein Datenrahmenobjekt angibt.
Methode
Eine Zeichenfolge, die den Typ der logistischen Regression angibt: "binary"
für die standardmäßige binäre logistische Regression zur Klassifizierung oder "multiClass"
für die multinomiale logistische Regression.
l2_weight
Die L2-Regularisierungsgewichtung. Ihr Wert muss größer oder gleich 0
sein, der Standardwert ist auf 1
festgelegt.
l1_weight
Die L1-Regularisierungsgewichtung. Ihr Wert muss größer oder gleich 0
sein, der Standardwert ist auf 1
festgelegt.
opt_tol
Schwellenwert für Optimiererkonvergenz. Wenn die Verbesserung zwischen Iterationen kleiner als der Schwellenwert ist, wird der Algorithmus beendet und das aktuelle Modell zurückgegeben. Kleinere Werte sind langsamer, aber genauer.
Der Standardwert ist 1e-07
.
memory_size
Die Arbeitsspeichergröße für L-BFGS, die die Anzahl der bisherigen Positionen und Gradienten angibt, die für die Berechnung des nächsten Schritts gespeichert werden sollen. Dieser Optimierungsparameter begrenzt die Arbeitsspeichermenge, die zur Berechnung der Größe und Richtung des nächsten Schritts verwendet wird. Wenn Sie weniger Speicher angeben, ist das Training zwar schneller, aber ungenauer. Muss größer oder gleich 1
sein, der Standardwert ist20
.
max_iterations
Legt die maximale Anzahl von Iterationen fest. Nach dieser Anzahl von Schritten wird der Algorithmus beendet, auch wenn er die Konvergenzkriterien nicht erfüllt hat.
show_training_stats
Geben Sie True
an, um die Statistik der Trainingsdaten und des trainierten Modells anzuzeigen; andernfalls False
. Der Standardwert ist False
. Weitere Informationen zu Modellstatistiken finden Sie unter summary.ml_model()
.
sgd_init_tol
Legen Sie diesen Wert auf eine Zahl größer als 0 fest, um stochastische Gradientenabstiege (SGD) zum Ermitteln der Anfangsparameter zu verwenden. Ein Wert ungleich 0 legt die Toleranz fest, die SGD zur Bestimmung der Konvergenz verwendet.
Der Standardwert ist 0
, was bedeutet, dass SGD nicht verwendet wird.
init_wts_diameter
Legt den Durchmesser der anfänglichen Gewichtungen fest, der den Bereich angibt, aus dem die Werte für die anfänglichen Gewichtungen stammen. Diese Gewichtungen werden innerhalb dieses Bereichs nach dem Zufallsprinzip initialisiert. Wenn beispielsweise der Durchmesser mit d
angegeben wird, werden die Gewichtungen gleichmäßig zwischen -d/2
und d/2
verteilt. Der Standardwert ist 0
, der angibt, dass alle Gewichtungen mit 0
initialisiert werden.
train_threads
Die Anzahl der Threads zum Trainieren des Modells.
Diese sollte auf die Anzahl der Kerne des Computers festgelegt werden. Beachten Sie, dass bei L-BFGS-Multithreading versucht wird, das Dataset in den Arbeitsspeicher zu laden. Bei Arbeitsspeicherproblemen legen Sie train_threads
auf 1
fest, um Multithreading zu deaktivieren. Falls None, wird die Anzahl der zu verwendenden Threads intern bestimmt. Der Standardwert ist None.
dense_optimizer
Falls True
, wird die Verdichtung der internen Optimierungsvektoren erzwungen. Falls False
, kann der Optimierer der logistischen Regression spärliche oder dichte interne Zustände nach eigenem Ermessen verwenden.
Bei Festlegen von denseOptimizer
auf True
muss der interne Optimierer einen dichten internen Zustand verwenden, was die Beanspruchung des Garbage Collectors bei einigen Varianten größerer Probleme verringern kann.
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 LogisticRegression
-Objekt mit dem trainierten Modell.
Hinweis
Dieser Algorithmus versucht, das gesamte Dataset in den Arbeitsspeicher zu laden, wenn train_threads > 1
(Multithreading) festgelegt ist.
Siehe auch
Referenzen
Wikipedia: logistische Regression
Scalable Training of L1-Regularized Log-Linear Models
Testlauf: L1- und L2-Regularisierung für Machine Learning
Beispiel für binäre Klassifizierung
'''
Binary Classification.
'''
import numpy
import pandas
from microsoftml import rx_logistic_regression, 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)
model = rx_logistic_regression(
formula=" isCase ~ age + parity + education + spontaneous + induced ",
data=data_train)
print(model.coef_)
# RuntimeError: The type (RxTextData) for file is not supported.
score_ds = rx_predict(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.001, Transform Time: 0
Beginning processing data.
Beginning processing data.
Rows Read: 186, Read Time: 0, Transform Time: 0
Beginning processing data.
LBFGS multi-threading will attempt to load dataset into memory. In case of out-of-memory issues, turn off multi-threading by setting trainThreads to 1.
Beginning optimization
num vars: 6
improvement criterion: Mean Improvement
L1 regularization selected 5 of 6 weights.
Not training a calibrator because it is not needed.
Elapsed time: 00:00:00.0646405
Elapsed time: 00:00:00.0083991
OrderedDict([('(Bias)', -1.2366217374801636), ('spontaneous', 1.9391206502914429), ('induced', 0.7497404217720032), ('parity', -0.31517016887664795), ('age', -3.162723260174971e-06)])
Beginning processing data.
Rows Read: 62, Read Time: 0, Transform Time: 0
Beginning processing data.
Elapsed time: 00:00:00.0287290
Finished writing 62 rows.
Writing completed.
Rows Read: 5, Total Rows Processed: 5, Total Chunk Time: 0.001 seconds
isCase PredictedLabel Score Probability
0 False False -1.341681 0.207234
1 True True 0.597440 0.645070
2 False True 0.544912 0.632954
3 False False -1.289152 0.215996
4 False False -1.019339 0.265156
Beispiel einer Multiklassen-Klassifizierung
'''
MultiClass Classification
'''
import numpy
import pandas
from microsoftml import rx_logistic_regression, rx_predict
from revoscalepy.etl.RxDataStep import rx_data_step
from microsoftml.datasets.datasets import get_dataset
iris = get_dataset("iris")
import sklearn
if sklearn.__version__ < "0.18":
from sklearn.cross_validation import train_test_split
else:
from sklearn.model_selection import train_test_split
irisdf = iris.as_df()
irisdf["Species"] = irisdf["Species"].astype("category")
data_train, data_test, y_train, y_test = train_test_split(irisdf, irisdf.Species)
model = rx_logistic_regression(
formula=" Species ~ Sepal_Length + Sepal_Width + Petal_Length + Petal_Width ",
method="multiClass",
data=data_train)
print(model.coef_)
# RuntimeError: The type (RxTextData) for file is not supported.
score_ds = rx_predict(model, data=data_test,
extra_vars_to_write=["Species", "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: 112, Read Time: 0, Transform Time: 0
Beginning processing data.
Beginning processing data.
Rows Read: 112, Read Time: 0, Transform Time: 0
Beginning processing data.
Beginning processing data.
Rows Read: 112, Read Time: 0, Transform Time: 0
Beginning processing data.
LBFGS multi-threading will attempt to load dataset into memory. In case of out-of-memory issues, turn off multi-threading by setting trainThreads to 1.
Beginning optimization
num vars: 15
improvement criterion: Mean Improvement
L1 regularization selected 9 of 15 weights.
Not training a calibrator because it is not needed.
Elapsed time: 00:00:00.0493224
Elapsed time: 00:00:00.0080558
OrderedDict([('setosa+(Bias)', 2.074636697769165), ('versicolor+(Bias)', 0.4899507164955139), ('virginica+(Bias)', -2.564580202102661), ('setosa+Petal_Width', -2.8389241695404053), ('setosa+Petal_Length', -2.4824044704437256), ('setosa+Sepal_Width', 0.274869441986084), ('versicolor+Sepal_Width', -0.2645561397075653), ('virginica+Petal_Width', 2.6924400329589844), ('virginica+Petal_Length', 1.5976412296295166)])
Beginning processing data.
Rows Read: 38, Read Time: 0, Transform Time: 0
Beginning processing data.
Elapsed time: 00:00:00.0331861
Finished writing 38 rows.
Writing completed.
Rows Read: 5, Total Rows Processed: 5, Total Chunk Time: 0.001 seconds
Species Score.0 Score.1 Score.2
0 virginica 0.044230 0.364927 0.590843
1 setosa 0.767412 0.210586 0.022002
2 setosa 0.756523 0.221933 0.021543
3 setosa 0.767652 0.211191 0.021157
4 versicolor 0.116369 0.498615 0.385016