【问题标题】:Download sklearn datasets behind a proxy在代理后面下载 sklearn 数据集
【发布时间】:2019-12-03 12:25:11
【问题描述】:

我在我的环境中安装了 sklearn,现在在 windows 上的 jupyter notebook 上运行它。

如何避免错误:

URLError: urlopen 错误 [Errno 11004] getaddrinfo 失败

我正在运行以下代码:

import sklearn
import sklearn.ensemble
import sklearn.metrics
from sklearn.datasets import fetch_20newsgroups
categories = ['alt.atheism', 'soc.religion.christian']
newsgroups_train = fetch_20newsgroups(subset='train', categories=categories)

在第 5 行给出错误:

----> 3 newsgroups_train = fetch_20newsgroups(subset='train', categories=categories)

我在我的工作计算机上使用代理,是否有任何选项可以避免此错误并能够使用示例数据集?

【问题讨论】:

    标签: python scikit-learn


    【解决方案1】:

    根据source code,scikit-learn 将从以下位置下载文件:

    https://ndownloader.figshare.com/files/5975967
    

    我假设您无法从代理后面到达此位置。

    您可以通过其他方式访问数据集吗?如果是,那么您可以手动下载它,然后在其上运行以下脚本:

    并将其保存在该位置:

    ~/scikit_learn_data/
    

    这里的~ 指的是用户主文件夹。您可以使用以下代码根据您的系统了解该文件夹的默认位置。

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

    更新:完成后,使用以下脚本使其成为 scikit-learn 保留其缓存的形式

    import codecs, pickle, tarfile, shutil
    from sklearn.datasets import load_files
    
    data_folder = '~/scikit_learn_data/'
    target_folder = data_folder+'20news_home/'
    
    tarfile.open(data_folder+'20newsbydate.tar.gz', "r:gz").extractall(path=target_folder)
    cache = dict(train=load_files(target_folder+'20news-bydate-train', encoding='latin1'),
                 test=load_files(target_folder+'20news-bydate-test', encoding='latin1'))
    
    compressed_content = codecs.encode(pickle.dumps(cache), 'zlib_codec')
    
    with open(data_folder+'20news-bydate_py3.pkz', 'wb') as f:
        f.write(compressed_content)
    
    shutil.rmtree(target_folder)
    

    在尝试从 Internet 下载之前,Scikit-learn 将始终检查数据集是否存在于本地。为此,它将检查上述位置。

    之后就可以正常运行导入了。

    【讨论】:

    • 我下载了它,保存在我的主文件夹中的名称是什么?现在我将它保存为:20news-bydate.tar.gz,它会给出错误,主目录是正确的
    • @PV8 我已经更新了答案,请立即查看。我忽略了 scikit 会将下载的文件重新转换为 pkz 文件以加快访问速度这一事实。
    • 它可以工作,谢谢,但我认为我不需要命令 `shutil.rmtree(target folder) 这会导致错误
    • @PV8 仅用于删除提取的目录。如果你愿意,你可以排除它
    猜你喜欢
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 2014-05-31
    • 2016-06-13
    • 2022-12-21
    • 2016-06-25
    • 1970-01-01
    相关资源
    最近更新 更多