7.4. Cargando otros conjuntos de datos

7.4.1. Imágenes de ejemplo

Scikit-learn también incorpora un par de imágenes JPEG de muestra publicadas bajo licencia Creative Commons por sus autores. Estas imágenes pueden ser útiles para probar los algoritmos y las líneas de producción en datos 2D.

load_sample_images()

Cargar imágenes de muestra para la manipulación de imágenes.

load_sample_image(image_name)

Carga el arreglo numpy de una sola imagen de muestra

../_images/sphx_glr_plot_color_quantization_001.png

Advertencia

La codificación por defecto de las imágenes se basa en el dtype uint8 para ahorrar memoria. A menudo los algoritmos de aprendizaje automático funcionan mejor si la entrada se convierte primero a una representación de punto flotante. Además, si planeas usar matplotlib.pyplpt.imshow, no olvides escalar al rango 0 - 1 como se hace en el siguiente ejemplo.

7.4.2. Conjuntos de datos en formato svmlight / libsvm

scikit-learn incluye funciones de utilidad para cargar conjuntos de datos en el formato svmlight / libsvm. En este formato, cada línea tiene la forma <label> <feature-id>:<feature-value> <feature-id>:<feature-value> .... Este formato es especialmente adecuado para conjuntos de datos dispersos. En este módulo, se utilizan matrices CSR dispersas de scipy para X y arreglos de numpy para y.

Puedes cargar un conjunto de datos como los siguientes:

>>> from sklearn.datasets import load_svmlight_file
>>> X_train, y_train = load_svmlight_file("/path/to/train_dataset.txt")
...                                                         

También puedes cargar dos conjuntos de datos (o más) a la vez:

>>> X_train, y_train, X_test, y_test = load_svmlight_files(
...     ("/path/to/train_dataset.txt", "/path/to/test_dataset.txt"))
...                                                         

En este caso, se garantiza que X_train y X_test tengan el mismo número de características. Otra forma de lograr el mismo resultado es corregir el número de características:

>>> X_test, y_test = load_svmlight_file(
...     "/path/to/test_dataset.txt", n_features=X_train.shape[1])
...                                                         

Enlaces relacionados:

_`Conjuntos de datos públicos en formato svmlight / libsvm: https://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets

Implementación más rápida compatible con API: https://github.com/mblondel/svmlight-loader

7.4.3. Descargando conjuntos de datos desde el repositorio openml.org

openml.org es un repositorio público para datos de aprendizaje automático y experimentos, que permite a todos subir conjuntos de datos abiertos.

El paquete sklearn.datasets es capaz de descargar conjuntos de datos del repositorio usando la función sklearn.datasets.fetch_openml.

Por ejemplo, para descargar un conjunto de datos de expresiones genéticas en cerebros de ratones:

>>> from sklearn.datasets import fetch_openml
>>> mice = fetch_openml(name='miceprotein', version=4)

Para especificar completamente un conjunto de datos, debes proporcionar un nombre y una versión, aunque la versión es opcional, ver Versiones del conjunto de datos a continuación. El conjunto de datos contiene un total de 1080 ejemplos pertenecientes a 8 clases diferentes:

>>> mice.data.shape
(1080, 77)
>>> mice.target.shape
(1080,)
>>> np.unique(mice.target)
array(['c-CS-m', 'c-CS-s', 'c-SC-m', 'c-SC-s', 't-CS-m', 't-CS-s', 't-SC-m', 't-SC-s'], dtype=object)

Puedes obtener más información sobre el conjunto de datos mirando los atributos DESCR y details:

>>> print(mice.DESCR) 
**Author**: Clara Higuera, Katheleen J. Gardiner, Krzysztof J. Cios
**Source**: [UCI](https://archive.ics.uci.edu/ml/datasets/Mice+Protein+Expression) - 2015
**Please cite**: Higuera C, Gardiner KJ, Cios KJ (2015) Self-Organizing
Feature Maps Identify Proteins Critical to Learning in a Mouse Model of Down
Syndrome. PLoS ONE 10(6): e0129126...

>>> mice.details 
{'id': '40966', 'name': 'MiceProtein', 'version': '4', 'format': 'ARFF',
'upload_date': '2017-11-08T16:00:15', 'licence': 'Public',
'url': 'https://www.openml.org/data/v1/download/17928620/MiceProtein.arff',
'file_id': '17928620', 'default_target_attribute': 'class',
'row_id_attribute': 'MouseID',
'ignore_attribute': ['Genotype', 'Treatment', 'Behavior'],
'tag': ['OpenML-CC18', 'study_135', 'study_98', 'study_99'],
'visibility': 'public', 'status': 'active',
'md5_checksum': '3c479a6885bfa0438971388283a1ce32'}

El DESCR contiene una descripción de texto libre de los datos, mientras que details contiene un diccionario de metadatos almacenados por openml, como el id del conjunto de datos. Para más detalles, consulta la documentación de OpenML <https://docs.openml.org/#data>`_ El data_id del conjunto de datos de proteínas de ratones es 40966, y puede utilizarlo (o el nombre) para obtener más información sobre el conjunto de datos en el sitio web de openml:

