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 contextojoblib.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 sipenalty='elasticnet'
. Establecerl1_ratio=0
es equivalente a utilizarpenalty='l2'
, mientras que establecerl1_ratio=1
es equivalente a utilizarpenalty='l1'
. Para0 < 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, cuandomulti_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, cuandomulti_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
. Ahoran_iter_
presentará como máximomax_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
- 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
Predice las puntuaciones de confianza de las muestras.
Convierte la matriz de coeficientes en formato de arreglo denso.
Ajusta el modelo según los datos de entrenamiento dados.
Obtiene los parámetros para este estimador.
Predice las etiquetas de clase para las muestras en X.
Predice el logaritmo de las estimaciones de probabilidad.
Estimaciones de probabilidad.
Devuelve la precisión media en los datos de prueba y las etiquetas dadas.
Establece los parámetros de este estimador.
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 decoef_
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 yn_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 yn_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 ay
.
- 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.