【scikit-learn基础】--『数据加载』之外部数据集
这是scikit-learn
数据加载系列的最后一篇,本篇介绍如何加载外部的数据集。
外部数据集不像之前介绍的几种类型的数据集那样,针对每种数据提供对应的接口,每个接口加载的数据都是固定的。
而外部数据集加载之后,数据的字段和类型是不确定的。
简单来说,我们在实际的数据分析工作中,用到的是外部数据集加载,
在学习数据分析时,更多用到的是前面介绍的数据加载:
- 玩具数据集:【scikit-learn基础】--『数据加载』之玩具数据集
- 真实数据集:【scikit-learn基础】--『数据加载』之真实数据集
- 样本生成器:【scikit-learn基础】--『数据加载』之样本生成器
1. openml.org 数据集
openml.org
网站上提供了丰富的用于机器学习的数据集,目前已经有5300多个各类数据集。
通过scikit-learn
加载openml.org
的数据集非常简单,
先在网站上找到自己感兴趣的数据集,然后根据其名称即可加载。
比如,下面的示例代码加载了一个关于糖尿病的数据集(diabetes
)。
from sklearn.datasets import fetch_openml
data = fetch_openml(name='diabetes', version=1, parser="auto")
data
有的数据集有多个版本,通过 version
参数指定需要加载哪个版本。
2. svmlight / libsvm 格式数据
svmlight/libsvm
格式是一种用于存储训练好的支持向量机(SVM
)模型和数据集。
这种格式的特点是每一行都采用表格形式,以空格或者制表符分隔,适用于稀疏数据集。
scikit-learn
中,加载svmlight/libsvm
格式的数据使用load_svmlight_file
函数。
import requests
import io
from sklearn.datasets import load_svmlight_file
# 一个在线的 svm 数据
url = "https://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/binary/a1a"
res = requests.get(url)
# 加载svmlight/libsvm格式的数据文件
X, y = load_svmlight_file(io.BytesIO(res.content))
# 打印特征数和样本数
print("特征数:", X.shape[1])
print("样本数:", X.shape[0])
# 运行结果:
特征数: 119
样本数: 1605
由于load_svmlight_file
不支持直接加载网络文件,所以先通过 requests
库获取数据,
然后将数据转换为IO数据流,再传入函数load_svmlight_file
中。
3. 对接其他库
Python
中用于数据分析的库最常用的当属pandas
,numpy
和scipy
。scikit-learn
可以直接使用这些库所加载的数据,这就让scikit-learn
加载数据的能力直接站在了巨人的肩膀上。
比如,scikit-learn
可以直接使用通过 pandas.io
模块来加载的数据,
也就是支持CSV
,JSON
,HTML
,XML
,EXCEL
,HDF5
,SQL
等等各种格式。
还有通过numpy/routines.io
加载的列式数据,
以及通过 scipy.io
模块加载的科学计算环境中经常使用的二进制格式,如.mat
和.arff
。
4. 总结
scikit-learn
库的数据加载系列至此告一段落。
我们在掌握机器学习算法的过程中,自然而然的会将注意点放在算法的原理和各种参数上,
但是,一份好的数据能够帮助我们更加直观的了解到机器学习算法的运行过程。
scikit-learn
提供的各类丰富的数据集绝对是学习算法的一大助力。
我觉得库本身所提供的丰富的数据集也是scikit-learn
库相较于其他机器学习库的一大特色和优势。