sklearn.linear_model.LogisticRegression

class sklearn.linear_model.LogisticRegression

Clasificador de Regresión Logística (conocido como logit, MaxEnt).

En el caso multiclase, el algoritmo de entrenamiento utiliza el esquema uno contra el resto (one-vs-rest, OvR) si la opción “multi_class” se establece en “ovr”, y utiliza la pérdida de entropía cruzada si la opción “multi_class” se establece en “multinomial”. (Actualmente la opción “multinomial” es soportada sólo por los solucionadores “lbfgs”, “sag”, “saga” y “newton-cg”)

Esta clase implementa la regresión logística regularizada utilizando la biblioteca “liblinear”, los solucionadores “newton-cg”, “sag”, “saga” y “lbfgs”. Ten en cuenta que la regularización se aplica por defecto. Puede manejar tanto entradas densas como dispersas. Utiliza arreglos ordenados en C o matrices CSR que contengan números de punto flotante (floats) de 64 bits para un rendimiento óptimo; cualquier otro formato de entrada será convertido (y copiado).

Los solucionadores “newton-cg”, “sag” y “lbfgs” sólo soportan la regularización L2 con formulación primal, o ninguna regularización. El solucionador “liblinear” soporta tanto la regularización L1 como la L2, con una formulación dual sólo para la penalización L2. La regularización Elastic-Net sólo es compatible con el solucionador “saga”.

Leer más en el Manual de Usuario.

Parámetros
penalty{“l1”, “l2”, “elasticnet”, “none”}, default=”l2”

Utilizado para especificar la norma usada en la penalización. Los solucionadores “newton-cg”, “sag” y “lbfgs” sólo soportan penalizaciones l2. “elasticnet” sólo es soportado por el solucionador “saga”. Si es “none” (no soportado por el solucionador liblinear), no se aplica ninguna regularización.

Nuevo en la versión 0.19: penalización l1 con el solucionador SAGA (permitiendo “multinomial” + L1)

dualbool, default=False

Formulación dual o primal. La formulación dual sólo se implementa para la penalización l2 con el solucionador liblinear. Preferir dual=False cuando n_samples > n_features.

tolfloat, default=1e-4

Tolerancia para el criterio de parada.

Cfloat, default=1.0

Inverso a la fuerza de regularización; debe ser un número de punto flotante (float) positivo. Como en las máquinas de vectores de soporte, los valores más pequeños especifican una regularización más fuerte.

fit_interceptbool, default=True

Especifica si una constante (también conocida como sesgo o intercepto) se debe añadir a la función de decisión.

intercept_scalingfloat, default=1

Útil sólo cuando se usa el solucionador “liblinear” y self.fit_intercept se establece en True. En este caso, x se convierte en [x, self.intercept_scaling], es decir, una característica «sintética» con valor constante igual a intercept_scaling se añade al vector de la instancia. El intercepto se convierte en intercept_scaling * synthetic_feature_weight.

Nota: la ponderación de la característica sintética está sujeta a la regularización l1/l2 como todas las demás características. Para disminuir el efecto de la regularización en la ponderación de la característica sintética (y por lo tanto en el intercepto) el intercept_scaling tiene que aumentarse.

class_weightdiccionario o “balanced”, default=None

Ponderaciones asociadas a las clases de la forma {class_label: weight}. Si no se da, se supone que todas las clases tienen ponderación uno.

El modo «balanced» utiliza los valores de y para ajustar automáticamente las ponderaciones de forma inversamente proporcional a las frecuencias de las clases en los datos de entrada como n_samples / (n_classes * np.bincount(y)).

Ten en cuenta que estas ponderaciones se multiplicarán por sample_weight (pasado por el método de ajuste) si se especifica sample_weight.

Nuevo en la versión 0.17: class_weight=”balanced”

random_stateentero, instancia de RandomState, default=None

Utilizado cuando solver == “sag”, “saga” o “liblinear” para revolver los datos. Ver Glosario para obtener detalles.

solver{“newton-cg”, “lbfgs”, “liblinear”, “sag”, “saga”}, default=”lbfgs”

