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 denen True der Wert der Variablen old ist.

  • row_selection = (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 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

rx_predict

Referenzen

Wikipedia: L-BFGS

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