从 sklearn 数据集下载 MNIST 数据会出现超时错误

MNIST data download from sklearn datasets gives Timeout error

我是 ML 新手,正在尝试下载 MNIST 数据。我使用的代码是:

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

但是,它给出了一个错误提示:

TimeoutError: [WinError 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond

谁能帮我解决这个问题需要做什么?

这是问题所在,好心人建议了一些解决方法:

https://github.com/scikit-learn/scikit-learn/issues/8588

最简单的方法是通过此下载下载 MNIST 的 .mat 文件 link:

download MNIST.mat

下载后将文件放入 ~/scikit_learn_data/mldata 文件夹,如果该文件夹不存在,请创建它并将 Mnist.mat 放入其中。当你在本地拥有它们时,scikit learn 不会下载它并使用该文件。

虽然我不确定您收到错误的原因,但您可以尝试以下可能的方法来纠正错误。

  1. 有时,数据可能会在第一次下载时损坏。在这种情况下,您需要清除缓存,您可以从 scikit 数据主目录 中删除该缓存。要获取此目录,您可以使用 -

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

现在清理目录,重新下载。

  1. 如果问题仍然存在,您可以参考以下链接进行一些试错以检查您的问题。

https://github.com/ageron/handson-ml/issues/143

https://github.com/scikit-learn/scikit-learn/issues/8588

https://github.com/ageron/handson-ml/issues/8

如果您仍然遇到问题,我想请您提供详细的回溯以帮助我确定问题。

谢谢!!

由于 fetch_mldata 已被弃用,我们将不得不移至 fetch_openml。确保将您的 scikit-learn 更新到版本 0.20.0 或更高版本,以便 openml 正常工作。

  1. openml 目前有 5 个不同的数据集与 MNIST 数据集相关。 这是 sklearn's document 使用 mnist-784 数据集的一个示例。
from sklearn.datasets import fetch_openml
# Load data from https://www.openml.org/d/554
X, y = fetch_openml('mnist_784', version=1, return_X_y=True)
  1. 或者如果你不需要非常大的数据集,你可以使用load_digits:
from sklearn.datasets  import load_digits
mnist = load_digits()

请注意,如果您正在阅读 Hands-On Machine Learning with Scikit-Learn and TensorFlow 一书,以及 mnist-784 数据集,您可能会注意到代码

some_digit = X[36000]
some_digit_image = some_digit.reshape(28, 28)
plt.imshow(some_digit_image, cmap=matplotlib.cm.binary, interpolation="nearest")
plt.axis('off')
plt.show()

returns一张9而不是5的图片。我猜,可能是mnist-784和mnist original是nist数据的两个子集,或者数据顺序不同两个数据集。

PS: 我在尝试加载数据时遇到了一些关于 ssl 的错误,在我的情况下,我更新了 openssl 并且问题已经解决。

如果您的 sklearn 版本低于 .19,则“fetch_mldata”将不起作用。您需要将 sklearn 升级到版本 .23