Algoritmo a utilizar en el problema de optimización.

  • Para conjuntos de datos pequeños, “liblinear” es una buena elección, mientras que “sag” y “saga” son más rápidos para los grandes.

  • Para los problemas multiclase, sólo “newton-cg”, “sag”, “saga” y “lbfgs” manejan la pérdida multinomial; “liblinear” se limita a los esquemas de uno contra el resto.

  • “newton-cg”, “lbfgs”, “sag” y “saga” manejan L2 o ninguna penalización

  • “liblinear” y “saga” también manejan la penalización L1

  • “saga” también soporta la penalización “elasticnet”

  • “liblinear” no soporta establecer penalty='none'

Ten en cuenta que la convergencia rápida de “sag” y “saga” sólo está garantizada en características con aproximadamente la misma escala. Puedes preprocesar los datos con un escalador de sklearn.preprocessing.

Nuevo en la versión 0.17: Solucionador de descenso de Gradiente Medio Estocástico (Stochastic Average Gradient descent solver).

Nuevo en la versión 0.19: Solucionador SAGA.

Distinto en la versión 0.22: El solucionador predeterminado cambió de “liblinear” a “lbfgs” en 0.22.

max_iterint, default=100

Número máximo de iteraciones tomadas para que los solucionadores converjan.

multi_class{“auto”, “ovr”, “multinomial”}, default=”auto”

Si la opción elegida es “ovr”, entonces se ajusta un problema binario para cada etiqueta. Para “multinomial” la pérdida minimizada es la pérdida multinomial ajustada a través de toda la distribución de probabilidad, incluso cuando los datos son binarios. “multinomial” no está disponible cuando solver=”liblinear”. auto” selecciona “ovr” si los datos son binarios, o si solver=”liblinear”, y en caso contrario selecciona “multinomial”.

Nuevo en la versión 0.18: Solucionador de descenso de Gradiente Medio Estocástico para el caso “multinomial”.

Distinto en la versión 0.22: Por defecto cambió de “ovr” a “auto” en 0.22.

verboseint, default=0

Para los solucionadores liblinear y lbfgs establece verbose a cualquier número positivo para la verbosidad.

warm_startbool, default=False

Cuando se establece en True, reutiliza la solución de la llamada previa a fit como inicialización, de lo contrario, sólo borra la solución previa. Inútil para el solucionador liblinear. Ver Glosario.

Nuevo en la versión 0.17: warm_start para soportar los solucionadores lbfgs, newton-cg, sag, saga.

n_jobsint, default=None

Número de núcleos de CPU utilizados al paralelizar sobre las clases si multi_class=”ovr”». Este parámetro se ignora cuando el solver se establece como “liblinear”, independientemente de si se especifica “multi_class” o no. None significa 1 a menos que esté en un contexto joblib.parallel_backend. -1 significa que se utilizan todos los procesadores. Ver Glosario para más detalles.

l1_ratiofloat, default=None

El parámetro de mezcla de Elastic-Net, con 0 < l1_ratio <= 1. Sólo se utiliza si penalty='elasticnet'. Establecer l1_ratio=0 es equivalente a utilizar penalty='l2', mientras que establecer l1_ratio=1 es equivalente a utilizar penalty='l1'. Para 0 < l1_ratio < 1, la penalización es una combinación de L1 y L2.

Atributos
classes_ndarray de forma (n_classes, )

Una lista de etiquetas de clase conocidas por el clasificador.

coef_ndarray de forma (1, n_features) o (n_classes, n_features)

Coeficiente de las características en la función de decisión.

coef_ es de forma (1, n_features) cuando el problema dado es binario. En particular, cuando multi_class='multinomial', coef_ corresponde al resultado 1 (True) y -coef_ corresponde al resultado 0 (False).

intercept_ndarray de forma (1,) o (n_classes,)

Intercepto (también conocido como sesgo) añadido a la función de decisión.

Si fit_intercept se establece en False, el intercepto se establece en cero. intercept_ es de forma (1,) cuando el problema es binario. En particular, cuando multi_class='multinomial', intercept_ corresponde al resultado 1 (True) y -intercept_ corresponde al resultado 0 (False).

n_iter_ndarray de forma (1,) o (n_classes,)

Número real de iteraciones para todas las clases. Si es binario o multinomial, devuelve sólo 1 elemento. Para el solucionador liblinear, sólo se da el número máximo de iteraciones en todas las clases.

