Delen via


microsoftml.rx_logistic_regression: Logistieke regressie

Usage

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)

Description

Logistieke regressie van Machine Learning

Bijzonderheden

Logistieke regressie is een classificatiemethode die wordt gebruikt om de waarde van een categorische afhankelijke variabele te voorspellen van de relatie met een of meer onafhankelijke variabelen die ervan uitgaan dat ze een logistieke verdeling hebben. Als de afhankelijke variabele slechts twee mogelijke waarden (success/failure) heeft, is de logistieke regressie binair. Als de afhankelijke variabele meer dan twee mogelijke waarden heeft (bloedtype gegeven diagnostische testresultaten), is de logistieke regressie multinomiaal.

De optimalisatietechniek die hiervoor wordt gebruikt rx_logistic_regression , is het beperkte geheugen Broyden-Fletcher-Goldfarb-Shanno (L-BFGS). Zowel de L-BFGS- als de reguliere BFGS-algoritmen gebruiken quasi-Newtoniaanse methoden om de rekenintensieve Hessische matrix te schatten in de vergelijking die door newtons methode wordt gebruikt om stappen te berekenen. Maar de L-BFGS-benadering gebruikt slechts een beperkte hoeveelheid geheugen om de volgende staprichting te berekenen, zodat deze vooral geschikt is voor problemen met een groot aantal variabelen. De memory_size parameter geeft het aantal eerdere posities en kleurovergangen op dat moet worden opgeslagen voor gebruik in de berekening van de volgende stap.

Deze cursist kan elastic net regularisatie gebruiken: een lineaire combinatie van L1 (lasso) en L2 (ridge) regularisaties. Regularisatie is een methode die een slecht gesteld probleem meer kan veroorzaken door beperkingen op te leggen die informatie bieden om de gegevens aan te vullen en die overfitting voorkomen door modellen met extreme coëfficiëntwaarden te straffen. Dit kan de generalisatie van het model verbeteren door de optimale complexiteit te selecteren in de afweging tussen afwijkingen en afwijkingen. Regularisatie werkt door de boete die is gekoppeld aan coëfficiëntwaarden toe te voegen aan de fout van de hypothese. Een nauwkeurig model met extreme coëfficiëntwaarden zou meer worden bestraft, maar een minder nauwkeurig model met meer conservatieve waarden zou minder worden bestraft. L1- en L2-regularisatie hebben verschillende effecten en toepassingen die in bepaalde opzichten complementair zijn.

  • l1_weight: kan worden toegepast op sparse-modellen bij het werken met high-dimensionale gegevens. Het haalt kleine gewichten die zijn gekoppeld aan functies die relatief onbelangrijk zijn naar 0.

  • l2_weight: heeft de voorkeur voor gegevens die niet worden geparseerd. Het trekt grote gewichten naar nul.

Door de ridge-boete toe te voegen aan de regularisatie worden enkele beperkingen van lasso verholpen. Het kan de voorspellingsnauwkeurigheid verbeteren, bijvoorbeeld wanneer het aantal voorspellers groter is dan de steekproefgrootte. Als x = l1_weight en y = l2_weight, ax + by = c definieert u de lineaire periode van de regularisatietermen. De standaardwaarden van x en y zijn beide 1. Een agressieve regularisatie kan voorspellende capaciteit schaden door belangrijke variabelen uit het model uit te sluiten. Het kiezen van de optimale waarden voor de regularisatieparameters is dus belangrijk voor de prestaties van het logistieke regressiemodel.

Arguments

formule

De formule zoals beschreven in revoscalepy.rx_formula interactietermen en F() wordt momenteel niet ondersteund in microsoftml.

gegevens

Een gegevensbronobject of een tekenreeks die een .xdf-bestand of een gegevensframeobject opgeeft.

method

Een tekenreeks die het type Logistieke Regressie aangeeft: "binary" voor de standaard logistieke regressie voor binaire classificatie of "multiClass" voor multinomiale logistieke regressie.

l2_weight

Het L2-regularisatiegewicht. De waarde moet groter dan of gelijk zijn aan 0 en de standaardwaarde is ingesteld op 1.

l1_weight

De L1 regularisatiegewicht. De waarde moet groter dan of gelijk zijn aan 0 en de standaardwaarde is ingesteld op 1.

opt_tol

Drempelwaarde voor optimizer-convergentie. Als de verbetering tussen iteraties kleiner is dan de drempelwaarde, stopt het algoritme en retourneert het huidige model. Kleinere waarden zijn langzamer, maar nauwkeuriger. De standaardwaarde is 1e-07.

