Condividi tramite


rxLogisticRegression: regressione logistica

Regressione logistica di Machine Learning

Utilizzo

  rxLogisticRegression(formula = NULL, data, type = c("binary", "multiClass"),
    l2Weight = 1, l1Weight = 1, optTol = 1e-07, memorySize = 20,
    initWtsScale = 0, maxIterations = 2147483647, showTrainingStats = FALSE,
    sgdInitTol = 0, trainThreads = NULL, denseOptimizer = FALSE,
    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(), ...)

Arguments

formula

Formula descritta in rxFormula. I termini di interazione e F() non sono attualmente supportati in MicrosoftML.

data

Oggetto origine dati o stringa di caratteri che specifica un file con estensione xdf o un oggetto frame di dati.

type

Stringa di caratteri che specifica il tipo di regressione logistica: "binary" per la regressione logistica di classificazione binaria predefinita o "multi" per la regressione logistica multinomiale.

l2Weight

Il peso di regolarizzazione L2. Il suo valore deve essere maggiore o uguale a 0 e il valore predefinito è impostato su 1.

l1Weight

Il peso di regolarizzazione L1. Il suo valore deve essere maggiore o uguale a 0 e il valore predefinito è impostato su 1.

optTol

Valore di soglia per la convergenza dell'ottimizzatore. Se il miglioramento tra le iterazioni è inferiore alla soglia, l'algoritmo si interrompe e restituisce il modello corrente. I valori più piccoli sono più lenti, ma più precisi. Il valore predefinito è 1e-07.

memorySize

Dimensione della memoria per L-BFGS, che specifica il numero di posizioni e gradienti passati da archiviare per il calcolo del passaggio successivo. Questo parametro di ottimizzazione limita la quantità di memoria usata per calcolare l'entità e la direzione del passaggio successivo. Quando si specifica una quantità di memoria inferiore, il training è più veloce ma meno accurato. Deve essere maggiore o uguale a 1 e il valore predefinito è 20.

initWtsScale

Imposta il diametro dei pesi iniziali che specifica l'intervallo da cui vengono prelevati i valori per i pesi iniziali. Questi pesi vengono inizializzati in modo casuale all'interno di questo intervallo. Se ad esempio si specifica che il diametro è d, i pesi vengono distribuiti uniformemente tra -d/2 e d/2. Il valore predefinito è 0, che specifica che tutti i pesi vengano inizializzati in 0.

maxIterations

Imposta il numero massimo di iterazioni. Dopo questo numero di passaggi, l'algoritmo si arresta anche se non ha soddisfatto i criteri di convergenza.

showTrainingStats

Specificare TRUE per visualizzare le statistiche dei dati di training e del modello sottoposto a training; altrimenti FALSE. Il valore predefinito è FALSE. Per altre informazioni sulle statistiche del modello, vedere summary.mlModel.

sgdInitTol

Impostare su un numero maggiore di 0 per usare la discesa stocastica del gradiente (SGD) per trovare i parametri iniziali. Un set di valori diverso da zero specifica la tolleranza usata dal metodo SGD per determinare la convergenza. Il valore predefinito è 0 e specifica che il metodo SGD non viene usato.

trainThreads

Numero di thread da usare nel training del modello. Deve essere impostato sul numero di core presenti nel computer. Si noti che il multithreading L-BFGS prova a caricare il set di dati in memoria. In caso di problemi di memoria insufficiente, impostare trainThreads su 1 per disattivare il multithreading. Se NULL, il numero di thread da usare viene determinato internamente. Il valore predefinito è NULL.

denseOptimizer

Se TRUE, forza la densificazione dei vettori di ottimizzazione interni. Se FALSE, consente all'ottimizzatore di regressione logistica di usare stati interni di tipo sparse o denso come ritiene appropriato. L'impostazione di denseOptimizer su TRUE richiede che l'ottimizzatore interno usi uno stato interno denso, che può contribuire ad alleviare il carico sul Garbage Collector per alcune varietà di problemi più grandi.

normalize

Specifica il tipo di normalizzazione automatica usata:

  • "auto": se la normalizzazione è necessaria, viene eseguita automaticamente. Questa è l'opzione predefinita.
  • "no": non viene eseguita alcuna normalizzazione.
  • "yes": la normalizzazione viene eseguita.
  • "warn": se la normalizzazione è necessaria, viene visualizzato un avviso ma la normalizzazione non viene eseguita.
    La normalizzazione ridimensiona diversi intervalli di dati in base a una scala standard. Il ridimensionamento delle funzioni assicura che le distanze tra i punti dati siano proporzionali e consente di accelerare significativamente la convergenza di diversi metodi di ottimizzazione, tra cui la discesa di gradiente. Se la normalizzazione viene eseguita, viene usato un normalizzatore MaxMin. I valori vengono normalizzati in un intervallo [a, b], dove -1 <= a <= 0 e 0 <= b <= 1 e b - a = 1. Questo normalizzatore mantiene la sparsità eseguendo il mapping di zero a zero.