Distinto en la versión 0.20: En SciPy <= 1.0.0 el número de iteraciones de lbfgs puede exceder max_iter. Ahora n_iter_ presentará como máximo max_iter.

Ver también

SGDClassifier

Regresión logística entrenada de forma incremental (cuando se le da el parámetro loss="log").

LogisticRegressionCV

Regresión logística con validación cruzada incorporada.

Notas

La implementación C subyacente utiliza un generador de números aleatorios para seleccionar las características al ajustar el modelo. Por lo tanto, no es raro tener resultados ligeramente diferentes para los mismos datos de entrada. Si esto ocurre, prueba con un parámetro tol más pequeño.

La salida de predict puede no coincidir con la del liblinear independiente en ciertos casos. Ver diferencias con liblinear en la documentación narrativa.

Referencias

L-BFGS-B – Software for Large-scale Bound-constrained Optimization

Ciyou Zhu, Richard Byrd, Jorge Nocedal y Jose Luis Morales. http://users.iems.northwestern.edu/~nocedal/lbfgsb.html

LIBLINEAR – A Library for Large Linear Classification

https://www.csie.ntu.edu.tw/~cjlin/liblinear/

SAG – Mark Schmidt, Nicolas Le Roux, y Francis Bach

Minimizing Finite Sums with the Stochastic Average Gradient https://hal.inria.fr/hal-00860051/document

SAGA – Defazio, A., Bach F. & Lacoste-Julien S. (2014).

SAGA: A Fast Incremental Gradient Method With Support for Non-Strongly Convex Composite Objectives https://arxiv.org/abs/1407.0202

Hsiang-Fu Yu, Fang-Lan Huang, Chih-Jen Lin (2011). Dual coordinate descent

methods for logistic regression and maximum entropy models. Machine Learning 85(1-2):41-75. https://www.csie.ntu.edu.tw/~cjlin/papers/maxent_dual.pdf

Ejemplos

>>> from sklearn.datasets import load_iris
>>> from sklearn.linear_model import LogisticRegression
>>> X, y = load_iris(return_X_y=True)
>>> clf = LogisticRegression(random_state=0).fit(X, y)
>>> clf.predict(X[:2, :])
array([0, 0])
>>> clf.predict_proba(X[:2, :])
array([[9.8...e-01, 1.8...e-02, 1.4...e-08],
       [9.7...e-01, 2.8...e-02, ...e-08]])
>>> clf.score(X, y)
0.97...

Métodos

decision_function

Predice las puntuaciones de confianza de las muestras.

densify

Convierte la matriz de coeficientes en formato de arreglo denso.

fit

Ajusta el modelo según los datos de entrenamiento dados.

get_params

Obtiene los parámetros para este estimador.

predict

Predice las etiquetas de clase para las muestras en X.

predict_log_proba

Predice el logaritmo de las estimaciones de probabilidad.

predict_proba

Estimaciones de probabilidad.

score

Devuelve la precisión media en los datos de prueba y las etiquetas dadas.

set_params

Establece los parámetros de este estimador.

sparsify

Convierte la matriz de coeficientes en formato disperso.

decision_function()

Predice las puntuaciones de confianza de las muestras.

La puntuación de confianza de una muestra es proporcional a la distancia con signo de esa muestra al hiperplano.

Parámetros
Xarray-like o matriz dispersa, forma (n_samples, n_features)

Muestras.

Devuelve
arreglo, forma=(n_samples,) si n_classes == 2 de lo contrario (n_samples, n_classes)

Puntuaciones de confianza por combinación (sample, class). En el caso binario, la puntuación de confianza para self.classes_[1] donde >0 significa que esta clase sería predicha.

densify()

Convierte la matriz de coeficientes en formato de arreglo denso.

Convierte el miembro coef_ (de vuelta) en un numpy.ndarray. Este es el formato predeterminado de coef_ y se requiere para el ajuste, por lo que llamar a este método sólo es necesario en los modelos que han sido previamente dispersados (sparsified); de lo contrario, es un no-op.

Devuelve
self

Estimador ajustado.

fit()

Ajusta el modelo según los datos de entrenamiento dados.

Parámetros
X{array-like, sparse matrix} de forma (n_samples, n_features)

Vector de entrenamiento, donde n_samples es el número de muestras y n_features es el número de características.

yarray-like de forma (n_samples,)

