sklearn学习之加载本地数据

问题提出

使用python的第三方机器学习库sklearn进行练习时,经常需要下载在线的数据压缩包,由于下载地址在国外,在没有梯子的前提下很难下载,或者下载一个几百兆的文件需要一两个小时,很消耗学习者的耐心和热情。

本文提出的问题是:当通过其他途径(爬梯子或者从他人提供的网盘中)下载到了数据压缩包之后,如何导入(重点)本地已下载的文件,进行机器学习的模型训练和测试、预测。

本文案例背景:使用 sklearn.datasetsfetch_20newsgroups 方法下载需要大量时间,之后通过网盘下载了训练数据压缩包 20news-bydate.tar.gz,下面就 如何加载已下载文件 20news-bydate.tar.gz 进行说明。

环境信息:

python程序安装路径:
C:\Program Files\Python37

操作系统:
windows10

解决方法

通过查看 sklearn 模块(路径 “C:\Program Files\Python37\Lib\site-packages\sklearn”)的源码可知, fetch_20newsgroups 方法调用了 twenty_newsgroups.py 文件(路径 “C:\Program Files\Python37\Lib\site-packages\sklearn\datasets\twenty_newsgroups.py”)中的 _download_20newsgroups 方法,对该方法进行一些修改即可,具体修改如下:
原内容

    logger.info("Downloading dataset from %s (14 MB)", ARCHIVE.url)
    archive_path = _fetch_remote(ARCHIVE, dirname=target_dir)

修改为:

    archive_path = os.path.join(target_dir,'20news-bydate.tar.gz')
    if not os.path.exists(archive_path):
        logger.info("Downloading dataset from %s (14 MB)", ARCHIVE.url)
        archive_path = _fetch_remote(ARCHIVE, dirname=target_dir)

修改之后,保存文件。

代码解释

在下载压缩包文件之前,会检测对应位置(后面说明具体路径)的压缩包文件是否已经存在,如果存在就跳过下载过程,不存在则进行下载。
那么对应位置指的是哪里呢,这里需要传入一个参数名为 data_home 、参数值为文件夹名字(例如scikit_learn_data)到 _download_20newsgroups 方法,其实就是把文件名传给 fetch_20newsgroups 方法,在调用脚本文件(完整名称“g:\test.py”)之前,需要确保(或建立)文件夹(“g:\scikit_learn_data\20news_home”)存在,将已下载的文件 20news-bydate.tar.gz 放入文件夹中,即确保文件(“g:\scikit_learn_data\20news_home\20news-bydate.tar.gz”)存在。

下面为调用脚本内容举例:

from sklearn.datasets import fetch_20newsgroups
from sklearn.naive_bayes import MultinomialNB
from sklearn.feature_extraction import text

def Naive_Bayes():
    nb=MultinomialNB()
    datas=fetch_20newsgroups(subset="all", data_home="scikit_learn_data")
    x_train, x_test, y_train, y_test = train_test_split(datas.data, datas.target, test_size=0.25)
    tf=text.TfidfVectorizer()
    x_train = tf.fit_transform(x_train)
    x_test = tf.transform(x_test)
    nb.fit(x_train, y_train)
    y_predict = nb.predict(x_test)
    score = nb.score(x_test,y_test)
    print(score)



if __name__ == '__main__':
    Naive_Bayes()

上述方法仅为举例,但是具有一定的通用性,感兴趣的朋友可以参考修改sklearn.datasets 中的其他方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值