目的
scikit-learn(sklearn)でデータセットをダウンロードする際に使われるfetch_mldata関数(sklearn.datasets.fetch_mldata)のエラーを解決する。
エラー例
urllib.error.URLError: <urlopen error [WinError 10060] 接続済みの呼び出し先が一定の時間を過ぎても正しく応答しなかったため、接続できませんでした。または接続済みのホストが応答しなかったため、確立された接続は失敗しました。>
環境
sklearn(scikit-learn):version 0.21.2
解決法
fetch_mldataが非推奨となり、代わりにfetch_openmlが作成されたため、fetch_openmlを使用します。
なお、fetch_mldataはversion 0.22で削除されます。
sklearn.datasets.fetch_mldata to be removed in version 0.22.
具体例
scikit-learnは様々なデータセットをダウンロードできますが、ここではmnistのデータセットをダウンロードする例を示します。
また、言語はPythonを使用しています。
エラー時のソースコード
from sklearn.datasets import fetch_mldata
mnist = fetch_mldata("MNIST original", data_home=".")
x_all = mnist['data'].astype(np.float32) / 255
y_all = mnist['target'].astype(np.int32)
修正後のソースコード
fetch_openmlでは、fetch_mldataで使用していたデータセット名と異なっている場合があるため、注意してください。
from sklearn.datasets import fetch_openml
mnist_X, mnist_y = fetch_openml('mnist_784', version=1, data_home=".", return_X_y=True)
x_all = mnist_X.astype(np.float32) / 255
y_all = mnist_y.astype(np.int32)