无法使用 sklearn 加载 'mnist-original' 数据集
Can't load 'mnist-original' dataset using sklearn
这个问题和here and here的问题很相似。不幸的是,就我而言,建议的解决方案并未解决问题。
我需要使用 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
而不是:
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
请看这个例子:
对于遇到同样问题的人:这是一个连接问题。如果您遇到类似的错误,请按照@vivek-kumar 的建议检查您是否拥有整个 mnist-original.mat
文件。当前文件大小:55.4 MB。
我刚遇到同样的问题,我花了一些时间才找到问题所在。一个原因是,数据在第一次下载时可能会损坏。删除缓存的数据。找到 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?
此处问题的快速更新:
mldata.org 好像还在下。然后 scikit-learn 将删除 fetch_mldata.
暂时解决:
由于使用上面的行将在 data_home 的位置创建一个空文件夹,请在此处找到数据的副本:https://github.com/amplab/datascience-sp14/blob/master/lab7/mldata/mnist-original.mat 并下载它。然后将其放置在空的 ~/sklearn_data/mldata/ 中。
对我有用。
试试这个,它会起作用。
from sklearn.datasets import fetch_mldata
mnist = fetch_mldata('MNIST original')
在最新 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
不幸的是,fetch_mldata() 在最新版本的 sklearn 中已被替换为 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,)
只需使用这两行:
from sklearn.datasets import fetch_openml
mnist = fetch_openml('mnist_784', version=1, cache=True)
试试这个:
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')
这个问题和here and here的问题很相似。不幸的是,就我而言,建议的解决方案并未解决问题。
我需要使用 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
而不是:
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
请看这个例子:
对于遇到同样问题的人:这是一个连接问题。如果您遇到类似的错误,请按照@vivek-kumar 的建议检查您是否拥有整个 mnist-original.mat
文件。当前文件大小:55.4 MB。
我刚遇到同样的问题,我花了一些时间才找到问题所在。一个原因是,数据在第一次下载时可能会损坏。删除缓存的数据。找到 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?
此处问题的快速更新:
mldata.org 好像还在下。然后 scikit-learn 将删除 fetch_mldata.
暂时解决: 由于使用上面的行将在 data_home 的位置创建一个空文件夹,请在此处找到数据的副本:https://github.com/amplab/datascience-sp14/blob/master/lab7/mldata/mnist-original.mat 并下载它。然后将其放置在空的 ~/sklearn_data/mldata/ 中。
对我有用。
试试这个,它会起作用。
from sklearn.datasets import fetch_mldata
mnist = fetch_mldata('MNIST original')
在最新 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
不幸的是,fetch_mldata() 在最新版本的 sklearn 中已被替换为 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,)
只需使用这两行:
from sklearn.datasets import fetch_openml
mnist = fetch_openml('mnist_784', version=1, cache=True)
试试这个:
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')