【问题标题】:Why does using X[0] in MNIST classifier code give me an error?为什么在 MNIST 分类器代码中使用 X[0] 会给我一个错误?
【发布时间】:2021-04-06 21:47:56
【问题描述】:

我正在学习使用 MNIST 数据集进行分类。我遇到了一个我无法弄清楚的错误,我已经做了很多谷歌搜索,但我什么也做不了,也许你是专家,可以帮助我。这是代码--

>>> from sklearn.datasets import fetch_openml
>>> mnist = fetch_openml('mnist_784', version=1)
>>> mnist.keys()

输出: dict_keys(['data', 'target', 'frame', 'categories', 'feature_names', 'target_names', 'DESCR', 'details', 'url'])

>>> X, y = mnist["data"], mnist["target"]
>>> X.shape

输出:(70000, 784)

>>> y.shape

输出:(70000)

>>> X[0]

output:KeyError                                  Traceback (most recent call last)
c:\users\khush\appdata\local\programs\python\python39\lib\site-packages\pandas\core\indexes\base.py in get_loc(self, key, method, tolerance)
   2897             try:
-> 2898                 return self._engine.get_loc(casted_key)
   2899             except KeyError as err:

pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas\_libs\hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()

pandas\_libs\hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()

KeyError: 0

The above exception was the direct cause of the following exception:

KeyError                                  Traceback (most recent call last)
<ipython-input-10-19c40ecbd036> in <module>
----> 1 X[0]

c:\users\khush\appdata\local\programs\python\python39\lib\site-packages\pandas\core\frame.py in __getitem__(self, key)
   2904             if self.columns.nlevels > 1:
   2905                 return self._getitem_multilevel(key)
-> 2906             indexer = self.columns.get_loc(key)
   2907             if is_integer(indexer):
   2908                 indexer = [indexer]

c:\users\khush\appdata\local\programs\python\python39\lib\site-packages\pandas\core\indexes\base.py in get_loc(self, key, method, tolerance)
   2898                 return self._engine.get_loc(casted_key)
   2899             except KeyError as err:
-> 2900                 raise KeyError(key) from err
   2901 
   2902         if tolerance is not None:

KeyError: 0

请回答,因为我是 ML 的初学者,所以可能会犯一个愚蠢的错误。如果您也给我一些提示,那将非常有帮助。

【问题讨论】:

  • 我们在访问字典时通常会得到KeyError,这似乎X 是一个字典,尝试打印X 看看它包含什么

标签: machine-learning mnist


【解决方案1】:

fetch_openml 的 API 因版本而异。在早期版本中,它返回一个numpy.ndarray 数组。自 0.24.0(2020 年 12 月)以来,fetch_openmlas_frame 参数设置为 auto(而不是之前的默认选项 False),这将为您提供 MNIST 数据的 pandas.DataFrame。您可以通过设置as_frame = False 强制将数据读取为numpy.ndarray。见fetch_openml reference

【讨论】:

  • 是的,我使用的是较旧的 numpy 版本,因为使用较新的版本会给我一个运行时错误。顺便说一句,非常感谢。
【解决方案2】:

如果您遵循以下代码,则无需降级 scikit-learn 库:

from sklearn.datasets import fetch_openml
mnist = fetch_openml('mnist_784', version= 1, as_frame= False)
mnist.keys()

【讨论】:

    【解决方案3】:

    我也遇到了同样的问题。

    • scikit-learn:0.24.0
    • matplotlib:3.3.3
    • Python:3.9.1

    我用下面的代码来解决这个问题。

    import matplotlib as mpl
    import matplotlib.pyplot as plt
    
    
    # instead of some_digit = X[0]
    some_digit = X.to_numpy()[0]
    some_digit_image = some_digit.reshape(28,28)
    
    plt.imshow(some_digit_image,cmap="binary")
    plt.axis("off")
    plt.show()
    

    【讨论】:

    • 太好了,您正在使用“使用 scikit-learn tensorflow 和 Keras 进行机器学习手把手”这本书吗?我正在使用相同的。
    • 是的,我刚开始看这本书。如果它解决了问题,您也可以接受答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-18
    • 2017-05-28
    • 1970-01-01
    • 2021-05-24
    相关资源
    最近更新 更多