memory_size

Geheugengrootte voor L-BFGS, waarbij het aantal eerdere posities en kleurovergangen wordt opgegeven dat moet worden opgeslagen voor de berekening van de volgende stap. Deze optimalisatieparameter beperkt de hoeveelheid geheugen die wordt gebruikt om de grootte en richting van de volgende stap te berekenen. Wanneer u minder geheugen opgeeft, is de training sneller maar minder nauwkeurig. Moet groter dan of gelijk zijn aan 1 en de standaardwaarde is 20.

max_iterations

Hiermee stelt u het maximum aantal iteraties in. Na dit aantal stappen stopt het algoritme, zelfs als er niet aan convergentiecriteria is voldaan.

show_training_stats

Geef True op om de statistieken van trainingsgegevens en het getrainde model weer te geven; Falseanders. De standaardwaarde is False. Zie voor meer informatie over modelstatistieken summary.ml_model().

sgd_init_tol

Stel in op een getal dat groter is dan 0 om Stochastic Gradient Descent (SGD) te gebruiken om de initiële parameters te vinden. Een niet-nul-waardeset geeft de tolerantie die SGD gebruikt om convergentie te bepalen. De standaardwaarde geeft 0 aan dat SGD niet wordt gebruikt.

init_wts_diameter

Hiermee stelt u de initiële gewichtsdiameter in waarmee het bereik wordt opgegeven van waaruit waarden worden getrokken voor de aanvankelijke gewichten. Deze gewichten worden willekeurig geïnitialiseerd vanuit dit bereik. Als de diameter bijvoorbeeld is opgegeven d, worden de gewichten gelijkmatig verdeeld tussen -d/2 en d/2. De standaardwaarde is 0, waarmee wordt aangegeven dat alle gewichten worden geïnitialiseerd tot 0.

train_threads

Het aantal threads dat moet worden gebruikt bij het trainen van het model. Dit moet worden ingesteld op het aantal kernen op de machine. L-BFGS multithreading probeert gegevensset in het geheugen te laden. Bij problemen met onvoldoende geheugen moet train_threads1 u multithreading uitschakelen. Als het aantal threads dat moet worden gebruikt, niet intern wordt bepaald. De standaardwaarde is None.

dense_optimizer

Als True, dwingt de verdichting van de interne optimalisatie vectoren. Als False, schakelt de logistieke regressie optimizer gebruik sparse of dichte interne toestanden zoals het passend vindt. Instelling denseOptimizer om True de interne optimizer te vereisen voor het gebruik van een dichte interne toestand, wat kan helpen om de belasting van de garbagecollector te verlichten voor sommige variëteiten van grotere problemen.

Normalize

Hiermee geeft u het type automatische normalisatie gebruikt:

  • "Auto": als normalisatie nodig is, wordt deze automatisch uitgevoerd. Dit is de standaardoptie.

  • "No": er wordt geen normalisatie uitgevoerd.

  • "Yes": normalisatie wordt uitgevoerd.

  • "Warn": als normalisatie nodig is, wordt er een waarschuwingsbericht weergegeven, maar wordt er geen normalisatie uitgevoerd.

Normalisatie schaalt verschillende gegevensbereiken opnieuw op een standaardschaal. Door het schalen van functies worden de afstanden tussen gegevenspunten proportioneel en kunnen verschillende optimalisatiemethoden, zoals gradiëntafname, veel sneller worden geconvergeerd. Als normalisatie wordt uitgevoerd, wordt een MaxMin normalizer gebruikt. Het normaliseert waarden in een interval [a, b] waar -1 <= a <= 0 en 0 <= b <= 1 .b - a = 1 Deze normalizer behoudt spaarzaamheid door nul aan nul toe te brengen.

ml_transforms

Hiermee geeft u een lijst op met MicrosoftML-transformaties die moeten worden uitgevoerd op de gegevens vóór de training of Geen als er geen transformaties moeten worden uitgevoerd. Zie featurize_text, categoricalen categorical_hash, voor transformaties die worden ondersteund. Deze transformaties worden uitgevoerd na opgegeven Python-transformaties. De standaardwaarde is None.

ml_transform_vars

Hiermee geeft u een tekenvector op van namen van variabelen die moeten worden gebruikt in ml_transforms of Geen als er geen moet worden gebruikt. De standaardwaarde is None.

