Glosario de Términos Comunes y Elementos de la API¶
Este glosario espera representar definitivamente las convenciones tácitas y explícitas aplicadas en scikit-learn y su API, proporcionando al mismo tiempo una referencia para los usuarios y colaboradores. Su objetivo es describir los conceptos y detallar su correspondiente API o bien enlazar con otras partes relevantes de la documentación que lo hagan. Al enlazar con las entradas de glosario de la Referencia de la API y la Guía de Usuario, podemos minimizar la redundancia y la inconsistencia.
Empezamos por listar los conceptos generales (y cualquiera que no encajaba en otra parte), pero conjuntos más específicos de términos relacionados se listan a continuación: APIs de Clase y Tipos de Estimadores, Tipos de Objetivos, Métodos, Parámetros, Atributos, Datos y propiedades de la muestra.
Conceptos Generales¶
- 1D¶
- Arreglo 1D¶
Un arreglo unidimensional. Un arreglo NumPy cuyo
.shape
tiene longitud 1. Un vector.- 2D¶
- Arreglo 2D¶
Un arreglo bidimensional. Un arreglo NumPy cuyo
.shape
tiene longitud 2. A menudo representa una matriz.- API¶
Se refiere tanto a las interfaces específicas para los estimadores implementados en scikit-learn como a las convenciones generalizadas entre los tipos de estimadores, tal como se describe en este glosario y se resume en la documentación de los colaboradores.
Las interfaces específicas que constituyen la API pública de scikit-learn están ampliamente documentadas en Referencia de la API. Sin embargo, consideramos menos formalmente cualquier cosa como API pública si ninguno de los identificadores requeridos para acceder a ella comienza con
_
. En general, tratamos de mantener compatibilidad con versiones anteriores para todos los objetos en la API pública.La API privada, incluyendo funciones, módulos y métodos que empiezan por
_
no tienen garantizada su estabilidad.- array-like¶
El formato de datos más común de entrada a los estimadores y funciones de Scikit-learn, array-like es cualquier tipo objeto para el que
numpy.asarray
producirá un arreglo de forma apropiada (normalmente de 1 o 2 dimensiones) de dtype apropiado (normalmente numérico).Esto incluye:
un arreglo numpy
una lista de números
una lista de listas de números de longitud-k para alguna longitud fija k
una
pandas.DataFrame
con todas las columnas numéricasuna
pandas.Series
numérica
Excluye:
una matriz dispersa
un iterador
un generador
Ten en cuenta que las salidas de los estimadores y funciones de scikit-learn (por ejemplo, las predicciones) deben ser generalmente arreglos o matrices dispersas, o listas de las mismas (como en
predict_proba
detree.DecisionTreeClassifier
de salida múltiple). Un estimador en el quepredict()
devuelve una lista o unapandas.Series
no es válido.- atributo¶
- atributos¶
La mayoría de las veces utilizamos atributo para referirnos a cómo se almacena la información del modelo en un estimador durante el ajuste. Cualquier atributo público almacenado en una instancia del estimador debe empezar con un carácter alfabético y terminar con un solo guión bajo si se establece en fit o partial_fit. Esto es lo que se encuentra en la documentación Atributos de un estimador. La información almacenada en los atributos suele ser: estadísticos suficientes utilizados para la predicción o la transformación; salidas transductivas como labels_ o embedding_; o datos de diagnóstico, como feature_importances_. Los atributos comunes se listan a continuación.
Un atributo público puede tener el mismo nombre que un parámetro del constructor, con un
_
añadido. Se utiliza para almacenar una versión validada o estimada de la entrada del usuario. Por ejemplo,decomposition.PCA
se construye con un parámetron_components
. A partir de esto, junto con otros parámetros y los datos, PCA estima el atributon_components_
.También pueden establecerse otros atributos privados utilizados en la predicción/transformación/etc. durante el ajuste. Estos empiezan con un solo guión bajo y no se asegura que sean estables para el acceso público.
Un atributo público en una instancia del estimador que no termine en un guión bajo debe ser el valor almacenado y no modificado de un parámetro
__init__
del mismo nombre. Debido a esta equivalencia, se agregan en la documentación de Parámetros de un estimador.- compatibilidad con versiones anteriores¶
Por lo general, intentamos mantener la compatibilidad con versiones anteriores (es decir, las interfaces y los comportamientos pueden ampliarse, pero no modificarse ni eliminarse) de una versión a otra, pero esto tiene algunas excepciones:
- Solamente API pública
El comportamiento de los objetos a los que se accede a través de identificadores privados (los que empiezan por
_
) puede cambiar arbitrariamente entre versiones.- Como está documentado
Por lo general, asumiremos que los usuarios se han ceñido a los tipos y rangos de parámetros documentados. Si la documentación pide una lista y el usuario proporciona una tupla, no garantizamos un comportamiento consistente de una versión a otra.
- Obsolescencia
Los comportamientos pueden cambiar tras un periodo de obsolescencia (normalmente de dos versiones). Las advertencias se emiten utilizando el módulo
warnings
de Python.- Argumentos de palabras clave
A veces podemos suponer que todos los parámetros opcionales (que no sean X e y para fit y métodos similares) se pasan sólo como argumentos de palabra clave y pueden ser reordenados posicionalmente.
- Corrección de errores y mejoras
Las correcciones de errores y -menos a menudo- las mejoras pueden cambiar el comportamiento de los estimadores, incluyendo las predicciones de un estimador entrenado con los mismos datos y random_state. Cuando esto ocurre, intentamos indicarlo claramente en el registro de cambios.
- Serialización
No aseguramos que el pickling de un estimador en una versión permita que sea unpickled a un modelo equivalente en la versión siguiente. (En el caso de los estimadores del paquete sklearn, emitimos una advertencia cuando se intenta realizar este unpickling, incluso si es posible que funcione). Ver Limitaciones de seguridad y mantenimiento.
utils.estimator_checks.check_estimator
Proporcionamos garantías limitadas de compatibilidad con versiones anteriores para las comprobaciones de los estimadores: podemos añadir requisitos adicionales a los estimadores probados con esta función, normalmente cuando éstos se asumían de manera informal pero no se probaban formalmente.
A pesar de este contrato informal con nuestros usuarios, el software se proporciona tal cual, tal como se indica en la licencia. Cuando una versión introduce inadvertidamente cambios que no son compatibles con las versiones anteriores, estos se conocen como regresiones de software.
- invocable¶
Una función, una clase o un objeto que implementa el método
__call__
; cualquier cosa que devuelva True cuando sea el argumento de callable().- característica categórica¶
Una característica categórica o nominal es aquella que tiene un conjunto finito de valores discretos en la población de datos. Normalmente se representan como columnas de enteros o cadenas. Las cadenas serán rechazadas por la mayoría de los estimadores de scikit-learn, y los enteros serán tratados como ordinales o valores de conteo. Para el uso con la mayoría de los estimadores, las variables categóricas deben ser codificadas one-hot. Algunas excepciones notables son los modelos basados en árboles, como los modelos de bosques aleatorios y de potenciación del gradiente, que suelen funcionar mejor y más rápido con variables categóricas codificadas con números enteros.
OrdinalEncoder
ayuda a codificar las características categóricas con valores de cadena como enteros ordinales, yOneHotEncoder
puede utilizarse para codificar one-hot las características categóricas. Véase también Codificación de características categóricas y el paquete categorical-encoding para las herramientas relacionadas con la codificación de características categóricas.- clonar¶
- clonado¶
Para copiar una instancia del estimador y crear una nueva con parámetros idénticos, pero sin atributos ajustados, utilizando
clone
.Cuando se llama a
fit
, un meta-estimator normalmente clona una instancia de estimador wrapped antes de ajustar la instancia clonada. (Las excepciones, por razones de legado, incluyenPipeline
yFeatureUnion
.)Si el parámetro
random_state
del estimador es un entero (o si el estimador no tiene un parámetrorandom_state
), se devuelve un clon exacto: el clon y el estimador original darán exactamente los mismos resultados. En caso contrario, se devuelve un clon estadístico: el clon puede dar resultados diferentes a los del estimador original. Puedes encontrar más detalles en Control de aleatoriedad.- tests comunes¶
Esto se refiere a las pruebas que se ejecutan en casi todas las clases de estimadores en scikit-learn para comprobar que cumplen con las convenciones básicas de la API. Están disponibles para uso externo a través de
utils.estimator_checks.check_estimator
, con la mayor parte de la implementación ensklearn/utils/estimator_checks.py
.Nota: Algunas excepciones al régimen común de pruebas son actualmente de codificación fija en la biblioteca, pero esperamos reemplazar esto marcando comportamientos excepcionales en el estimador usando etiquetas del estimador (semánticas).
- obsolescencia¶
Usamos la obsolescencia para violar lentamente nuestras garantías de compatibilidad con versiones anteriores, generalmente para:
cambiar el valor por defecto de un parámetro; o
eliminar un parámetro, atributo, método, clase, etc.
Normalmente emitiremos una advertencia cuando se utilice un elemento obsoleto aunque puede haber limitaciones en este sentido. Por ejemplo, emitiremos una advertencia cuando alguien establezca un parámetro que haya sido obsoleto, pero puede que no lo hagamos cuando accedan al atributo de ese parámetro en la instancia del estimador.
Ver la Guía de Colaboradores.
- dimensionalidad¶
Puede usarse para referirse al número de características (es decir, n_features), o de columnas en una matriz de características 2D. Sin embargo, las dimensiones también se utilizan para referirse a la longitud de la forma de un arreglo NumPy, distinguiendo un arreglo 1D de una matriz 2D.
- cadena de documentación¶
La documentación incrustada para un módulo, clase, función, etc., normalmente en el código como una cadena al principio de la definición del objeto, y accesible como el atributo
__doc__
del objeto.Intentamos adherirnos a la PEP257, y seguir las convenciones de NumpyDoc.
- doble guión bajo¶
- notación de doble guión bajo¶
Cuando se especifican los nombres de los parámetros para los estimadores anidados, se puede utilizar
__
para separar entre padre e hijo en algunos contextos. El uso más común es cuando se establecen parámetros a través de un metaestimador con set_params y por lo tanto en la especificación de una cuadrícula de búsqueda en la búsqueda de parámetros. Ver parámetro. También se utiliza enpipeline.Pipeline.fit
para pasar propiedades muestrales a los métodosfit
de los estimadores en el pipeline.- dtype¶
- tipo de dato¶
Los arreglos de NumPy asumen un tipo de datos homogéneo en todo momento, disponible en el atributo
.dtype
de un arreglo (o matriz dispersa). Generalmente asumimos tipos de datos simples para los datos de scikit-learn: de punto flotante (float) o entero. Podemos admitir tipos de datos de objeto o de cadena para los arreglos antes de codificarlos o vectorizarlos. Nuestros estimadores no funcionan con arreglos struct, por ejemplo.Nuestra documentación puede dar a veces información sobre la precisión del dtype, por ejemplo
np.int32
,np.int64
, etc. Cuando se proporciona la precisión, se refiere al dtype de NumPy. Si se utiliza una precisión arbitraria, la documentación se referirá al dtypeinteger
ofloating
. Ten en cuenta que en este caso, la precisión puede ser dependiente de la plataforma. El dtypenumeric
se refiere a aceptar tantointeger
comofloating
.TODO: Mencionar incidencias de eficiencia y precisión; política de reparto.
- duck typing¶
Intentamos aplicar duck typing para determinar cómo manejar algunos valores de entrada (por ejemplo, comprobar si un estimador dado es un clasificador). Es decir, evitamos utilizar
isinstance
siempre que sea posible, y nos basamos en la presencia o ausencia de atributos para determinar el comportamiento de un objeto. Es necesario hacer algunas matizaciones cuando se sigue este enfoque:Para algunos estimadores, un atributo sólo puede estar disponible una vez que es ajustado. Por ejemplo, no podemos determinar a priori si predict_proba está disponible en una búsqueda en cuadrícula en la que la cuadrícula incluye la alternancia entre un predictor probabilístico y uno no probabilístico en el último paso del pipeline. A continuación, sólo podemos determinar si
clf
es probabilístico después de ajustarlo a algunos datos:>>> from sklearn.model_selection import GridSearchCV >>> from sklearn.linear_model import SGDClassifier >>> clf = GridSearchCV(SGDClassifier(), ... param_grid={'loss': ['log', 'hinge']})
Esto significa que sólo podemos comprobar los atributos duck-typed después del ajuste, y que debemos tener cuidado para que los meta estimadores sólo presenten atributos según el estado del estimador subyacente después del ajuste.
Comprobar si un atributo está presente (usando
hasattr
) es en general tan costoso como obtener el atributo (getattr
o notación de puntos). En algunos casos, obtener el atributo puede ser realmente costoso (por ejemplo, para algunas implementaciones de feature_importances_, lo que puede sugerir que se trata de un defecto de diseño de la API). Así que el código que ejecutahasattr
seguido degetattr
debe ser evitado;getattr
dentro de un bloque try-except es preferible.Para determinar algunos aspectos de las expectativas de un estimador o el soporte para alguna característica, utilizamos etiquetas del estimador en lugar de duck typing.
- parada anticipada¶
Consiste en detener un método de optimización iterativo antes de la convergencia de la pérdida asociada al entrenamiento, para evitar el sobreajuste. Por lo general, esto se hace controlando la puntuación de generalización en un conjunto de validación. Cuando está disponible, se activa a través del parámetro
early_stopping
o estableciendo un n_iter_no_change positivo.- instancia del estimador¶
A veces utilizamos esta terminología para distinguir una clase estimador de una instancia construida. Por ejemplo, en lo siguiente,
cls
es una clase estimador, mientras queest1
yest2
son instancias:cls = RandomForestClassifier est1 = cls() est2 = RandomForestClassifier()
- ejemplos¶
Intentamos dar ejemplos de uso básico para la mayoría de las funciones y clases de la API:
como doctests en sus cadenas de documentación (es decir, dentro del propio código de la biblioteca
sklearn/
).como ejemplos en la galería de ejemplos renderizada (usando sphinx-gallery) a partir de scripts en el directorio
examples/
, ejemplificando características o parámetros clave del estimador/función. Estos también deben ser referenciados desde el Manual de Usuario.a veces en el Manual de Usuario (construido a partir de
doc/
) junto a una descripción técnica del estimador.
- experimental¶
Una herramienta experimental ya es utilizable, pero su API pública, como los valores de los parámetros por defecto o los atributos ajustados, sigue estando sujeta a cambios en futuras versiones sin la habitual política de advertencias de obsolescencia.
- métrica de evaluación¶
- métricas de evaluación¶
Las métricas de evaluación dan una medida del rendimiento de un modelo. Podemos utilizar este término específicamente para referirnos a las funciones de
metrics
(sin tener en cuentametrics.pairwise
), a diferencia del método score y la API scoring utilizada en la validación-cruzada. Véase Métricas y puntuación: cuantificar la calidad de las predicciones.Estas funciones suelen aceptar una verdad fundamental (o los datos crudos en los que la métrica evalúa el agrupamiento sin una verdad fundamental) y una predicción, ya sea la salida de predict (
y_pred
), de predict_proba (y_proba
), o de una función de puntuación arbitraria incluyendo decision_function (y_score
). Las funciones suelen tener un nombre que termina con_score
si una puntuación mayor indica un modelo mejor, y_loss
si una puntuación menor indica un modelo mejor. Esta diversidad de interfaz motiva la API de puntuación.Tenga en cuenta que algunos estimadores pueden calcular métricas que no están incluidas en
metrics
y que son específicas del estimador, especialmente las verosimilitudes del modelo.Una característica propuesta (por ejemplo, #8022) por la cual las capacidades de un estimador se describen a través de un conjunto de etiquetas semánticas. Esto permitiría algunos comportamientos en tiempo de ejecución basados en la inspección del estimador, pero también permite que cada estimador se someta a las pruebas de invarianza apropiadas mientras se exceptúa de otros tests comunes.
Algunos aspectos de las etiquetas del estimador se determinan actualmente a través del duck typing de métodos como
predict_proba
y a través de algunos atributos especiales en los objetos de los estimadores:_estimator_type
¶Este atributo con valor de cadena identifica un estimador como clasificador, regresor, etc. Se establece mediante mixins como
base.ClassifierMixin
, pero debe adoptarse más explícitamente en un meta-estimator. Su valor debe comprobarse normalmente mediante un helper comobase.is_classifier
._pairwise
¶Este atributo booleano indica si los datos (
X
) pasados afit
y métodos similares consisten en medidas de pares sobre muestras en lugar de una representación de características para cada muestra. Suele serTrue
cuando un estimador tiene un parámetrometric
oaffinity
okernel
con valorprecomputed
. Su propósito principal es que cuando un meta-estimator extrae una submuestra de datos destinada a un estimador por pares, los datos necesitan ser indexados en ambos ejes, mientras que otros datos son indexados sólo en el primer eje.Obsoleto desde la versión 0.24: El atributo _pairwise queda obsoleto en 0.24. A partir de la versión 1.1 (cambio de nombre de la versión 0.26), se utilizará la etiqueta del estimador
pairwise
.
Para obtener información más detallada, ver Etiquetas de Estimador.
- característica¶
- características¶
- vector de características¶
En el resumen, una característica es una función (en su sentido matemático) que asigna un objeto muestreado a una cantidad numérica o categórica. El término «característica» también se utiliza comúnmente para referirse a estas cantidades, siendo los elementos individuales de un vector que representa una muestra. En una matriz de datos, las características se representan como columnas: cada columna contiene el resultado de aplicar una función de característica a un conjunto de muestras.
En otras partes, las características se conocen como atributos, predictores, regresores o variables independientes.
Casi todos los estimadores de scikit-learn asumen que las características son numéricas, finitas y no faltan, incluso cuando tienen dominios y distribuciones semánticamente distintas (categóricas, ordinales, de valores de conteo, de valores reales, de intervalo). Ver también característica categórica y valores faltantes.
n_features
indica el número de características de un conjunto de datos.- ajuste¶
Llamar a fit (o fit_transform, fit_predict, etc.) en un estimador.
- ajustado¶
El estado de un estimador después del ajuste.
No existe un procedimiento convencional para comprobar si un estimador está ajustado. Sin embargo, un estimador que no está ajustado:
debería emitir
exceptions.NotFittedError
cuando se llama a un método de predicción (predict, transform, etc.). (utils.validation.check_is_fitted
se utiliza internamente para este propósito).no debe tener atributos que comiencen con un carácter alfabético y termine con un guión bajo. (Ten en cuenta que un descriptor para el atributo todavía puede estar presente en la clase, pero hasattr debe devolver False).
- función¶
Proporcionamos interfaces de funciones ad hoc para muchos algoritmos, mientras que las clases de estimator proporcionan una interfaz más consistente.
En particular, scikit-learn puede proporcionar una interfaz de función que ajusta un modelo a algunos datos y devuelve los parámetros del modelo entrenado, como en
linear_model.enet_path
. Para los modelos transductivos, también devuelve las etiquetas de embedding o de conglomerado, como enmanifold.spectral_embedding
ocluster.dbscan
. Muchos transformadores de preprocesamiento también proporcionan una interfaz de función, similar a la llamada a fit_transform, como enpreprocessing.maxabs_scale
. Los usuarios deben tener cuidado de evitar fuga de datos cuando hagan uso de estas funciones equivalentes afit_transform
.No tenemos una política estricta sobre cuándo proporcionar o no formas de función de los estimadores, pero los encargados del mantenimiento considerar la coherencia con las interfaces existentes, y si proporcionar una función podría apartar a los usuarios de las mejores prácticas (en lo que respecta a la fuga de datos, etc.).
- galería¶
Ver ejemplos.
- hiperparámetro¶
- hiper-parámetro¶
Ver parámetro.
- imputar¶
- imputación¶
La mayoría de los algoritmos de aprendizaje automático requieren que sus entradas no tengan valores faltantes, y no funcionarán si se viola este requisito. Los algoritmos que intentan rellenar (o imputar) los valores faltantes se denominan algoritmos de imputación.
- indexable¶
Un array-like, matriz dispersa, DataFrame de pandas o secuencia (generalmente una lista).
- inducción¶
- inductivo¶
El aprendizaje automático inductivo (en contraste con transductivo) construye un modelo de algunos datos que luego puede aplicarse a nuevas instancias. La mayoría de los estimadores en scikit-learn son inductivos, con métodos predict y/o transform.
- joblib¶
Una biblioteca de Python (https://joblib.readthedocs.io) utilizada en scikit-learn para facilitar el paralelismo simple y el almacenamiento en caché. Joblib está orientada a trabajar eficientemente con arreglos de numpy, por ejemplo mediante el uso de mapeo de memoria. Ver Paralelismo para más información.
- matriz indicadora de etiqueta¶
- matriz indicatriz multietiqueta¶
- matrices indicatrices multietiqueta¶
El formato utilizado para representar datos multietiqueta, en el que cada fila de un arreglo 2D o matriz dispersa corresponde a una muestra, cada columna corresponde a una clase, y cada elemento es 1 si la muestra está etiquetada con la clase y 0 si no es así.
- fuga¶
- fuga de datos¶
Un problema en la validación cruzada en el que el rendimiento de la generalización puede sobreestimarse ya que el conocimiento de los datos de prueba se incluyó inadvertidamente en el entrenamiento de un modelo. Este es un riesgo, por ejemplo, cuando se aplica un transformador a la totalidad de un conjunto de datos en lugar de a cada porción de entrenamiento en una división de validación-cruzada.
Nuestro objetivo es proporcionar interfaces (como
pipeline
ymodel_selection
) que protejan al usuario de la fuga de datos.- mapeo de mem¶
- mapa de memoria¶
- mapeo de memoria¶
Una estrategia de eficiencia de memoria que mantiene los datos en el disco en lugar de copiarlos en la memoria principal. Los mapas de memoria pueden ser creados para arreglos que pueden ser leídos, escritos, o ambos, usando
numpy.memmap
. Cuando se utiliza joblib para paralelizar las operaciones en scikit-learn, se pueden crear automáticamente mapas de memoria para arreglos grandes para reducir la sobrecarga de duplicación de memoria en el multiprocesamiento.- valores faltantes¶
La mayoría de los estimadores de scikit-learn no trabajan con valores faltantes. Cuando lo hacen (por ejemplo, en
impute.SimpleImputer
), NaN es la representación preferida de los valores faltantes en los arreglos de punto flotante (float). Si el arreglo tiene un dtype entero, NaN no se puede representar. Por esta razón, apoyamos la especificación de otro valormissing_values
cuando la imputación o el aprendizaje se puede realizar en el espacio de enteros. Los datos no etiquetados son un caso especial de valores faltantes en el objetivo.n_features
¶El número de características.
n_outputs
¶n_samples
¶El número de muestras.
n_targets
¶Sinónimo de n_outputs.
- documentos narrativos¶
- documentación narrativa¶
Un alias para Manual de Usuario, es decir, la documentación escrita en
doc/modules/
. A diferencia de la Referencia de la API proporcionada a través de cadenas de documentación, el Manual de Usuario tiene como objetivo:agrupa las herramientas proporcionadas por scikit-learn de forma temática o en términos de uso;
dar motivos de por qué alguien utilizaría cada herramienta en particular, a menudo mediante la comparación;
proporciona descripciones tanto intuitivas como técnicas de las herramientas;
proporciona o enlaza con ejemplos de uso de las características clave de una herramienta.
- np¶
Una abreviatura de Numpy debido a la declaración de importación convencional:
import numpy as np
- aprendizaje en línea¶
Donde un modelo se actualiza de forma iterativa recibiendo cada lote de objetivos de verdad fundamental poco después de hacer predicciones sobre el lote de datos correspondiente. Intrínsecamente, el modelo debe ser utilizable para la predicción después de cada lote. Ver partial_fit.
- fuera del núcleo¶
Una estrategia de eficiencia en la que no se almacenan todos los datos en la memoria principal a la vez, normalmente realizando el aprendizaje en lotes de datos. Ver partial_fit.
- salidas¶
Variables escalares/categóricas individuales por muestra en el objetivo. Por ejemplo, en la clasificación multietiqueta cada etiqueta posible corresponde a una salida binaria. También se denominan respuestas, tareas u objetivos. Ver multiclase multisalida y salida múltiple continua.
- par¶
Una tupla de longitud dos.
- parámetro¶
- parámetros¶
- param¶
- params¶
La mayoría de las veces utilizamos parámetro para referirnos a los aspectos de un estimador que pueden especificarse en su construcción. Por ejemplo,
max_depth
yrandom_state
son parámetros deRandomForestClassifier
. Los parámetros del constructor de un estimador se almacenan sin modificar como atributos en la instancia del estimador, y convencionalmente empiezan con un carácter alfabético y terminan con un carácter alfanumérico. Los parámetros del constructor de cada estimador se describen en la cadena de documentación del estimador.No utilizamos parámetros en el sentido estadístico, en el que los parámetros son valores que especifican un modelo y pueden estimarse a partir de los datos. Lo que llamamos parámetros podría ser lo que los estadísticos llaman hiperparámetros del modelo: aspectos para configurar la estructura del modelo que a menudo no se aprenden directamente de los datos. Sin embargo, nuestros parámetros también se utilizan para prescribir operaciones de modelado que no afectan al modelo entrenado, como n_jobs para controlar el paralelismo.
Cuando se habla de los parámetros de un meta-estimador, también se pueden incluir los parámetros de los estimadores incluidos (wrapped) en el meta-estimador. Normalmente, estos parámetros anidados se denotan utilizando un doble guión bajo (
__
) para separar entre el estimador-como-parámetro y su parámetro. Así,clf = BaggingClassifier(base_estimator=DecisionTreeClassifier(max_depth=3))
tiene un parámetro de profundidadbase_estimator__max_depth
con valor3
, al que se puede acceder conclf.base_estimator.max_depth
oclf.get_params()['base_estimator__max_depth']
.La lista de parámetros y sus valores actuales pueden recuperarse de una instancia del estimador utilizando su método get_params.
Entre la construcción y el ajuste, los parámetros pueden modificarse utilizando set_params. Para permitir esto, los parámetros no se validan o modifican normalmente cuando se construye el estimador, o cuando se establece cada parámetro. La validación de los parámetros se realiza cuando se llama a fit.
Los parámetros comunes están listados abajo.
- métrica por pares¶
- métricas por pares¶
En su sentido más amplio, una métrica por pares define una función para medir la similitud o disimilitud entre dos muestras (cada una de las cuales se representa normalmente como un vector de características). En particular, proporcionamos implementaciones de métricas de distancia (así como métricas impropias como la Distancia Coseno) a través de
metrics.pairwise_distances
, y de funciones núcleo (una clase restringida de funciones de similitud) enmetrics.pairwise_kernels
. Éstas pueden calcular matrices de distancia por pares que son simétricas y, por tanto, almacenan datos de forma redundante.Ver también precalculado y metric.
Ten en cuenta que para la mayoría de las métricas de distancia, dependemos de las implementaciones de
scipy.spatial.distance
, pero podemos reimplementarlas por eficiencia en nuestro contexto. El móduloneighbors
también duplica algunas implementaciones de métricas para su integración con estructuras de datos de búsqueda de árboles binarios eficientes.- pd¶
Una abreviatura de Pandas debido a la declaración de importación convencional:
import pandas as pd
- precalculado¶
Donde los algoritmos dependen de métricas por pares, y pueden calcularse sólo a partir de las métricas por pares, a menudo permitimos al usuario especificar que el X proporcionado ya está en el espacio de (des)similitud por pares, en lugar de en un espacio de características. Es decir, cuando se pasa a fit, es una matriz cuadrada y simétrica, en la que cada arreglo indica la (des)similitud con cada muestra, y cuando se pasa a los métodos de predicción/transformación, cada fila corresponde a una muestra de prueba y cada columna a una muestra de entrenamiento.
El uso de X precalculado suele indicarse estableciendo un parámetro
metric
,affinity
okernel
con la cadena “precomputed”. Si este es el caso, el estimador debe establecer la etiqueta del estimadorpairwise
como True.- rectangular¶
Los datos que pueden representarse como una matriz con muestras en el primer eje y un conjunto fijo y finito de características en el segundo se denominan rectangulares.
Este término excluye las muestras con estructuras no vectoriales, como un texto, una imagen de tamaño arbitrario, una serie de tiempo de longitud arbitraria, un conjunto de vectores, etc. El propósito de un vectorizador es producir formas rectangulares de tales datos.
- muestra¶
- muestras¶
Solemos utilizar este término como sustantivo para indicar un único vector de características. En otras partes, una muestra se denomina instancia, punto de datos u observación.
n_samples
indica el número de muestras de un conjunto de datos, siendo el número de filas de un arreglo de datos X.- propiedad de la muestra¶
- propiedades muestrales¶
Una propiedad de la muestra se refiere a los datos de cada muestra (por ejemplo, un arreglo de longitud n_samples) que se pasa a un método de estimación o a una función similar, junto con, pero distinto de, características (
X
) y objetivo (y
). El ejemplo más destacado es sample_weight; ver otros en Datos y propiedades de la muestra.A partir de la versión 0.19 no tenemos un enfoque consistente para manejar las propiedades muestrales y su enrutamiento en meta estimadores, aunque a menudo se utiliza un parámetro
fit_params
.- scikit-learn-contrib¶
Un lugar para publicar bibliotecas compatibles con scikit-learn que están ampliamente autorizadas por los desarrolladores principales y la comunidad de colaboradores, pero que no son mantenidas por el equipo de desarrolladores principales. Ver https://scikit-learn-contrib.github.io.
- propuestas de mejora de scikit-learn¶
- SLEP¶
- SLEPs¶
Los cambios en los principios de la API y los cambios en las dependencias o en las versiones soportadas se producen a través de una SLEP y siguen el proceso de toma de decisiones descrito en La gestión y toma de decisiones en el ámbito de la ciencia. Para todas las votaciones, una propuesta debe haberse hecho pública y debatido antes de la votación. Dicha propuesta debe ser un documento consolidado, en forma de «Propuesta de Mejora de Scikit-Learn» (Scikit-Learn Enhancement Proposal, SLEP), en lugar de una larga discusión sobre un tema. Una SLEP debe enviarse como un pull-request a propuestas de mejora utilizando la plantilla SLEP.
- semi-supervisado¶
- aprendizaje semi-supervisado¶
- semi supervisado¶
Aprendizaje en el que la predicción esperada (etiqueta o verdad fundamental) sólo está disponible para algunas muestras proporcionadas como datos de entrenamiento al hacer el ajuste del modelo. Convencionalmente aplicamos la etiqueta
-1
a las muestras sin etiquetar en la clasificación semi supervisada.- matriz dispersa¶
- grafo disperso¶
Una representación de datos numéricos bidimensionales que es más eficiente en cuanto a la memoria que el correspondiente arreglo de numpy denso donde casi todos los elementos son cero. Utilizamos el framework
scipy.sparse
, que proporciona varias representaciones de datos dispersos subyacentes, o formatos. Algunos formatos son más eficientes que otros para tareas particulares, y cuando un formato particular proporciona un beneficio especial, tratamos de documentar este hecho en las descripciones de los parámetros de scikit-learn.Algunos formatos de matrices dispersas (especialmente CSR, CSC, COO y LIL) distinguen entre ceros implícitos y explícitos. Los ceros explícitos se almacenan (es decir, consumen memoria en un arreglo de
datos
) en la estructura de datos, mientras que los ceros implícitos corresponden a todos los elementos no definidos en el almacenamiento explícito.En scikit-learn se utilizan dos semánticas para las matrices dispersas:
- semánticas de matriz
La matriz dispersa se interpreta como un arreglo en la que los ceros implícitos y explícitos se interpretan como el número 0. Esta es la interpretación que se adopta con más frecuencia, por ejemplo, cuando se utilizan matrices dispersas para matrices de características o matrices indicatrices multietiqueta.
- semánticas de gráfico
Al igual que con
scipy.sparse.csgraph
, los ceros explícitos se interpretan como el número 0, pero los ceros implícitos indican un valor enmascarado o ausente, como la ausencia de una arista entre dos vértices de un grafo, donde un valor explícito indica el peso de una arista. Esta interpretación se adopta para representar la conectividad en el agrupamiento, en las representaciones de vecindarios más cercanos (por ejemplo,neighbors.kneighbors_graph
), y para la representación de distancias precalculadas donde sólo se requieren las distancias en el vecindario de cada punto.
Cuando se trabaja con matrices dispersas, asumimos que son dispersas por una buena razón, y evitamos escribir código que densifique una matriz dispersa proporcionada por el usuario, manteniendo en su lugar la dispersidad o generando un error si no es posible (es decir, si un estimador no soporta / no puede soportar matrices dispersas).
- supervisado¶
- aprendizaje supervisado¶
Aprendizaje en el que la predicción esperada (etiqueta o verdad fundamental) está disponible para cada muestra cuando se hace el ajuste del modelo, proporcionado como y. Este es el enfoque adoptado en un clasificador o regresor entre otros estimadores.
- objetivo¶
- objetivos¶
La variable dependiente en el aprendizaje supervisado (y semisupervisado), pasada como y al método fit de un estimador. También se conoce como variable dependiente, variable de resultado, variable de respuesta, verdad fundamental o etiqueta. Scikit-learn trabaja con objetivos que tienen una estructura mínima: una clase de un conjunto finito, un número finito de valor real, múltiples clases o múltiples números. Ver Tipos de Objetivos.
- transducción¶
- transductivo¶
Un método de aprendizaje automático transductivo (en contraste con inductivo) está diseñado para modelar un conjunto de datos específico, pero no para aplicar ese modelo a datos no vistos. Algunos ejemplos son
manifold.TSNE
,cluster.AgglomerativeClustering
yneighbors.LocalOutlierFactor
.- sin etiquetar¶
- datos no etiquetados¶
Muestras con una verdad fundamental desconocida cuando se ajustan; equivalentemente, valores faltantes en el objetivo. Ver también el aprendizaje semi supervisado y no supervisado.
- no supervisado¶
- aprendizaje no supervisado¶
Aprendizaje en el que la predicción esperada (etiqueta o verdad fundamental) no está disponible para cada muestra cuando se hace el ajuste del modelo, como en agrupadores y detectores de valores atípicos. Los estimadores no supervisados ignoran cualquier y pasado a fit.
APIs de Clase y Tipos de Estimadores¶
- clasificador¶
- clasificadores¶
Un predictor supervisado (o semi supervisado) con un conjunto finito de posibles valores de salida discretos.
Un clasificador soporta el modelado de algunos de los objetivos binario, multiclase, multietiqueta, o multiclase multisalida. Dentro de scikit-learn, todos los clasificadores soportan la clasificación multiclase, utilizando por defecto una estrategia de uno contra el resto sobre el problema de clasificación binaria.
Los clasificadores deben almacenar un atributo classes_ después del ajuste, y normalmente heredan de
base.ClassifierMixin
, que establece su atributo _estimator_type.Un clasificador puede distinguirse de otros estimadores con
is_classifier
.Un clasificador debe implementar:
También puede ser apropiado implementar decision_function, predict_proba y predict_log_proba.
- agrupador¶
- agrupadores¶
Un predictor no supervisado con un conjunto finito de valores de salida discretos.
Un agrupador suele almacenar labels_ después del ajuste, y debe hacerlo si es transductivo.
Un agrupador debe implementar:
fit_predict si es transductivo
- estimador de la densidad¶
TODO
- estimador¶
- estimadores¶
Un objeto que gestiona la estimación y decodificación de un modelo. El modelo se estima como una función determinista de:
parámetros proporcionados en la construcción del objeto o con set_params;
el estado aleatorio global
numpy.random
si el parámetro random_state del estimador se establece como None; ycualquier dato o propiedades muestrales pasados a la llamada más reciente a fit, fit_transform o fit_predict, o datos pasados de forma similar en una secuencia de llamadas a partial_fit.
El modelo estimado se almacena en los atributos públicos y privados de la instancia del estimador, lo que facilita la decodificación mediante métodos de predicción y transformación.
Los estimadores tienen que proporcionar un método fit, y deberían proporcionar set_params y get_params, aunque normalmente se proporcionan por herencia de
base.BaseEstimator
.La funcionalidad principal de algunos estimadores también puede estar disponible como una función.
- extractor de características¶
- extractores de características¶
Un transformador que toma una entrada en la que cada muestra no está representada como un objeto array-like de longitud fija, y produce un objeto array-like de características para cada muestra (y, por tanto, un array-like bidimensional para un conjunto de muestras). En otras palabras, mapea (con pérdida) una representación de datos no rectangulares en datos rectangulares.
Los extractores de características deben implementar al menos:
- metaestimador¶
- metaestimadores¶
- metaestimador¶
- metaestimadores¶
Un estimador que toma otro estimador como parámetro. Algunos ejemplos son
pipeline.Pipeline
,model_selection.GridSearchCV
,feature_selection.SelectFromModel
yensemble.BaggingClassifier
.En el método fit de un metaestimador, cualquier estimador contenido debe ser clonado antes de ser ajustado (aunque FIXME: Pipeline y FeatureUnion no hacen esto actualmente). Una excepción a esto es que un estimador puede documentar explícitamente que acepta un estimador preajustado (por ejemplo, usando
prefit=True
enfeature_selection.SelectFromModel
). Un problema conocido con esto es que el estimador preajustado perderá su modelo si el metaestimador es clonado. Un metaestimador debe haber invocado afit
antes de la predicción, incluso si todos los estimadores contenidos son preajustados.En los casos en los que los comportamientos principales de un metaestimador (por ejemplo, la implementación de predict o transform) son funciones de los métodos de predicción/transformación del estimador base proporcionado (o de múltiples estimadores base), un meta-estimador debe proporcionar al menos los métodos estándar proporcionados por el estimador base. Puede que no sea posible identificar qué métodos proporciona el estimador subyacente hasta que el meta-estimador haya sido ajustado (ver también duck typing), para lo cual
utils.metaestimators.if_delegate_has_method
puede ayudar. También debería proporcionar (o modificar) las etiquetas del estimador y el atributo classes_ proporcionados por el estimador base.Los metaestimadores deben tener cuidado de validar los datos lo menos posible antes de pasarlos a un estimador subyacente. Esto ahorra tiempo de cálculo y puede, por ejemplo, permitir que el estimador subyacente trabaje fácilmente con datos que no son rectangulares.
- detector de valores atípicos¶
- detectores de valores atípicos¶
Un predictor binario no supervisado que modela la distinción entre muestras centrales y periféricas.
Los detectores de valores atípicos deben implementar:
fit_predict si es transductivo
Los detectores inductivos de valores atípicos también pueden implementar decision_function para dar una puntuación normalizada de los valores atípicos cuando éstos tengan una puntuación inferior a 0. score_samples puede proporcionar una puntuación no normalizada por muestra.
- predictor¶
- predictores¶
Un estimador que soporta predict y/o fit_predict. Esto incluye clasificador, regresor, detector de valores atípicos y agrupador.
En estadística, «predictores» se refiere a características.
- regresor¶
- regresores¶
Un predictor supervisado (o semi-supervisado) con valores de salida continuos.
Los regresores suelen heredar de
base.RegressorMixin
, que establece su atributo _estimator_type.Un regresor puede distinguirse de otros estimadores con
is_regressor
.Un regresor debe implementar:
- transformador¶
- transformadores¶
Un estimador que soporta transform y/o fit_transform. Un transformador puramente transductivo, como
manifold.TSNE
, puede no implementartransform
.- vectorizador¶
- vectorizadores¶
Existen otras APIs relacionadas específicamente con una pequeña familia de estimadores, como:
- separador de validación-cruzada¶
- separador de CV¶
- generador de validación-cruzada¶
Una familia de clases que no son estimadores y que se utilizan para dividir un conjunto de datos en una secuencia de partes de entrenamiento y de prueba (ver Validación cruzada: evaluación del rendimiento del estimador), proporcionando métodos split y get_n_splits. Ten en cuenta que, a diferencia de los estimadores, éstas no tienen métodos fit y no proporcionan set_params o get_params. La validación de parámetros puede realizarse en
__init__
.- estimador de validación-cruzada¶
Un estimador que tiene incorporada la capacidad de validación cruzada para seleccionar automáticamente los mejores hiperparámetros (ver el Manual de Usuario). Algunos ejemplos de estimadores de validación cruzada son
ElasticNetCV
yLogisticRegressionCV
. Los estimadores de validación cruzada se denominanEstimatorCV
y suelen ser aproximadamente equivalentes aGridSearchCV(Estimator(), ...)
. La ventaja de utilizar un estimador de validación cruzada sobre la clase canónica estimador junto con la búsqueda en cuadrícula es que pueden aprovechar el warm-starting reutilizando los resultados precalculados en los pasos anteriores del proceso de validación cruzada. Por lo general, esto supone una mejora de la velocidad. Una excepción es la claseRidgeCV
, que en cambio puede realizar un eficiente Leave-One-Out CV.- puntuador¶
Un objeto invocable no estimador que evalúa un estimador en datos de prueba dados, devolviendo un número. A diferencia de las métricas de evaluación, un número mayor devuelto debe corresponder con una mejor puntuación. Ver El parámetro scoring: definir las reglas de evaluación del modelo.
Otros ejemplos:
tree.Criterion
Tipos de Objetivos¶
- binario¶
Un problema de clasificación que consta de dos clases. Un objetivo binario puede representarse como para un problema multiclase pero con sólo dos etiquetas. Una función de decisión binaria se representa como un arreglo 1D.
Semánticamente, una clase suele considerarse la clase «positiva». A menos que se especifique lo contrario (por ejemplo, utilizando pos_label en métricas de evaluación), consideramos la etiqueta de clase con el mayor valor (numérico o lexicográfico) como la clase positiva: de las etiquetas [0, 1], 1 es la clase positiva; de [1, 2], 2 es la clase positiva; de [“no”, “yes”], “yes” es la clase positiva; de [“no”, “YES”], “no” es la clase positiva. Esto afecta a la salida de decision_function, por ejemplo.
Ten en cuenta que un conjunto de datos muestreado de un
y
multiclase o uny
continuo puede parecer binario.type_of_target
devolverá “binary” para la entrada binaria, o un arreglo similar con una sola clase presente.- continuo¶
Un problema de regresión en el que el objetivo de cada muestra es un número de punto flotante finito representado como un arreglo unidimensional de números de punto flotante (floats) (o a veces enteros).
type_of_target
devolverá “continuous” para la entrada continua, pero si los datos son todos enteros, se identificará como “multiclass”.- salida múltiple continua¶
- salida-múltiple continua¶
- multisalida continua¶
- multi-salida continua¶
Un problema de regresión en el que el objetivo de cada muestra consiste en
n_outputs
salidas, cada una de ellas un número de punto flotante finito, para un int fijon_outputs > 1
en un conjunto de datos particular.Los objetivos de salida múltiple continua se representan como múltiples objetivos continuos, apilados horizontalmente en un arreglo de forma
(n_samples, n_outputs)
.type_of_target
devolverá “continuous-multioutput” para una entrada multisalida continua, pero si los datos son todos enteros, se identificará como “multiclass-multioutput”.- multiclase¶
- multi-clase¶
Un problema de clasificación que consta de más de dos clases. Un objetivo multiclase puede representarse como un arreglo unidimensional de cadenas o enteros. También se acepta un vector columna 2D de enteros (es decir, una única salida en términos multioutput).
No soportamos oficialmente otros objetos ordenables y hashables como etiquetas de clase, aunque los estimadores puedan funcionar cuando se dan objetivos de clasificación de ese tipo.
Para la clasificación semi supervisada, las muestras sin etiquetar deben tener la etiqueta especial -1 en
y
.Dentro de sckit-learn, todos los estimadores que soportan la clasificación binaria también soportan la clasificación multiclase, utilizando One-vs-Rest por defecto.
Un
preprocessing.LabelEncoder
ayuda a canonizar los objetivos multiclase como enteros.type_of_target
devolverá “multiclass” para la entrada multiclase. El usuario también puede querer manejar la entrada “binary” de forma idéntica a “multiclass”.- multisalida multiclase¶
- multi-salida multi-clase¶
- multiclase multisalida¶
- multi-clase multi-salida¶
Un problema de clasificación en el que el objetivo de cada muestra consiste en
n_outputs
salidas, cada una una etiqueta de clase, para un int fijon_outputs > 1
en un conjunto de datos particular. Cada salida tiene un conjunto fijo de clases disponibles, y cada muestra está etiquetada con una clase para cada salida. Una salida puede ser binaria o multiclase, y en el caso de que todas las salidas sean binarias, el objetivo es multietiqueta.Los objetivos multisalida se representan como múltiples objetivos multiclase, apilados horizontalmente en un arreglo de forma
(n_samples, n_outputs)
.XXX: Por razones de simplicidad, no siempre podemos admitir etiquetas de clase de cadena para multiclase multisalida, y se deben utilizar etiquetas de clase de enteros.
multioutput
proporciona estimadores que estiman problemas de salidas múltiples utilizando múltiples estimadores de una sola salida. Es posible que esto no tenga en cuenta las dependencias entre las diferentes salidas, algo que los métodos que manejan de forma nativa el caso de las salidas múltiples (por ejemplo, árboles de decisión, vecinos más cercanos, redes neuronales) pueden hacer mejor.type_of_target
devolverá “multiclass-multioutput” para una entrada multiclase multisalida.- multietiqueta¶
- multi-etiqueta¶
Un objetivo multiclase multisalida donde cada salida es binaria. Puede representarse como un arreglo 2D (denso) o una matriz dispersa de enteros, de manera que cada columna es un objetivo binario independiente, donde las etiquetas positivas se indican con 1 y las negativas suelen ser -1 o 0. Los objetivos multietiqueta dispersos no se admiten en todos los casos en que los objetivos multietiqueta densos son admitidos.
Semánticamente, un objetivo multietiqueta puede considerarse como un conjunto de etiquetas para cada muestra. Aunque no se utiliza internamente,
preprocessing.MultiLabelBinarizer
se proporciona como una herramienta para convertir de una representación de lista de conjuntos a un arreglo 2D o matriz dispersa. La codificación one-hot de un objetivo multiclase conpreprocessing.LabelBinarizer
lo convierte en un problema multietiqueta.type_of_target
devolverá “multilabel-indicator” para la entrada multietiqueta, ya sea dispersa o densa.- salida múltiple¶
- multi-salida¶
Un objetivo en el que cada muestra tiene múltiples etiquetas de clasificación/regresión. Ver multiclase multisalida y salida múltiple continua. Actualmente no admitimos el modelado de objetivos mixtos de clasificación y regresión.
Métodos¶
decision_function
¶En un clasificador ajustado o detector de valores atípicos, predice una puntuación «blanda» para cada muestra en relación con cada clase, en lugar de la predicción categórica «dura» producida por predict. Su entrada suele ser sólo algunos datos observados, X.
Si el estimador no estaba ya ajustado, la llamada a este método debería lanzar un
exceptions.NotFittedError
.Convenciones de salida:
- clasificación binaria
Un arreglo unidimensional, donde los valores estrictamente mayores que cero indican la clase positiva (es decir, la última clase en classes_).
- clasificación multiclase
Un arreglo bidimensional, en el que el arg-máximo por fila es la clase predicha. Las columnas se ordenan según classes_.
- clasificación multietiqueta
Scikit-learn es inconsistente en su representación de las funciones de decisión multietiqueta. Algunos estimadores la representan como una multiclase multisalida, es decir, una lista de arreglos 2D, cada uno con dos columnas. Otros la representan con un único arreglo 2D, cuyas columnas corresponden a las decisiones individuales de clasificación binaria. Esta última representación es ambiguamente idéntica al formato de clasificación multiclase, aunque su semántica difiere: debe interpretarse, como en el caso binario, fijando el umbral en 0.
TODO: Este gist destaca el uso de los diferentes formatos para la multietiqueta.
- clasificación multisalida
Una lista de arreglos 2D, que corresponde a cada función de decisión multiclase.
- detección de valores atípicos
Un arreglo unidimensional, en el que un valor mayor o igual a cero indica un valor típico.
fit
¶El método
fit
se proporciona en cada estimador. Normalmente toma algunas muestrasX
, objetivosy
si el modelo es supervisado, y potencialmente otras propiedades muestrales como sample_weight. Debería:borra cualquiera de los atributos previos almacenados en el estimador, a menos que se utilice warm_start;
valida e interpreta cualquiera de los parámetros, idealmente lanzando un error si no es válido;
valida los datos de entrada;
estima y almacena los atributos del modelo a partir de los parámetros estimados y los datos proporcionados; y
devuelve el estimador ahora ajustado para facilitar el encadenamiento de métodos.
Tipos de Objetivos describe posibles formatos para
y
.fit_predict
¶Utilizado especialmente para los estimadores no supervisados, transductivos, ajusta el modelo y devuelve las predicciones (similar a predict) sobre los datos de entrenamiento. En los agrupadores, estas predicciones también se almacenan en el atributo labels_, y la salida de
.fit_predict(X)
suele ser equivalente a.fit(X).predict(X)
. Los parámetros defit_predict
son los mismos que los defit
.fit_transform
¶Un método en transformadores que ajusta el estimador y devuelve los datos de entrenamiento transformados. Toma parámetros como en fit y su salida debería tener la misma forma que llamando a
.fit(X, ...).transform(X)
. No obstante, hay casos raros en los que.fit_transform(X, ...)
y.fit(X, ...).transform(X)
no devuelven el mismo valor, donde los datos de entrenamiento deben tratarse de forma diferente (debido a la mezcla de modelos en ensembles apilados, por ejemplo; estos casos deben estar claramente documentados). Los transformadores transductivos también pueden proporcionarfit_transform
pero no transform.Una de las razones para implementar
fit_transform
es que realizarfit
ytransform
por separado sería menos eficiente que hacerlo conjuntamente.base.TransformerMixin
proporciona una implementación por defecto, proporcionando una interfaz consistente a través de los transformadores en los quefit_transform
está o no especializado.En el aprendizaje inductivo – donde el objetivo es aprender un modelo generalizado que pueda aplicarse a nuevos datos – los usuarios deben tener cuidado de no aplicar
fit_transform
a la totalidad de un conjunto de datos (es decir, los datos de entrenamiento y de prueba juntos) antes de seguir modelando, ya que esto resulta en fuga de datos.get_feature_names
¶Principalmente para extractores de características, pero también se utiliza para que otros transformadores proporcionen nombres de cadenas para cada columna en la salida del método transform del estimador. Tiene como salida una lista de cadenas y puede tomar una lista de cadenas como entrada, correspondiente a los nombres de las columnas de entrada a partir de las cuales se pueden generar los nombres de las columnas de salida. Por defecto, las características de entrada se denominan x0, x1, ….
get_n_splits
¶En un separador de CV (no un estimador), devuelve el número de elementos que se obtendría si se iterara a través del valor de retorno de split dados los mismos parámetros. Toma los mismos parámetros que split.
get_params
¶Obtiene todos los parámetros, y sus valores, que pueden establecerse utilizando set_params. Se puede utilizar un parámetro
deep
, cuando se establece en False para devolver sólo aquellos parámetros que no incluyan__
, es decir, que no se deban a la indirección a través de estimadores contenidos.La mayoría de los estimadores adoptan la definición de
base.BaseEstimator
, que simplemente adopta los parámetros definidos para__init__
.pipeline.Pipeline
, entre otros, reimplementaget_params
para declarar los estimadores nombrados en sus parámetrossteps
como parámetros en sí mismos.partial_fit
¶Facilita el ajuste de un estimador en línea. A diferencia de
fit
, llamar repetidamente apartial_fit
no borra el modelo, sino que lo actualiza con los datos proporcionados. La porción de datos proporcionada apartial_fit
puede llamarse mini lotes. Cada mini lote debe tener una forma consistente, etc. En los estimadores iterativos,partial_fit
suele realizar una sola iteración.partial_fit
también se puede utilizar para el aprendizaje fuera del núcleo, aunque normalmente se limita al caso en que el aprendizaje se puede realizar en línea, es decir, el modelo es utilizable después de cadapartial_fit
y no hay ningún procesamiento separado necesario para finalizar el modelo.cluster.Birch
introduce la convención de que llamar apartial_fit(X)
producirá un modelo que no está finalizado, pero el modelo puede ser finalizado llamando apartial_fit()
, es decir, sin pasar un mini lote adicional.Generalmente, los parámetros del estimador no deben ser modificados entre llamadas a
partial_fit
, aunquepartial_fit
debe validarlos así como el nuevo mini lote de datos. En cambio,warm_start
se utiliza para ajustar repetidamente el mismo estimador con los mismos datos pero variando los parámetros.Como
fit
,partial_fit
debe devolver el objeto estimador.Para borrar el modelo, debe construirse un nuevo estimador, por ejemplo con
base.clone
.NOTA: El uso de
partial_fit
después defit
resulta en un comportamiento indefinido.predict
¶Hace una predicción para cada muestra, normalmente sólo tomando X como entrada (pero consulta las convenciones de salida del regresor más abajo). En un clasificador o regresor, esta predicción está en el mismo espacio objetivo utilizado en el ajuste (por ejemplo, uno de {“red”, “amber”, “green”} si el
y
en el ajuste consistió en estas cadenas). A pesar de esto, incluso cuandoy
pasado a fit es una lista u otro array-like, la salida depredict
debe ser siempre un arreglo o matriz dispersa. En un agrupador o detector de valores atípicos la predicción es un entero.Si el estimador no estaba ya ajustado, la llamada a este método debería lanzar un
exceptions.NotFittedError
.Convenciones de salida:
- clasificador
Un arreglo de forma
(n_samples,)
(n_samples, n_outputs)
. Los datos multietiqueta pueden representarse como una matriz dispersa si se ha utilizado una matriz dispersa en el ajuste. Cada elemento debe ser uno de los valores del atributo classes_ del clasificador.- agrupador
Un arreglo de forma
(n_samples,)
donde cada valor es de 0 an_clusters - 1
si la muestra correspondiente está agrupada, y -1 si la muestra no está agrupada, como encluster.dbscan
.- detector de valores atípicos
Un arreglo de forma
(n_samples,)
donde cada valor es -1 para un valor atípico y 1 en caso contrario.- regresor
Un arreglo numérico de forma
(n_samples,)
, normalmente float64. Algunos regresores tienen opciones adicionales en su métodopredict
, lo que les permite devolver la desviación estándar (return_std=True
) o la covarianza (return_cov=True
) relativa al valor predicho. En este caso, el valor devuelto es una tupla de arreglos correspondientes a (media de la predicción, std, cov) según se requiera.
predict_log_proba
¶El logaritmo natural de la salida de predict_proba, proporcionado para facilitar la estabilidad numérica.
predict_proba
¶Un método en clasificadores y agrupadores que puede devolver estimaciones de probabilidad para cada clase/conglomerado. Su entrada suele ser sólo algunos datos observados, X.
Si el estimador no estaba ya ajustado, la llamada a este método debería lanzar un
exceptions.NotFittedError
.Las convenciones de salida son como las de decision_function, excepto en el caso de la clasificación binaria, donde una columna es la salida para cada clase (mientras que
decision_function
tiene como salida un arreglo 1D). Para las predicciones binarias y multiclase, cada fila debe sumar 1.Al igual que otros métodos,
predict_proba
sólo debe estar presente cuando el estimador puede realizar predicciones probabilísticas (ver duck typing). Esto significa que la presencia del método puede depender de los parámetros del estimador (por ejemplo, enlinear_model.SGDClassifier
) o de los datos de entrenamiento (por ejemplo, enmodel_selection.GridSearchCV
) y puede aparecer sólo después del ajuste.score
¶Un método en un estimador, normalmente un predictor, que evalúa sus predicciones en un conjunto de datos dado, y devuelve una única puntuación numérica. Un valor de retorno mayor debería indicar mejores predicciones; la precisión se utiliza para los clasificadores y R^2 para los regresores por defecto.
Si el estimador no estaba ya ajustado, la llamada a este método debería lanzar un
exceptions.NotFittedError
.Algunos estimadores implementan una función de puntuación personalizada y específica del estimador, a menudo la verosimilitud de los datos bajo el modelo.
score_samples
¶TODO
Si el estimador no estaba ya ajustado, la llamada a este método debería lanzar un
exceptions.NotFittedError
.set_params
¶Disponible en cualquier estimador, toma argumentos de palabras clave correspondientes a las claves de get_params. A cada uno se le proporciona un nuevo valor para asignar, de forma que al llamar a
get_params
después deset_params
reflejará los parámetros modificados. La mayoría de los estimadores utilizan la implementación enbase.BaseEstimator
, que maneja los parámetros anidados y, en caso contrario, establece el parámetro como un atributo en el estimador. El método es sobreescrito enpipeline.Pipeline
y estimadores relacionados.split
¶En un separador de CV (no un estimador), este método acepta parámetros (X, y, groups), donde todos pueden ser opcionales, y devuelve un iterador sobre pares
(train_idx, test_idx)
. Cada uno de {train,test}_idx es un arreglo 1D de enteros, con valores desde 0 hastaX.shape[0] - 1
de cualquier longitud, de forma que no aparezcan valores tanto en algúntrain_idx
como en su correspondientetest_idx
.transform
¶En un transformador, transforma la entrada, normalmente sólo X, en algún espacio transformado (convencionalmente anotado como Xt). La salida es un arreglo o matriz dispersa de longitud n_samples y con el número de columnas fijado después del ajuste.
Si el estimador no estaba ya ajustado, la llamada a este método debería lanzar un
exceptions.NotFittedError
.
Parámetros¶
Estos nombres de parámetros comunes, utilizados específicamente en la construcción de estimadores (ver el concepto parámetro), a veces también aparecen como parámetros de funciones o constructores no estimadores.
class_weight
¶Se utiliza para especificar las ponderaciones de las muestras cuando se ajustan los clasificadores en función de la clase target. Donde sample_weight también se admite y se da, se multiplica por la contribución de
class_weight
. Del mismo modo, cuando se utilizaclass_weight
en tareas de salida múltiple (incluyendo multietiqueta), las ponderaciones se multiplican por las salidas (es decir, las columnas dey
).Por defecto, todas las muestras tienen la misma ponderación, de manera que las clases se ponderan efectivamente por su prevalencia en los datos de entrenamiento. Esto podría lograrse explícitamente con
class_weight={label1: 1, label2: 1, ...}
para todas las etiquetas de clase.De forma más general,
class_weight
se especifica como un diccionario que mapea etiquetas de clase a ponderaciones ({class_label: weight}
), de forma que cada muestra de la clase nombrada recibe esa ponderación.Se puede utilizar
class_weight='balanced'
para dar a todas las clases la misma ponderación dando a cada muestra una ponderación inversamente relacionada con la prevalencia de su clase en los datos de entrenamiento:n_samples / (n_classes * np.bincount(y))
. Las ponderaciones de las clases se utilizarán de forma diferente según el algoritmo: para los modelos lineales (como las Máquinas de Vectores de Soporte [Support Vector Machines, SVM] lineales o la regresión logística), las ponderaciones de las clases alterarán la función de pérdida ponderando la pérdida de cada muestra por su ponderación de la clase. Para los algoritmos basados en árboles, las ponderaciones de la clase se utilizarán para reponderar el criterio de separación. Nota, sin embargo, que este reequilibrio no tiene en cuenta la ponderación de las muestras en cada clase.Para la clasificación multisalida, se utiliza una lista de diccionarios para especificar las ponderaciones de cada salida. Por ejemplo, para la clasificación multietiqueta de cuatro clases las ponderaciones deben ser
[{0: 1, 1: 1}, {0: 1, 1: 5}, {0: 1, 1: 1}, {0: 1, 1: 1}]
en lugar de[{1:1}, {2:5}, {3:1}, {4:1}]
.El parámetro
class_weight
se valida e interpreta conutils.compute_class_weight
.cv
¶Determina una estrategia de separación de validación-cruzada, como la utilizada en las rutinas basadas en la validación cruzada.
cv
también está disponible en estimadores comomultioutput.ClassifierChain
ocalibration.CalibratedClassifierCV
que utilizan las predicciones de un estimador como datos de entrenamiento para otro, para no sobreajustar la supervisión de entrenamiento.Las entradas posibles para
cv
son usualmente:Un número entero que especifica el número de pliegues en la validación cruzada K-fold. K-fold se estratificará sobre las clases si el estimador es un clasificador (determinado por
base.is_classifier
) y los objetivos pueden representar un problema de clasificación binario o multiclase (pero no de salida múltiple) (determinado porutils.multiclass.type_of_target
).Una instancia de separador de validación-cruzada. Consulta el Manual de Usuario para conocer los separadores disponibles en scikit-learn.
Un iterable que produce separaciones de entrenamiento/prueba.
Salvo algunas excepciones (especialmente cuando es una opción prescindir de la validación-cruzada), el valor por defecto es de 5 pliegues.
Los valores de
cv
se validan e interpretan conutils.check_cv
.kernel
¶TODO
max_iter
¶Para los estimadores que implican una optimización iterativa, esto determina el número máximo de iteraciones a realizar en fit. Si las iteraciones
max_iter
se ejecutan sin convergencia, se debe levantar unexceptions.ConvergenceWarning
. Ten en cuenta que la interpretación de «una sola iteración» es inconsistente entre los estimadores: algunos, pero no todos, lo utilizan para referirse a una sola época (es decir, una pasada por cada muestra en los datos).FIXME tal vez deberíamos tener algunos tests comunes sobre la relación entre ConvergenceWarning y max_iter.
memory
¶Algunos estimadores hacen uso de
joblib.Memory
para almacenar soluciones parciales durante el ajuste. Así, cuando se llama de nuevo afit
, esas soluciones parciales han sido memorizadas y pueden ser reutilizadas.Un parámetro
memory
puede especificarse como una cadena con una ruta a un directorio, o puede utilizarse una instancia dejoblib.Memory
(o un objeto con una interfaz similar, es decir, un métodocache
).Los valores de
memory
se validan e interpretan conutils.validation.check_memory
.metric
¶Como parámetro, es el esquema para determinar la distancia entre dos puntos de datos. Ver
metrics.pairwise_distances
. En la práctica, para algunos algoritmos, se puede utilizar una métrica de distancia inadecuada (una que no obedece a la desigualdad del triángulo, como la Distancia del Coseno).XXX: el análisis de conglomerados jerárquico utiliza
affinity
con este significado.También utilizamos metric para referirnos a métricas de evaluación, pero evitamos utilizar este sentido como nombre de parámetro.
n_components
¶El número de características en las que un transformador debe transformar la entrada. Ver components_ para el caso especial de la proyección afín.
n_iter_no_change
¶Número de iteraciones sin mejora a esperar antes de detener el procedimiento iterativo. También se conoce como parámetro de paciencia. Se suele utilizar con parada anticipada para evitar que se detenga demasiado pronto.
n_jobs
¶Este parámetro se utiliza para especificar cuántos procesos o hilos concurrentes deben utilizarse para las rutinas que se paralelizan con joblib.
n_jobs
es un número entero, que especifica el número máximo de trabajadores que se ejecutan simultáneamente. Si se da 1, no se utiliza el paralelismo joblib en absoluto, lo que es útil para la depuración. Si se establece en -1, se utilizan todas las CPUs. Paran_jobs
por debajo de -1, se utilizan (n_cpus + 1 + n_jobs). Por ejemplo, conn_jobs=-2
, se utilizan todas las CPUs excepto una.n_jobs
esNone
por defecto, lo que significa no establecido; generalmente se interpretará comon_jobs=1
, a menos que el contexto actual del backendjoblib.Parallel
especifique lo contrario.Para más detalles sobre el uso de
joblib
y sus interacciones con scikit-learn, consulta nuestras notas de paralelismo.pos_label
¶Valor con el que deben codificarse las etiquetas positivas en los problemas de clasificación binaria en los que no se asume la clase positiva. Este valor suele ser necesario para calcular métricas de evaluación asimétricas como la precisión y la exhaustividad.
random_state
¶Cuando la aleatorización es parte de un algoritmo de scikit-learn, se puede proporcionar un parámetro
random_state
para controlar el generador de números aleatorios utilizado. Ten en cuenta que la mera presencia derandom_state
no significa que la aleatorización se utilice siempre, ya que puede depender de que se establezca otro parámetro, por ejemplo,shuffle
.El valor pasado tendrá un efecto en la reproducibilidad de los resultados devueltos por la función (fit, split, o cualquier otra función como
k_means
). El valor derandom_state
puede ser:- None (predeterminado)
Utiliza la instancia global de estado aleatorio de
numpy.random
. Si se llama a la función varias veces, se reutilizará la misma instancia y se producirán resultados diferentes.- Un número entero
Utiliza un nuevo generador de números aleatorios cuya semilla es el número entero dado. El uso de un int producirá los mismos resultados en diferentes llamadas. Sin embargo, puede valer la pena comprobar que sus resultados son estables a través de una serie de diferentes semillas aleatorias. Las semillas aleatorias enteras más populares son 0 y 42.
- Una instancia de
numpy.random.RandomState
Utiliza el estado aleatorio proporcionado, afectando únicamente a otros usuarios de esa misma instancia de estado aleatorio. Llamar a la función varias veces reutilizará la misma instancia, y producirá resultados diferentes.
utils.check_random_state
se utiliza internamente para validar la entradarandom_state
y devolver una instancia deRandomState
.Para más detalles sobre cómo controlar la aleatoriedad de los objetos de scikit-learn y evitar errores comunes, puedes consultar Control de aleatoriedad.
scoring
¶Especifica la función de puntuación que se va a maximizar (normalmente mediante validación-cruzada), o – en algunos casos – múltiples funciones de puntuación a ser reportadas. La función de puntuación puede ser una cadena aceptada por
metrics.get_scorer
o un scorer invocable, que no debe confundirse con una métrica de evaluación, ya que esta última tiene una API más diversa.scoring
también se puede establecer como None, en cuyo caso se utiliza el método score del estimador. Ver El parámetro scoring: definir las reglas de evaluación del modelo en el Manual de Usuario.Donde múltiples métricas pueden ser evaluadas,
scoring
puede ser dado como una lista de cadenas únicas, un diccionario con nombres como claves e invocables como valores o un invocable que devuelve un diccionario. Ten en cuenta que esto no especifica qué función de puntuación debe ser maximizada, y otro parámetro comorefit
puede ser utilizado para este propósito.El parámetro
scoring
se valida e interpreta mediantemetrics.check_scoring
.verbose
¶El registro (logging) no se maneja de manera muy consistente en scikit-learn en la actualidad, pero cuando se proporciona como una opción, el parámetro
verbose
suele estar disponible para elegir no registrar (establecido en False). Cualquier valor True debería permitir algún tipo de registro, pero los enteros más grandes (por ejemplo, por encima de 10) pueden ser necesarios para la verbosidad completa. Los registros verbosos se imprimen normalmente en la Salida Estándar. Los estimadores no deberían producir ninguna salida en la Salida Estándar con la configuración predeterminadaverbose
.warm_start
¶Cuando se ajusta un estimador repetidamente en el mismo conjunto de datos, pero para múltiples valores de parámetros (como para encontrar el valor que maximiza el rendimiento como en búsqueda en cuadrícula), puede ser posible reutilizar aspectos del modelo aprendidos del valor de parámetro anterior, ahorrando tiempo. Cuando
warm_start
es verdadero, los atributos del modelo ajustado existente se utilizan para inicializar el nuevo modelo en una llamada posterior a fit.Ten en cuenta que esto sólo es aplicable para algunos modelos y algunos parámetros, e incluso algunos órdenes de valores de parámetros. Por ejemplo,
warm_start
puede utilizarse al construir bosques aleatorios para añadir más árboles al bosque (incrementandon_estimators
) pero no para reducir su número.partial_fit también conserva el modelo entre llamadas, pero difiere: con
warm_start
los parámetros cambian y los datos son (más o menos) constantes a través de las llamadas afit
; conpartial_fit
, el mini lote de datos cambia y los parámetros del modelo permanecen fijos.Hay casos en los que se desea utilizar
warm_start
para ajustar en datos diferentes, pero estrechamente relacionados. Por ejemplo, uno puede ajustar inicialmente a un subconjunto de los datos, y luego afinar la búsqueda de parámetros en el conjunto de datos completo. Para la clasificación, todos los datos en una secuencia de llamadaswarm_start
afit
deben incluir muestras de cada clase.
Atributos¶
Ver el concepto atributo.
classes_
¶Una lista de etiquetas de clase conocidas por el clasificador, mapeando cada etiqueta a un índice numérico utilizado en la representación del modelo de nuestra salida. Por ejemplo, el arreglo de salida de predict_proba tiene columnas alineadas con
classes_
. Para los clasificadores de salida múltiple,classes_
debe ser una lista de listas, con una lista de clases para cada salida. Para cada salida, las clases deben estar ordenadas (numéricamente, o lexicográficamente para cadenas).classes_
y el mapeo a los índices se suele gestionar conpreprocessing.LabelEncoder
.components_
¶Una matriz de transformación afín de forma
(n_components, n_features)
utilizada en muchos transformadores lineales donde n_components es el número de características de salida y n_features es el número de características de entrada.Ver también components_ que es un atributo similar para los predictores lineales.
coef_
¶La matriz de ponderaciones/coeficientes de un predictor de modelo lineal generalizado, de forma
(n_features,)
para la clasificación binaria y la regresión de salida única,(n_clases, n_features)
para la clasificación multiclase y(n_targets, n_features)
para la regresión de salida múltiple. Ten en cuenta que esto no incluye el término de intercepto (o sesgo), que se almacena enintercept_
.Cuando está disponible,
feature_importances_
no suele proporcionarse también, pero puede calcularse como la norma de la entrada de cada característica encoef_
.Ver también components_ que es un atributo similar para los transformadores lineales.
embedding_
¶Un embedding de los datos de entrenamiento en estimadores aprendizaje múltiple, con forma
(n_samples, n_components)
, idéntico a la salida de fit_transform. Ver también labels_.n_iter_
¶El número de iteraciones realmente realizadas cuando se ajusta un estimador iterativo que puede detenerse en la convergencia. Ver también max_iter.
feature_importances_
¶Un arreglo de forma
(n_features,)
disponible en algunos predictores para proporcionar una medida relativa de la importancia de cada característica en las predicciones del modelo.labels_
¶Un arreglo que contiene una etiqueta de conglomerado para cada muestra de los datos de entrenamiento en agrupadores, idéntica a la salida de fit_predict. Ver también embedding_.
Datos y propiedades de la muestra¶
Ver el concepto propiedad de la muestra.
groups
¶Se utiliza en las rutinas de validación-cruzada para identificar las muestras que están correlacionadas. Cada valor es un identificador tal que, en un separador de CV de apoyo, las muestras de algún valor de
groups
pueden no aparecer tanto en un conjunto de entrenamiento como en su correspondiente conjunto de prueba. Ver Iteradores de validación cruzada para datos agrupados..sample_weight
¶Una ponderación relativa para cada muestra. Intuitivamente, si todos las ponderaciones son números enteros, un modelo o puntuación ponderada debería ser equivalente a la calculada al repetir la muestra el número de veces especificado en la ponderación. Las ponderaciones pueden especificarse como números de punto flotante (floats), de modo que las ponderaciones de las muestras suelen ser equivalentes hasta un factor de escalamiento positivo constante.
FIXME ¿Es esta interpretación siempre el caso en la práctica? No tenemos tests comunes.
Algunos estimadores, como los árboles de decisión, admiten ponderaciones negativas. FIXME: Esta característica o su ausencia puede no estar probada o documentada en muchos estimadores.
Este no es del todo el caso en que otros parámetros del modelo consideran el número de muestras en una región, como ocurre con
min_samples
encluster.DBSCAN
. En este caso, un conteo de muestras se convierte en una suma de sus ponderaciones.En la clasificación, las ponderaciones de las muestras también pueden especificarse como una función de la clase con el parámetro estimador class_weight.
X
¶Denota los datos que se observan en el momento del entrenamiento y de la predicción, utilizados como variables independientes en el aprendizaje. La notación es mayúscula para indicar que se trata normalmente de una matriz (ver rectangular). Cuando se trata de una matriz, cada muestra puede estar representada por un vector de características, o un vector de (des)similitudes precalculado con cada muestra de entrenamiento.
X
también puede no ser una matriz, y puede requerir un extractor de características o una métrica por pares para convertirla en una antes del aprendizaje de un modelo.Xt
¶Abreviatura de «X transformada».
y
¶Y
¶Denota datos que pueden observarse en el momento del entrenamiento como variable dependiente en el aprendizaje, pero que no están disponibles en el momento de la predicción, y suele ser el objetivo de la predicción. La notación puede ser mayúscula para indicar que se trata de una matriz, que representa objetivos de salida múltiple, por ejemplo; pero normalmente utilizamos
y
y a veces lo hacemos incluso cuando se asumen múltiples salidas.