Vector objetivo relativo a X.

sample_weightarray-like de forma (n_samples,) default=None

Arreglo de ponderaciones que se asignan a las muestras individuales. Si no se proporciona, entonces cada muestra recibe una ponderación unitaria.

Nuevo en la versión 0.17: sample_weight da soporte a LogisticRegression.

Devuelve
self

Estimador ajustado.

Notas

El solucionador SAGA admite arreglos de bits float64 y float32.

get_params()

Obtiene los parámetros para este estimador.

Parámetros
deepbool, default=True

Si es True, devolverá los parámetros para este estimador y los subobjetos contenidos que son estimadores.

Devuelve
paramsdict

Nombres de parámetros mapeados a sus valores.

predict()

Predice las etiquetas de clase para las muestras en X.

Parámetros
Xarray-like o matriz dispersa, forma (n_samples, n_features)

Muestras.

Devuelve
Carreglo, forma [n_samples]

Etiqueta de clase predicha por muestra.

predict_log_proba()

Predice el logaritmo de las estimaciones de probabilidad.

Las estimaciones devueltas para todas las clases están ordenadas por la etiqueta de las clases.

Parámetros
Xarray-like de forma (n_samples, n_features)

Vector a ser puntuado, donde n_samples es el número de muestras y n_features es el número de características.

Devuelve
Tarray-like de forma (n_samples, n_classes)

Devuelve la probabilidad logarítmica de la muestra para cada clase en el modelo, donde las clases se ordenan como están en self.classes_.

predict_proba()

Estimaciones de probabilidad.

Las estimaciones devueltas para todas las clases están ordenadas por la etiqueta de las clases.

Para un problema multi_class, si multi_class está establecido como «multinomial» se utiliza la función softmax para encontrar la probabilidad predicha de cada clase. De lo contrario, se utiliza un enfoque de uno contra el resto, es decir, se calcula la probabilidad de cada clase asumiendo que es positiva utilizando la función logística y se normalizan estos valores en todas las clases.

Parámetros
Xarray-like de forma (n_samples, n_features)

Vector a ser puntuado, donde n_samples es el número de muestras y n_features es el número de características.

Devuelve
Tarray-like de forma (n_samples, n_classes)

Devuelve la probabilidad de la muestra para cada clase en el modelo, donde las clases se ordenan como están en self.classes_.

score()

Devuelve la precisión media en los datos de prueba y las etiquetas dadas.

En la clasificación multietiqueta, se trata de la precisión del subconjunto, que es una métrica rigurosa, ya que se requiere para cada muestra que cada conjunto de etiquetas sea predicho correctamente.

Parámetros
Xarray-like de forma (n_samples, n_features)

Muestras de prueba.

yarray-like de forma (n_samples,) o (n_samples, n_outputs)

Etiquetas verdaderas para X.

sample_weightarray-like de forma (n_samples,), default=None

Ponderaciones de muestras.

Devuelve
scorefloat

Precisión media de self.predict(X) con respecto a y.

set_params()

Establece los parámetros de este estimador.

El método funciona tanto en estimadores simples como en objetos anidados (como Pipeline). Estos últimos tienen parámetros de la forma <component>__<parameter> para que sea posible actualizar cada componente de un objeto anidado.

Parámetros
**paramsdict

Parámetros del estimador.

Devuelve
selfinstancia del estimador

Instancia del estimador.

sparsify()

Convierte la matriz de coeficientes en formato disperso.

Convierte el miembro coef_ en una matriz scipy.sparse, que para los modelos L1-regularizados puede ser mucho más eficiente en cuanto a memoria y almacenamiento que la representación numpy.ndarray habitual.

El miembro intercept_ no se convierte.

Devuelve
self

Estimador ajustado.

Notas

Para los modelos no dispersos, es decir, cuando no hay muchos ceros en coef_, esto puede en realidad aumentar el uso de la memoria, así que utiliza este método con cuidado. Una regla general es que el número de elementos cero, que puede ser calculado con (coef_ == 0).sum(), debe ser más del 50% para que esto proporcione beneficios significativos.

Después de llamar a este método, el ajuste posterior con el método partial_fit (si lo hay) no funcionará hasta que llames a densify.

Ejemplos utilizando sklearn.linear_model.LogisticRegression