无法加载原始版本'使用sklearn的数据集

时间:2017-11-16 08:32:04

标签: python scikit-learn mnist

此问题类似于herehere提出的问题。不幸的是,在我的情况下,建议的解决方案并没有解决问题。

我需要使用MNIST数据集但我无法获取它,即使我指定了scikit_learn_data/mldata/文件夹的地址(见下文)。我该如何解决这个问题?

如果有帮助,我会使用Anaconda。

代码:

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')

错误:

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

8 个答案:

答案 0 :(得分:3)

我只是遇到了同样的问题,所以花了一些时间才找到问题。一个原因是,首次下载期间数据可能会损坏。删除缓存的数据。找到scikit数据主目录,如下所示:

from sklearn.datasets.base import get_data_home 
print (get_data_home())

清理目录并重新下载数据集。这个解决方案对我有用。 以供参考: https://github.com/ageron/handson-ml/issues/143

这也与以下问题有关: How to use datasets.fetch_mldata() in sklearn?

答案 1 :(得分:3)

不幸的是,在最新版本的sklearn中,fetch_mldata()已替换为fetch_openml()。

因此,不要使用:

from sklearn.datasets import fetch_mldata()
mnist = fetch_mldata('MNIST original')

您必须使用:

from sklearn.datasets import fetch_openml()
mnist = fetch_openml('mnist_784')
x = mnist.data
y = mnist.target

x的形状将为=(70000,784)
y的形状将为=(70000,)

答案 2 :(得分:2)

最新 sklearn版本(0.21)中,使用以下命令:

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

答案 3 :(得分:2)

只需使用这两行:

from sklearn.datasets import fetch_openml
mnist = fetch_openml('mnist_784', version=1, cache=True)

答案 4 :(得分:1)

而不是:

from sklearn.datasets.mldata import fetch_mldata

使用:

from sklearn.datasets import fetch_mldata

然后:

mnist = fetch_mldata('MNIST original')
X = mnist.data.astype('float64')
y = mnist.target

请看这个例子:

答案 5 :(得分:1)

对于遇到相同问题的人:这是一个连接问题。如果您收到类似错误,请检查您是否拥有@ vivek-kumar建议的整个mnist-original.mat文件。当前文件大小:55.4 MB。

答案 6 :(得分:1)

此处的问题的快速更新:

mldata.org似乎仍然崩溃。然后scikit-learn将删除fetch_mldata。

目前的解决方案: 由于使用上述各行将在data_home的位置创建一个空文件夹,因此请在此处找到数据副本:https://github.com/amplab/datascience-sp14/blob/master/lab7/mldata/mnist-original.mat并下载。然后将其放置为〜/ sklearn_data / mldata /,它为空。

对我有用。

答案 7 :(得分:-1)

尝试一下,这将起作用。

from sklearn.datasets import fetch_mldata
mnist = fetch_mldata('MNIST original')