sklearn.linear_model
.SGDClassifier¶
- class sklearn.linear_model.SGDClassifier¶
Clasificadores lineales (SVM, regresión logística, etc.) con entrenamiento SGD.
Este estimador implementa modelos lineales regularizados con aprendizaje de descenso de gradiente estocástico (SGD): el gradiente de la pérdida se estima cada muestra a la vez y el modelo se actualiza a lo largo del camino con un programa de fuerza decreciente (aka tasa de aprendizaje). El SGD permite el aprendizaje por minilotes (en línea y fuera del núcleo) mediante el método
partial_fit
. Para obtener los mejores resultados con la tasa de aprendizaje predeterminada, los datos deben tener media cero y varianza unitaria.Esta implementación funciona con datos representados como arreglos densos o dispersos de valores de punto flotante para las características. El modelo que ajusta se puede controlar con el parámetro de pérdida; por defecto, ajusta una máquina de vectores de soporte lineal (SVM).
El regularizador es una penalización añadida a la función de pérdida que encoge los parámetros del modelo hacia el vector cero utilizando la norma euclidiana cuadrada L2 o la norma absoluta L1 o una combinación de ambas (red elástica). Si la actualización de los parámetros cruza el valor 0.0 debido al regularizador, la actualización se trunca a 0.0 para permitir el aprendizaje de modelos dispersos y lograr la selección de características en línea.
Más información en el Manual de usuario.
- Parámetros
- losscadena de caracteres, default=”hinge”
La función de pérdida a utilizar. Por defecto es “hinge”, que da un SVM lineal.
Las opciones posibles son “hinge”, “log”, “modified_huber”, “squared_hinge”, “perceptron”, o una pérdida de regresión: “squared_loss”, “huber”, “epsilon_insensitive”, o “squared_epsilon_insensitive”.
La pérdida “log” proporciona una regresión logística, un clasificador probabilístico. “modified_huber” es otra pérdida suave que aporta tolerancia a los valores atípicos, así como a las estimaciones de probabilidad. “squared_hinge” es como hinge pero se penaliza cuadráticamente. “perceptron” es la pérdida lineal utilizada por el algoritmo perceptrón. Las otras pérdidas están diseñadas para la regresión, pero también pueden ser útiles en la clasificación; consulta
SGDRegressor
para una descripción.Puedes encontrar más detalles sobre las fórmulas de pérdidas en la Manual de usuario.
- penalty{“l2”, “l1”, “elasticnet”}, default=”l2”
La penalización (término de regularización) que se utilizará. Por defecto es “l2” que es el regularizador estándar para los modelos SVM lineales. l1” y “elasticnet” pueden aportar una dispersión al modelo (selección de características) que no se consigue con “l2”.
- alphafloat, default=0.0001
Constante que multiplica el término de regularización. Cuanto mayor sea el valor, más fuerte será la regularización. También se utiliza para calcular la tasa de aprendizaje cuando se establece en
learning_rate
se establece en “optimal”.- l1_ratiofloat, default=0.15
El parámetro de mezcla de la red elástica, con 0 <= l1_ratio <= 1. l1_ratio=0 corresponde a la penalización L2, l1_ratio=1 a la L1. Sólo se utiliza si
penalty
es “elasticnet”.- fit_interceptbool, default=True
Si el intercepto debe ser estimado o no. Si es False, se asume que los datos ya están centrados.
- max_iterentero, default=1000
El número máximo de pasadas sobre los datos de entrenamiento (también conocido como épocas o epochs). Sólo afecta al comportamiento del método
fit
, y no al métodopartial_fit
.Nuevo en la versión 0.19.
- tolfloat, default=1e-3
El criterio de parada. Si no es None, el entrenamiento se detendrá cuando (loss > best_loss - tol) para
n_iter_no_change
épocas consecutivas.Nuevo en la versión 0.19.
- shufflebool, default=True
Si los datos de entrenamiento deben ser aleatorizados o no después de cada época.
- verboseint, default=0
Nivel de verbosidad.
- epsilonfloat, default=0.1
Epsilon en las funciones de pérdida insensibles a epsilon; sólo si
loss
es “huber”, “epsilon_insensitive”, o “squared_epsilon_insensitive”. En el caso de “huber”, determina el umbral a partir del cual es menos importante acertar la predicción. En el caso de insensible a épsilon, cualquier diferencia entre la predicción actual y la etiqueta correcta se ignora si es menor que este umbral.- n_jobsint, default=None
El número de CPUs a utilizar para realizar el cálculo OVA (Uno Contra Todos, One Versus All, para problemas multiclase).
None
significa 1 a menos que esté en un contextojoblib.parallel_backend
.-1
significa utilizar todos los procesadores. Ver Glosario para más detalles.- random_stateint, RandomState instance, default=None
Se utiliza para barajar los datos, cuando
shuffle
se establece enTrue
. Pase un int para una salida reproducible a través de múltiples llamadas a la función. Consulta Glosario.- learning_ratestr, default=”optimal”
El programa de la tasa de aprendizaje:
“constant”:
eta = eta0
“optimal”:
eta = 1.0 / (alpha * (t + t0))
donde t0 se elige mediante una heurística propuesta por Leon Bottou.“invscaling”:
eta = eta0 / pow(t, power_t)
“adaptive”: eta = eta0, siempre que el entrenamiento siga disminuyendo. Cada vez que n_iter_no_change consecutivo no consigue disminuir la pérdida asociada al entrenamiento en tol o no consigue aumentar la puntuación de validación en tol si early_stopping es True, la tasa de aprendizaje actual se divide por 5.
Nuevo en la versión 0.20: Added “adaptive” option
- eta0double, default=0.0
La tasa de aprendizaje inicial para los programas “constant”, “invscaling” o “adaptive”. El valor por defecto es 0.0 ya que eta0 no es utilizado por el programa por defecto “optimal”.
- power_tdouble, default=0.5
El exponente de la tasa de aprendizaje de escala inversa [por defecto 0.5].
- early_stoppingbool, default=False
Si se utiliza la parada temprana para terminar el entrenamiento cuando la puntuación de validación no está mejorando. Si se establece como True, se apartará automáticamente una fracción estratificada de los datos de entrenamiento como validación y terminará el entrenamiento cuando la puntuación de validación devuelta por el método
score
no mejore en al menos tol para n_iter_no_change épocas consecutivas.Nuevo en la versión 0.20: Opción “early_stopping” añadida
- validation_fractionfloat, default=0.1
La proporción de los datos de entrenamiento que se reservan como conjunto de validación para la parada anticipada. Debe estar entre 0 y 1. Sólo se utiliza si
early_stopping
es True.Nuevo en la versión 0.20: Opción “validation_fraction” añadida
- n_iter_no_changeint, default=5
Número de iteraciones sin mejora que hay que esperar antes de la parada anticipada.
Nuevo en la versión 0.20: Opción “n_iter_no_change” añadida
- class_weightdict, {class_label: weight} or «balanced», default=None
Preajuste para el parámetro de ajuste class_weight.
Ponderación asociada a las clases. 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 inversamente proporcionales a las frecuencias de clase en los datos de entrada como
n_samples / (n_classes * np.bincount(y))
.- warm_startbool, default=False
Cuando se establece a True, reutiliza la solución de la llamada anterior para ajustar como inicialización, de lo contrario, solamente borrará la solución anterior. Ver Glosario.
Llamar repetidamente a fit o partial_fit cuando warm_start es True puede dar lugar a una solución diferente que cuando se llama a fit una sola vez debido a la forma en que se revolver los datos. Si se utiliza una tasa de aprendizaje dinámico, la tasa de aprendizaje se adapta en función del número de muestras ya vistas. Llamar a
fit
reinicia este contador, mientras quepartial_fit
resultará en el aumento del contador existente.- averagebool o int, default=False
Si se establece como True, calcula el promedio de los ponderados SGD en todas las actualizaciones y almacena el resultado en el atributo
coef_
. Si se establece como un int mayor que 1, el promedio comenzará una vez que el número total de muestras vistas alcance elaverage
. Así,average=10
se empieza a promediar después de ver 10 muestras.
- Atributos
- coef_ndarray de forma (1, n_features) si n_classes == 2 de lo contrario (n_classes, n_features)
Ponderaciones asignadas a las características.
- intercept_ndarray de forma (1,) si n_classes == 2 de lo contrario (n_classes,)
Constantes en la función de decisión.
- n_iter_int
El número real de iteraciones antes de alcanzar el criterio de parada. Para los ajustes multiclase, es el máximo sobre cada ajuste binario.
- loss_function_concreto
- classes_arreglo de forma (n_classes,)
- t_int
Número de actualizaciones de ponderación realizadas durante el entrenamiento. Igual que
(n_iter_ * n_samples)
.
Ver también
sklearn.svm.LinearSVC
Clasificación lineal de vectores de soporte.
LogisticRegression
Regresión logística.
Perceptron
Hereda de SGDClassifier.
Perceptron()
es equivalente aSGDClassifier(loss="perceptron", eta0=1, learning_rate="constant", penalty=None)
.
Ejemplos
>>> import numpy as np >>> from sklearn.linear_model import SGDClassifier >>> from sklearn.preprocessing import StandardScaler >>> from sklearn.pipeline import make_pipeline >>> X = np.array([[-1, -1], [-2, -1], [1, 1], [2, 1]]) >>> Y = np.array([1, 1, 2, 2]) >>> # Always scale the input. The most convenient way is to use a pipeline. >>> clf = make_pipeline(StandardScaler(), ... SGDClassifier(max_iter=1000, tol=1e-3)) >>> clf.fit(X, Y) Pipeline(steps=[('standardscaler', StandardScaler()), ('sgdclassifier', SGDClassifier())]) >>> print(clf.predict([[-0.8, -1]])) [1]
Métodos
Predecir las puntuaciones de confianza de las muestras.
Convierte la matriz de coeficientes en formato de arreglo denso.
Ajustar el modelo lineal con el Descenso Gradiente Estocástico.
Obtiene los parámetros para este estimador.
Realiza una época de descenso de gradiente estocástico en las muestras dadas.
Predice las etiquetas de clase para las muestras en X.
Devuelve la precisión media en los datos de prueba y las etiquetas dados.
Establecer y validar los parámetros del estimador.
Convierte la matriz de coeficientes en formato disperso.
- decision_function()¶
Predecir 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 (muestra, clase). 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 sparsified; de lo contrario, es un no-op.- Devuelve
- self
Estimador ajustado.
- fit()¶
Ajustar el modelo lineal con el Descenso Gradiente Estocástico.
- Parámetros
- X{array-like, sparse matrix}, forma (n_samples, n_features)
Datos de entrenamiento.
- yndarray de forma (n_samples,)
Valores objetivo.
- coef_initndarray de forma (n_classes, n_features), default=None
Los coeficientes iniciales para iniciar la optimización en caliente.
- intercept_initndarray de forma (n_classes,), default=None
La intercepción inicial la optimización en caliente.
- sample_weightarray-like, forma (n_samples,), default=None
Ponderaciones aplicadas a las muestras individuales. Si no se proporciona, se asumen ponderados uniformes. Estas ponderaciones se multiplicarán por el peso de la clase (pasado a través del constructor) si se especifica el peso de la clase.
- Devuelve
- self :
Devuelve una instancia de sí misma.
- 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 sub objetos contenidos que son estimadores.
- Devuelve
- paramsdict
Nombres de parámetros mapeados a sus valores.
- partial_fit()¶
Realiza una época de descenso de gradiente estocástico en las muestras dadas.
Internamente, este método utiliza
max_iter = 1
. Por lo tanto, no se garantiza que se alcance un mínimo de la función de coste después de llamarlo una vez. Cuestiones como la convergencia del objetivo y la parada anticipada deben ser manejadas por el usuario.- Parámetros
- X{array-like, sparse matrix}, forma (n_samples, n_features)
Subconjunto de los datos de entrenamiento.
- yndarray de forma (n_samples,)
Subconjunto de los valores objetivos.
- classesndarray de forma (n_classes,), default=None
Clases a través de todas las llamadas a partial_fit. Puede obtenerse mediante
np.unique(y_all)
, donde y_all es el vector objetivo de todo el conjunto de datos. Este argumento es necesario para la primera llamada a partial_fit y puede omitirse en las siguientes. Tenga en cuenta que no es necesario que y contenga todas las etiquetas declasses
.- sample_weightarray-like, forma (n_samples,), default=None
Ponderaciones aplicadas a las muestras individuales. Si no se proporciona, se suponen ponderados uniformes.
- Devuelve
- self :
Devuelve una instancia de sí misma.
- 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.
- property predict_log_proba¶
Registro de estimaciones de probabilidad.
Este método sólo está disponible para la pérdida de registro y la pérdida de Huber modificada.
Cuando loss=»modified_huber», las estimaciones de probabilidad pueden ser ceros y unos enteros, por lo que no es posible tomar el logaritmo.
Ver
predict_proba
para más detalles.- Parámetros
- X{array-like, sparse matrix} de forma (n_samples, n_features)
Datos de entrada para predicción.
- Devuelve
- Tarray-like, forma (n_samples, n_classes)
Devuelve la probabilidad logarítmica de la muestra para cada clase en el modelo, donde las clases están ordenadas como lo están en
self.classes_
.
- property predict_proba¶
Estimaciones de probabilidad.
Este método sólo está disponible para la pérdida de registro y la pérdida de Huber modificada.
Las estimaciones de probabilidad multiclase se derivan de las estimaciones binarias (uno contra resto) mediante una simple normalización, como recomiendan Zadrozny y Elkan.
Las estimaciones de probabilidad binarias para loss=»modified_huber» vienen dadas por (clip(decision_function(X), -1, 1) + 1) / 2. Para otras funciones de pérdida es necesario realizar una calibración de probabilidad adecuada envolviendo el clasificador con
CalibratedClassifierCV
en su lugar.- Parámetros
- X{array-like, sparse matrix}, forma (n_samples, n_features)
Datos de entrada para predicción.
- Devuelve
- ndarray 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_
.
Referencias
Zadrozny and Elkan, «Transforming classifier scores into multiclass probability estimates», SIGKDD’02, http://www.research.ibm.com/people/z/zadrozny/kdd2002-Transf.pdf
The justification for the formula in the loss=»modified_huber» case is in the appendix B in: http://jmlr.csail.mit.edu/papers/volume2/zhang02c/zhang02c.pdf
- score()¶
Devuelve la precisión media en los datos de prueba y las etiquetas dados.
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,) or (n_samples, n_outputs)
Etiquetas verdaderas para
X
.- sample_weightarray-like de forma (n_samples,), default=None
Ponderados de muestras.
- Devuelve
- scorefloat
Precisión media de
self.predict(X)
con respecto ay
.
- set_params()¶
Establecer y validar los parámetros del estimador.
- Parámetros
- **kwargsdict
Parámetros del estimador.
- Devuelve
- selfobject
Instancia de 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 utilice 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.