'Can't load 'mnist-original' dataset using sklearn [duplicate]
This question is similar to what asked here and here. Unfortunately, in my case the suggested solution didn't fix the problem.
I need to work with the MNIST dataset but I can't fetch it, even if I specify the address of the scikit_learn_data/mldata/ folder (see below). How can I fix this?
In case it might help, I'm using Anaconda.
Code:
from sklearn.datasets.mldata import fetch_mldata
dataset = fetch_mldata('mnist-original', data_home='/Users/michelangelo/scikit_learn_data/mldata/')
mnist = fetch_mldata('MNIST original')
Error:
---------------------------------------------------------------------------
IOError Traceback (most recent call last)
<ipython-input-5-dc4d45bc928e> in <module>()
----> 1 mnist = fetch_mldata('MNIST original')
/Users/michelangelo/anaconda2/lib/python2.7/site-packages/sklearn/datasets/mldata.pyc in fetch_mldata(dataname, target_name, data_name, transpose_data, data_home)
168 # load dataset matlab file
169 with open(filename, 'rb') as matlab_file:
--> 170 matlab_dict = io.loadmat(matlab_file, struct_as_record=True)
171
172 # -- extract data from matlab_dict
/Users/michelangelo/anaconda2/lib/python2.7/site-packages/scipy/io/matlab/mio.pyc in loadmat(file_name, mdict, appendmat, **kwargs)
134 variable_names = kwargs.pop('variable_names', None)
135 MR = mat_reader_factory(file_name, appendmat, **kwargs)
--> 136 matfile_dict = MR.get_variables(variable_names)
137 if mdict is not None:
138 mdict.update(matfile_dict)
/Users/michelangelo/anaconda2/lib/python2.7/site-packages/scipy/io/matlab/mio5.pyc in get_variables(self, variable_names)
290 continue
291 try:
--> 292 res = self.read_var_array(hdr, process)
293 except MatReadError as err:
294 warnings.warn(
/Users/michelangelo/anaconda2/lib/python2.7/site-packages/scipy/io/matlab/mio5.pyc in read_var_array(self, header, process)
250 `process`.
251 '''
--> 252 return self._matrix_reader.array_from_header(header, process)
253
254 def get_variables(self, variable_names=None):
mio5_utils.pyx in scipy.io.matlab.mio5_utils.VarReader5.array_from_header()
mio5_utils.pyx in scipy.io.matlab.mio5_utils.VarReader5.array_from_header()
mio5_utils.pyx in scipy.io.matlab.mio5_utils.VarReader5.read_real_complex()
mio5_utils.pyx in scipy.io.matlab.mio5_utils.VarReader5.read_numeric()
mio5_utils.pyx in scipy.io.matlab.mio5_utils.VarReader5.read_element()
streams.pyx in scipy.io.matlab.streams.FileStream.read_string()
IOError: could not read bytes
Solution 1:[1]
Unfortunately fetch_mldata() has been replaced in the latest version of sklearn as fetch_openml().
So, instead of using:
from sklearn.datasets import fetch_mldata
mnist = fetch_mldata('MNIST original')
You must use:
from sklearn.datasets import fetch_openml
mnist = fetch_openml('mnist_784')
x = mnist.data
y = mnist.target
shape of x will be = (70000,784)
shape of y will be = (70000,)
Solution 2:[2]
A quick update for the question here:
mldata.org seems to still be down. Then scikit-learn will remove fetch_mldata.
Solution for the moment: Since using the lines above will create a empty folder a the place of data_home, find the copy of the data here: https://github.com/amplab/datascience-sp14/blob/master/lab7/mldata/mnist-original.mat and download it. Then place it the ~/sklearn_data/mldata/ which is empty.
It worked for me.
Solution 3:[3]
Instead of :
from sklearn.datasets.mldata import fetch_mldata
use:
from sklearn.datasets import fetch_mldata
And then:
mnist = fetch_mldata('MNIST original')
X = mnist.data.astype('float64')
y = mnist.target
Please see this example:
Solution 4:[4]
For people having the same issue: it was a connection problem. If you get a similar error, check that you have the entire mnist-original.mat file, as suggested by @vivek-kumar. Current file size: 55.4 MB.
Solution 5:[5]
Just use these two lines:
from sklearn.datasets import fetch_openml
mnist = fetch_openml('mnist_784', version=1, cache=True)
Solution 6:[6]
In the latest sklearn version (0.21) use this:
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_digits
digits = load_digits()
X = digits.data
y = digits.target
Solution 7:[7]
try this:
print(sklearn.__version__)
try:
from sklearn.datasets import fetch_openml
mnist = fetch_openml('mnist_784', version=1, cache=True)
except ImportError:
from sklearn.datasets import fetch_mldata
mnist = fetch_mldata('MNIST original')
Solution 8:[8]
Try this one, this will work.
from sklearn.datasets import fetch_mldata
mnist = fetch_mldata('MNIST original')
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | sterne |
| Solution 2 | Golddy |
| Solution 3 | Vivek Kumar |
| Solution 4 | albus_c |
| Solution 5 | csaladenes |
| Solution 6 | desertnaut |
| Solution 7 | Masoud |
| Solution 8 |
