Ответ 1
Похоже, что кэшированные данные повреждены. Попробуйте удалить их и загрузить снова (требуется некоторое время). Если не указано иначе, данные для "MINST original" должны быть в
~/scikit_learn_data/mldata/mnist-original.mat
Я пытаюсь запустить следующий код для краткого алгоритма машинного обучения:
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')
В этом фрагменте кода я пытаюсь прочитать набор данных "MNIST Original", присутствующий на mldata.org через sklearn. Это приводит к следующей ошибке (есть больше строк кода, но я получаю ошибку в этой конкретной строке):
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
Я пробовал исследовать в Интернете, но вряд ли есть какая-либо помощь. Любая экспертная помощь, связанная с решением этой ошибки, будет высоко оценена.
ТИА.
Похоже, что кэшированные данные повреждены. Попробуйте удалить их и загрузить снова (требуется некоторое время). Если не указано иначе, данные для "MINST original" должны быть в
~/scikit_learn_data/mldata/mnist-original.mat
Вот пример кода, как получить данные MNIST, готовые к использованию для 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
Я столкнулся с той же проблемой и нашел разный размер файла mnist-original.mat в разное время, пока я использую свой плохой Wi-Fi. Я переключился на LAN, и он работает нормально. Это может быть проблема с сетью.
Я скачал набор данных по этой ссылке
https://github.com/amplab/datascience-sp14/blob/master/lab7/mldata/mnist-original.mat
Затем я набрал эти строки
from sklearn.datasets import fetch_mldata
mnist = fetch_mldata('MNIST original', transpose_data=True, data_home='files')
*** путь (ваш рабочий каталог)/files/mldata/mnist-original.mat
Я надеюсь, вы поняли, это хорошо сработало для меня
Попробуйте следующее:
dataDict = fetch_mldata('MNIST original')
Это сработало для меня. Поскольку вы использовали синтаксис from ... import ...
, вы не должны добавлять datasets
при его использовании
Я также получал ошибку fetch_mldata() "IOError: не удалось прочитать байты". Вот решение; соответствующие строки кода
from sklearn.datasets.mldata import fetch_mldata
mnist = fetch_mldata('mnist-original', data_home='/media/Vancouver/apps/mnist_dataset/')
... обязательно измените "data_home" для вашего предпочтительного местоположения (каталога).
Вот script:
#!/usr/bin/python
# coding: utf-8
# Source:
# https://stackoverflow.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'
Если вы не указали data_home, программа просмотрит ${yourprojectpath}/mldata/minist-original.mat, вы можете загрузить программу и поместить файл в правильный путь
У меня тоже была эта проблема в прошлом. Из-за того, что набор данных довольно большой (около 55,4 МБ), я запускаю "fetch_mldata", но из-за интернет-соединения, чтобы загрузить их все, потребовалось некоторое время. Я не знал и не прерывал процесс.
Набор данных поврежден и поэтому произошла ошибка.
Помимо того, что упомянул @szymon, вы также можете загрузить набор данных, используя:
from six.moves import urllib
from sklearn.datasets import fetch_mldata
from scipy.io import loadmat
mnist_alternative_url = "https://github.com/amplab/datascience-sp14/raw/master/lab7/mldata/mnist-original.mat"
mnist_path = "./mnist-original.mat"
response = urllib.request.urlopen(mnist_alternative_url)
with open(mnist_path, "wb") as f:
content = response.read()
f.write(content)
mnist_raw = loadmat(mnist_path)
mnist = {
"data": mnist_raw["data"].T,
"target": mnist_raw["label"][0],
"COL_NAMES": ["label", "data"],
"DESCR": "mldata.org dataset: mnist-original",
}
Это 'MNIST original'. В нижнем регистре "o".