mlTransforms

Specifica un elenco di trasformazioni di MicrosoftML da eseguire sui dati prima del training o NULL se non devono essere eseguite trasformazioni. Per informazioni sulle trasformazioni supportate, vedere featurizeText, categorical e categoricalHash. Queste trasformazioni vengono eseguite dopo eventuali trasformazioni R specificate. Il valore predefinito è NULL.

mlTransformVars

Specifica un vettore di caratteri di nomi di variabili da usare in mlTransforms o NULL se non è necessario usarne alcuno. Il valore predefinito è NULL.

rowSelection

Specifica le righe (osservazioni) dal set di dati che devono essere usate dal modello con il nome di una variabile logica dal set di dati (tra virgolette) o con un'espressione logica tramite variabili nel set di dati. Ad esempio, rowSelection = "old" userà solo osservazioni in cui il valore della variabile old è TRUE. rowSelection = (age > 20) & (age < 65) & (log(income) > 10) usa solo osservazioni in cui il valore della variabile age è compreso tra 20 e 65 e il valore di log della variabile income è maggiore di 10. La selezione delle righe viene eseguita dopo l'elaborazione di eventuali trasformazioni dei dati. Vedere gli argomenti transforms o transformFunc. Analogamente a tutte le espressioni, è possibile definire rowSelection all'esterno della chiamata alla funzione usando la funzione di espressione.

transforms

Espressione con formato list(name = expression, ``...) che rappresenta il primo ciclo di trasformazioni delle variabili. Analogamente a tutte le espressioni, è possibile definire transforms o rowSelection all'esterno della chiamata alla funzione usando la funzione di espressione.

transformObjects

Elenco denominato che contiene oggetti a cui transforms, transformsFunce rowSelection possono fare riferimento.

transformFunc

Funzione di trasformazione della variabile. Per informazioni dettagliate, vedere rxTransform.

transformVars

Vettore di caratteri delle variabili del set di dati di input necessario per la funzione di trasformazione. Per informazioni dettagliate, vedere rxTransform.

transformPackages

Vettore di caratteri che specifica altri pacchetti R, oltre a quelli specificati in rxGetOption("transformPackages"), da rendere disponibili e precaricati per l'uso nelle funzioni di trasformazione delle variabili. Ad esempio, quelli definiti in modo esplicito nelle funzioni RevoScaleR tramite i relativi argomenti transforms e transformFunc o quelli definiti in modo implicito tramite i relativi argomenti formula o rowSelection. L'argomento transformPackages può anche essere NULL, che indica che non vengono precaricati pacchetti esterni a rxGetOption("transformPackages").

transformEnvir

Ambiente definito dall'utente da usare come elemento padre di tutti gli ambienti sviluppati internamente e usati per la trasformazione dei dati delle variabili. Se transformEnvir = NULL, viene invece usato un nuovo ambiente "hash" con padre baseenv().

blocksPerRead

Specifica il numero di blocchi da leggere per ogni blocco di dati letto dall'origine dati.

reportProgress

Valore intero che specifica il livello di creazione di report sullo stato di elaborazione delle righe:

  • 0: non viene segnalato alcun avanzamento.
  • 1: il numero di righe elaborate viene stampato e aggiornato.
  • 2: vengono segnalate le righe elaborate e le tempistiche.
  • 3: vengono segnalate le righe elaborate e tutte le tempistiche.

verbose

Valore intero che specifica la quantità di output desiderata. Se 0, non viene stampato alcun output dettagliato durante i calcoli. Valori interi da 1 a 4 per fornire quantità crescenti di informazioni.

computeContext

Imposta il contesto in cui vengono eseguiti i calcoli, specificato con un RxComputeContext valido. Sono attualmente supportati contesti di calcolo locali e RxInSqlServer.

ensemble

Parametri di controllo per l'ensembling.

...

Argomenti aggiuntivi da passare direttamente al motore di calcolo Microsoft.

Dettagli

La regressione logistica è un metodo di classificazione usato per prevedere il valore di una variabile dipendente categorica dalla sua relazione con una o più variabili indipendenti che si presume abbiano una distribuzione logistica. Se la variabile dipendente ha solo due valori possibili (esito positivo/errore), la regressione logistica è binaria. Se la variabile dipendente ha più di due valori possibili (gruppo sanguigno dati i risultati dei test diagnostici), la regressione logistica è multinomiale.

