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éricas

  • una pandas.Series numérica

Excluye:

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 de tree.DecisionTreeClassifier de salida múltiple). Un estimador en el que predict() devuelve una lista o una pandas.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ámetro n_components. A partir de esto, junto con otros parámetros y los datos, PCA estima el atributo n_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, y OneHotEncoder 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, incluyen Pipeline y FeatureUnion.)

Si el parámetro random_state del estimador es un entero (o si el estimador no tiene un parámetro random_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 en sklearn/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 en pipeline.Pipeline.fit para pasar propiedades muestrales a los métodos fit 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 dtype integer o floating. Ten en cuenta que en este caso, la precisión puede ser dependiente de la plataforma. El dtype numeric se refiere a aceptar tanto integer como floating.

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 ejecuta hasattr seguido de getattr 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 que est1 y est2 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 cuenta metrics.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.

etiquetas del estimador

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 como base.is_classifier.

_pairwise

Este atributo booleano indica si los datos (X) pasados a fit y métodos similares consisten en medidas de pares sobre muestras en lugar de una representación de características para cada muestra. Suele ser True cuando un estimador tiene un parámetro metric o affinity o kernel con valor precomputed. 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 en manifold.spectral_embedding o cluster.dbscan. Muchos transformadores de preprocesamiento también proporcionan una interfaz de función, similar a la llamada a fit_transform, como en preprocessing.maxabs_scale. Los usuarios deben tener cuidado de evitar fuga de datos cuando hagan uso de estas funciones equivalentes a fit_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.).

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 y model_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 valor missing_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

El número de salidas en el objetivo.

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 y random_state son parámetros de RandomForestClassifier. 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 profundidad base_estimator__max_depth con valor 3, al que se puede acceder con clf.base_estimator.max_depth o clf.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) en metrics.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ódulo neighbors 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 o kernel con la cadena “precomputed”. Si este es el caso, el estimador debe establecer la etiqueta del estimador pairwise 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 y neighbors.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:

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:

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 y ensemble.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 en feature_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 a fit 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:

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 implementar transform.

vectorizador
vectorizadores

Ver extractor de características.

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 y LogisticRegressionCV. Los estimadores de validación cruzada se denominan EstimatorCV y suelen ser aproximadamente equivalentes a GridSearchCV(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 clase RidgeCV, 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:

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 un y 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 fijo n_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 fijo n_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 con preprocessing.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 muestras X, objetivos y 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 de fit_predict son los mismos que los de fit.

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 proporcionar fit_transform pero no transform.

Una de las razones para implementar fit_transform es que realizar fit y transform 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 que fit_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, reimplementa get_params para declarar los estimadores nombrados en sus parámetros steps como parámetros en sí mismos.

partial_fit

Facilita el ajuste de un estimador en línea. A diferencia de fit, llamar repetidamente a partial_fit no borra el modelo, sino que lo actualiza con los datos proporcionados. La porción de datos proporcionada a partial_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 cada partial_fit y no hay ningún procesamiento separado necesario para finalizar el modelo. cluster.Birch introduce la convención de que llamar a partial_fit(X) producirá un modelo que no está finalizado, pero el modelo puede ser finalizado llamando a partial_fit(), es decir, sin pasar un mini lote adicional.

Generalmente, los parámetros del estimador no deben ser modificados entre llamadas a partial_fit, aunque partial_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 de fit 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 cuando y pasado a fit es una lista u otro array-like, la salida de predict 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 a n_clusters - 1 si la muestra correspondiente está agrupada, y -1 si la muestra no está agrupada, como en cluster.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étodo predict, 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, en linear_model.SGDClassifier) o de los datos de entrenamiento (por ejemplo, en model_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 de set_params reflejará los parámetros modificados. La mayoría de los estimadores utilizan la implementación en base.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 en pipeline.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 hasta X.shape[0] - 1 de cualquier longitud, de forma que no aparezcan valores tanto en algún train_idx como en su correspondiente test_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 utiliza class_weight en tareas de salida múltiple (incluyendo multietiqueta), las ponderaciones se multiplican por las salidas (es decir, las columnas de y).

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 con utils.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 como multioutput.ClassifierChain o calibration.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 por utils.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 con utils.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 un exceptions.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 a fit, 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 de joblib.Memory (o un objeto con una interfaz similar, es decir, un método cache).

Los valores de memory se validan e interpretan con utils.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. Para n_jobs por debajo de -1, se utilizan (n_cpus + 1 + n_jobs). Por ejemplo, con n_jobs=-2, se utilizan todas las CPUs excepto una.

n_jobs es None por defecto, lo que significa no establecido; generalmente se interpretará como n_jobs=1, a menos que el contexto actual del backend joblib.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 de random_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 de random_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 entrada random_state y devolver una instancia de RandomState.

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 como refit puede ser utilizado para este propósito.

El parámetro scoring se valida e interpreta mediante metrics.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 predeterminada verbose.

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 (incrementando n_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 a fit; con partial_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 llamadas warm_start a fit 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 con preprocessing.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 en intercept_.

Cuando está disponible, feature_importances_ no suele proporcionarse también, pero puede calcularse como la norma de la entrada de cada característica en coef_.

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 en cluster.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.