python - scikit - ¿Cómo usar datasets.fetch_mldata() en sklearn?
sklearn import mnist (7)
Eso es ''MNIST original''. Con una minúscula en "o".
Estoy intentando ejecutar el siguiente código para un breve algoritmo de aprendizaje automático:
import re
import argparse
import csv
from collections import Counter
from sklearn import datasets
import sklearn
from sklearn.datasets import fetch_mldata
dataDict = datasets.fetch_mldata(''MNIST Original'')
En este fragmento de código, estoy tratando de leer el conjunto de datos ''MNIST Original'' presente en mldata.org a través de sklearn. Esto da como resultado el siguiente error (hay más líneas de código pero obtengo un error en esta línea en particular):
Traceback (most recent call last):
File "C:/Program Files (x86)/JetBrains/PyCharm 2.7.3/helpers/pydev/pydevd.py", line 1481, in <module>
debugger.run(setup[''file''], None, None)
File "C:/Program Files (x86)/JetBrains/PyCharm 2.7.3/helpers/pydev/pydevd.py", line 1124, in run
pydev_imports.execfile(file, globals, locals) #execute the script
File "C:/Users/sony/PycharmProjects/Machine_Learning_Homework1/zeroR.py", line 131, in <module>
dataDict = datasets.fetch_mldata(''MNIST Original'')
File "C:/Anaconda/lib/site-packages/sklearn/datasets/mldata.py", line 157, in fetch_mldata
matlab_dict = io.loadmat(matlab_file, struct_as_record=True)
File "C:/Anaconda/lib/site-packages/scipy/io/matlab/mio.py", line 176, in loadmat
matfile_dict = MR.get_variables(variable_names)
File "C:/Anaconda/lib/site-packages/scipy/io/matlab/mio5.py", line 294, in get_variables
res = self.read_var_array(hdr, process)
File "C:/Anaconda/lib/site-packages/scipy/io/matlab/mio5.py", line 257, in read_var_array
return self._matrix_reader.array_from_header(header, process)
File "mio5_utils.pyx", line 624, in scipy.io.matlab.mio5_utils.VarReader5.array_from_header (scipy/io/matlab/mio5_utils.c:5717)
File "mio5_utils.pyx", line 653, in scipy.io.matlab.mio5_utils.VarReader5.array_from_header (scipy/io/matlab/mio5_utils.c:5147)
File "mio5_utils.pyx", line 721, in scipy.io.matlab.mio5_utils.VarReader5.read_real_complex (scipy/io/matlab/mio5_utils.c:6134)
File "mio5_utils.pyx", line 424, in scipy.io.matlab.mio5_utils.VarReader5.read_numeric (scipy/io/matlab/mio5_utils.c:3704)
File "mio5_utils.pyx", line 360, in scipy.io.matlab.mio5_utils.VarReader5.read_element (scipy/io/matlab/mio5_utils.c:3429)
File "streams.pyx", line 181, in scipy.io.matlab.streams.FileStream.read_string (scipy/io/matlab/streams.c:2711)
IOError: could not read bytes
He intentado investigar en Internet, pero apenas hay ayuda disponible. Cualquier ayuda experta relacionada con la solución de este error será muy apreciada.
TIA.
Pruébalo así:
dataDict = fetch_mldata(''MNIST original'')
Esto funcionó para mí. Como usaste la sintaxis from ... import ...
, no deberías anteponer datasets
cuando lo usas
Parece que los datos en caché están corruptos. Intenta eliminarlos y vuelve a descargarlos (lleva un momento). Si no se especifica de manera diferente, los datos para ''MINST original'' deberían estar en
~/scikit_learn_data/mldata/mnist-original.mat
Aquí hay un código de ejemplo de cómo preparar los datos de MNIST para sklearn:
def get_data():
"""
Get MNIST data ready to learn with.
Returns
-------
dict
With keys ''train'' and ''test''. Both do have the keys ''X'' (features)
and''y'' (labels)
"""
from sklearn.datasets import fetch_mldata
mnist = fetch_mldata(''MNIST original'')
x = mnist.data
y = mnist.target
# Scale data to [-1, 1] - This is of mayor importance!!!
x = x/255.0*2 - 1
from sklearn.cross_validation import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y,
test_size=0.33,
random_state=42)
data = {''train'': {''X'': x_train,
''y'': y_train},
''test'': {''X'': x_test,
''y'': y_test}}
return data
También recibí un error fetch_mldata () "IOError: could not read bytes". Aquí está la solución; las líneas de código relevantes son
from sklearn.datasets.mldata import fetch_mldata
mnist = fetch_mldata(''mnist-original'', data_home=''/media/Vancouver/apps/mnist_dataset/'')
... asegúrese de cambiar ''data_home'' para su ubicación preferida (directorio).
Aquí hay un script:
#!/usr/bin/python
# coding: utf-8
# Source:
# https://.com/questions/19530383/how-to-use-datasets-fetch-mldata-in-sklearn
# ... modified, below, by Victoria
"""
pers. comm. (Jan 27, 2016) from MLdata.org MNIST dataset contactee "Cheng Ong:"
The MNIST data is called ''mnist-original''. The string you pass to sklearn
has to match the name of the URL:
from sklearn.datasets.mldata import fetch_mldata
data = fetch_mldata(''mnist-original'')
"""
def get_data():
"""
Get MNIST data; returns a dict with keys ''train'' and ''test''.
Both have the keys ''X'' (features) and ''y'' (labels)
"""
from sklearn.datasets.mldata import fetch_mldata
mnist = fetch_mldata(''mnist-original'', data_home=''/media/Vancouver/apps/mnist_dataset/'')
x = mnist.data
y = mnist.target
# Scale data to [-1, 1]
x = x/255.0*2 - 1
from sklearn.cross_validation import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y,
test_size=0.33, random_state=42)
data = {''train'': {''X'': x_train, ''y'': y_train},
''test'': {''X'': x_test, ''y'': y_test}}
return data
data = get_data()
print ''/n'', data, ''/n''
Si no proporcionó el programa data_home, busque el $ {yourprojectpath} /mldata/minist-original.mat, puede descargar el programa y colocar el archivo en la ruta correcta.
Experimenté el mismo problema y encontré diferentes tamaños de archivo de mnist-original.mat en diferentes momentos mientras uso mi WiFi pobre. Cambié a LAN y funciona bien. Tal vez sea el tema de las redes.