>>> mice.url
'https://www.openml.org/d/40966'

El data_id también identifica de forma única un conjunto de datos de OpenML:

>>> mice = fetch_openml(data_id=40966)
>>> mice.details 
{'id': '4550', 'name': 'MiceProtein', 'version': '1', 'format': 'ARFF',
'creator': ...,
'upload_date': '2016-02-17T14:32:49', 'licence': 'Public', 'url':
'https://www.openml.org/data/v1/download/1804243/MiceProtein.ARFF', 'file_id':
'1804243', 'default_target_attribute': 'class', 'citation': 'Higuera C,
Gardiner KJ, Cios KJ (2015) Self-Organizing Feature Maps Identify Proteins
Critical to Learning in a Mouse Model of Down Syndrome. PLoS ONE 10(6):
e0129126. [Web Link] journal.pone.0129126', 'tag': ['OpenML100', 'study_14',
'study_34'], 'visibility': 'public', 'status': 'active', 'md5_checksum':
'3c479a6885bfa0438971388283a1ce32'}

7.4.3.1. Versiones del conjunto de datos

Un conjunto de datos se especifica de forma exclusiva por su data_id, pero no necesariamente por su nombre. Pueden existir varias «versiones» diferentes de un conjunto de datos con el mismo nombre que pueden contener conjuntos de datos totalmente diferentes. Si se descubre que una versión concreta de un conjunto de datos contiene problemas importantes, puede desactivarse. Si se utiliza un nombre para especificar un conjunto de datos, se obtendrá la versión más antigua de un conjunto de datos que aún esté activa. Esto significa que fetch_openml(name="miceprotein") puede dar diferentes resultados en diferentes momentos si las versiones anteriores se vuelven inactivas. Puedes ver que el conjunto de datos con data_id 40966 que hemos obtenido arriba es la primera versión del conjunto de datos «miceprotein»:

>>> mice.details['version']  
'1'

De hecho, este conjunto de datos sólo tiene una versión. El conjunto de datos iris por otro lado tiene múltiples versiones:

>>> iris = fetch_openml(name="iris")
>>> iris.details['version']  
'1'
>>> iris.details['id']  
'61'

>>> iris_61 = fetch_openml(data_id=61)
>>> iris_61.details['version']
'1'
>>> iris_61.details['id']
'61'

>>> iris_969 = fetch_openml(data_id=969)
>>> iris_969.details['version']
'3'
>>> iris_969.details['id']
'969'

Al especificar el conjunto de datos por el nombre «iris» se obtiene la versión más baja, la versión 1, con el data_id 61. Para asegurarte de obtener siempre este conjunto de datos exacto, lo más seguro es especificarlo por el conjunto de datos data_id. El otro conjunto de datos, con data_id 969, es la versión 3 (la versión 2 ha quedado inactiva), y contiene una versión binarizada de los datos:

>>> np.unique(iris_969.target)
array(['N', 'P'], dtype=object)

También puedes especificar tanto el nombre como la versión, que también identifica de forma única el conjunto de datos:

>>> iris_version_3 = fetch_openml(name="iris", version=3)
>>> iris_version_3.details['version']
'3'
>>> iris_version_3.details['id']
'969'

Referencias:

7.4.4. Cargando desde conjuntos de datos externos

scikit-learn funciona con cualquier dato numérico almacenado como arreglos numpy o matrices dispersas scipy. Otros tipos que son convertibles a arreglos numéricos como DataFrame de pandas también son aceptables.

Aquí hay algunas formas recomendadas de cargar datos de columnas estándar en un formato utilizable por scikit-learn:

  • pandas.io proporciona herramientas para leer datos desde formatos comunes como CSV, Excel, JSON y SQL. Los DataFrames también pueden construirse a partir de listas de tuplas o dicts. Pandas maneja datos heterogéneos sin problemas y proporciona herramientas para la manipulación y la conversión en una matriz numérica adecuada para scikit-learn.

  • scipy.io se especializa en formatos binarios a menudo utilizados en el contexto científico de computación como .mat y .arff

  • numpy/routines.io para la carga estándar de datos columnares en arreglos numpy

  • datasets.load_svmlight_file de scikit-learn para el formato svmlight o libSVM disperso

  • datasets.load_files de scikit-learn para directorios de archivos de texto donde el nombre de cada directorio es el nombre de cada categoría y cada archivo dentro de cada directorio corresponde a una muestra de esa categoría

Para algunos datos variados como imágenes, vídeos y audio, puedes referirte a:

Características categóricas (o nominales) almacenadas como cadenas (comunes en DataFrames de pandas) necesitarán convertir a características numéricas usando OneHotEncoder o OrdinalEncoder o similar. Ver Preprocesamiento de los datos.

Nota: si administras tus propios datos numéricos se recomienda utilizar un formato de archivo optimizado como HDF5 para reducir los tiempos de carga de datos. Varias bibliotecas como H5Py, PyTables y pandas proporcionan una interfaz Python para leer y escribir datos en ese formato.