row_selection

NIET ONDERSTEUND. Hiermee geeft u de rijen (waarnemingen) op uit de gegevensset die door het model moeten worden gebruikt met de naam van een logische variabele uit de gegevensset (tussen aanhalingstekens) of met een logische expressie met behulp van variabelen in de gegevensset. Voorbeeld:

  • row_selection = "old" gebruikt alleen waarnemingen waarin de waarde van de variabele old is True.

  • row_selection = (age > 20) & (age < 65) & (log(income) > 10) gebruikt alleen waarnemingen waarbij de waarde van de age variabele tussen 20 en 65 ligt en de waarde van de logincome variabele groter is dan 10.

De rijselectie wordt uitgevoerd na het verwerken van gegevenstransformaties (zie de argumenten transforms of transform_function). Net als bij alle expressies row_selection kunt u buiten de functieoproep definiëren met behulp van de expression functie.

Transformeert

NIET ONDERSTEUND. Een expressie van het formulier dat de eerste ronde van variabeletransformaties vertegenwoordigt. Net als bij alle expressies transforms kan (of row_selection) buiten de functie-aanroep worden gedefinieerd met behulp van de expression functie.

transform_objects

NIET ONDERSTEUND. Een benoemde lijst met objecten waarnaar kan worden verwezen door transforms, transform_functionen row_selection.

transform_function

De functie voor variabeletransformatie.

transform_variables

Een tekenvector van variabelen voor invoergegevenssets die nodig zijn voor de transformatiefunctie.

transform_packages

NIET ONDERSTEUND. Een tekenvector die extra Python-pakketten opgeeft (buiten de pakketten die zijn opgegeven in RxOptions.get_option("transform_packages")) die beschikbaar moeten worden gemaakt en vooraf moeten worden geladen voor gebruik in functies voor variabele transformatie. Bijvoorbeeld degenen die expliciet zijn gedefinieerd in revoscalepy-functies via hun transforms en transform_function argumenten of die impliciet zijn gedefinieerd via hun formula of row_selection argumenten. Het transform_packages argument kan ook Geen zijn, wat aangeeft dat er geen pakketten buiten RxOptions.get_option("transform_packages") zijn geladen.

transform_environment

NIET ONDERSTEUND. Een door de gebruiker gedefinieerde omgeving die als bovenliggend element fungeert voor alle omgevingen die intern zijn ontwikkeld en worden gebruikt voor variabele gegevenstransformatie. Als transform_environment = Nonein plaats daarvan een nieuwe hash-omgeving met bovenliggende revoscalepy.baseenv wordt gebruikt.

blocks_per_read

Hiermee geeft u het aantal blokken op dat moet worden gelezen voor elk segment gegevens dat uit de gegevensbron wordt gelezen.

report_progress

Een geheel getal dat het rapportageniveau voor de voortgang van de rijverwerking aangeeft:

  • 0: er wordt geen voortgang gerapporteerd.

  • 1: het aantal verwerkte rijen wordt afgedrukt en bijgewerkt.

  • 2: rijen verwerkt en tijdsinstellingen worden gerapporteerd.

  • 3: rijen verwerkt en alle tijdsinstellingen worden gerapporteerd.

verbose

Een geheel getal dat de gewenste hoeveelheid uitvoer aangeeft. Als 0er tijdens berekeningen geen uitgebreide uitvoer wordt afgedrukt. Gehele getallen van waaruit 14 grotere hoeveelheden informatie moeten worden opgegeven.

compute_context

Hiermee stelt u de context in waarin berekeningen worden uitgevoerd, opgegeven met een geldige revoscalepy. RxComputeContext. Momenteel lokaal en opnieuw schalen. RxInSqlServer-rekencontexten worden ondersteund.

Ensemble

Besturingsparameters voor het opgeven van overeenkomsten.

Retouren

Een LogisticRegression object met het getrainde model.

Opmerking

Met dit algoritme wordt geprobeerd de volledige gegevensset in het geheugen te laden wanneer train_threads > 1 (multithreading).

Zie ook

rx_predict

References

Wikipedia: L-BFGS

Wikipedia: Logistieke regressie

Schaalbare training van L1-Regularized Log-Linear-modellen

Testuitvoering - L1 en L2 Regularisatie voor Machine Learning

Voorbeeld van binaire classificatie

'''
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))

Uitvoer:

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

Voorbeeld van classificatie van MultiClass

'''
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))

Uitvoer:

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