La tecnica di ottimizzazione usata per rxLogisticRegression è la L-BFGS (Broyden-Fletcher-Goldfarb-Shanno) a memoria limitata. Sia gli algoritmi L-BFGS che quelli BFGS regolari usano metodi quasi-newtoniani per stimare la matrice hessiana intensiva a livello di calcolo nell'equazione usata dal metodo di Newton per calcolare i passaggi. L'approssimazione L-BFGS usa tuttavia solo una quantità limitata di memoria per calcolare la direzione del passaggio successivo, quindi è particolarmente adatta per problemi con un gran numero di variabili. Il parametro memorySize consente di specificare il numero di posizioni e gradienti passati da archiviare per l'uso nel calcolo del passaggio successivo.

Questo strumento di apprendimento può usare la regolarizzazione della rete elastica: una combinazione lineare di regolarizzazioni L1 (lazo) e L2 (ridge). La regolarizzazione è un metodo che può rendere più trattabile un problema mal posto imponendo vincoli che forniscono informazioni per integrare i dati e che impediscono l'overfitting penalizzando i modelli con valori di coefficiente estremi. Ciò può migliorare la generalizzazione del modello appreso selezionando la complessità ottimale nel compromesso distorsione-varianza. La regolarizzazione funziona aggiungendo la penalità associata ai valori dei coefficienti all'errore dell'ipotesi. Un modello accurato con valori di coefficiente estremi sarebbe penalizzato di più, mentre un modello meno accurato con valori più conservativi sarebbe penalizzato di meno. La regolarizzazione L1 e L2 ha effetti e usi diversi che sono complementari, sotto certi aspetti.

l1Weight: applicabile a modelli di tipo sparse, quando si lavora con dati ad alta dimensione. Esegue il pull di piccole funzionalità associate a pesi che sono relativamente poco importanti verso lo 0.

l2Weight: è preferibile per i dati che non sono di tipo sparse. Esegue il pull di grandi pesi verso lo zero.

L'aggiunta della penalità ridge alla regolarizzazione supera alcuni dei
limiti di lazo. Può migliorare la sua accuratezza predittiva, ad esempio, quando il numero di predittori è maggiore della dimensione del campione. Se x = l1Weight e y = l2Weight, ax + by = c definisce l'intervallo lineare dei termini di regolarizzazione. I valori predefiniti di x e y sono entrambi 1. Una regolarizzazione aggressiva può danneggiare la capacità predittiva escludendo variabili importanti dal modello. La scelta dei valori ottimali per i parametri di regolarizzazione è quindi importante per le prestazioni del modello di regressione logistica.

Valore

rxLogisticRegression: oggetto rxLogisticRegression con il modello sottoposto a training.

LogisticReg: oggetto di specifica dello strumento di apprendimento con classe maml per il programma di training Logistic Reg.

Note

Questo algoritmo proverà a caricare l'intero set di dati in memoria quando trainThreads > 1 (multi-threading).

Autore/i

Microsoft Corporation Microsoft Technical Support

Riferimenti

Wikipedia: L-BFGS

regression

Training of L1-Regularized Log-Linear Models

and L2 Regularization for Machine Learning

Vedi anche

rxFastTrees, rxFastForest, rxFastLinear, rxNeuralNet, rxOneClassSvm, featurizeText, categorical, categoricalHash, rxPredict.mlModel.

Esempi


 # Estimate a logistic regression model
 logitModel <- rxLogisticRegression(isCase ~ age + parity + education + spontaneous + induced,
                   transforms = list(isCase = case == 1),
                   data = infert)
 # Print a summary of the model
 summary(logitModel)

 # Score to a data frame
 scoreDF <- rxPredict(logitModel, 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)

 #######################################################################################
 # Multi-class logistic regression  
 testObs <- rnorm(nrow(iris)) > 0
 testIris <- iris[testObs,]
 trainIris <- iris[!testObs,]
 multiLogit <- rxLogisticRegression(
     formula = Species~Sepal.Length + Sepal.Width + Petal.Length + Petal.Width,
     type = "multiClass", data = trainIris)

 # Score the model
 scoreMultiDF <- rxPredict(multiLogit, data = testIris, 
     extraVarsToWrite = "Species")    
 # Print the first rows of the data frame with scores
 head(scoreMultiDF)
 # Look at confusion matrix
 table(scoreMultiDF$Species, scoreMultiDF$PredictedLabel)

 # Look at the observations with incorrect predictions
 badPrediction = scoreMultiDF$Species != scoreMultiDF$PredictedLabel
 scoreMultiDF[badPrediction,]