推荐阅读时间:10min~12min 文章内容:通过sklearn下载机器学习所用数据集
1简介
数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。
sklearn 中提供了很多常用(或高级)的模型和算法,但是真正决定一个模型效果的最后还是取决于训练(喂养)模型时所用的数据。sklearn 中的 sklearn.datasets
模块包含了数据生成相关的功能。主要包含以下几种类型的数据集:
2玩具(样本)数据集
sklearn 内置有一些小型标准数据集,不需要从某个外部网站下载任何文件。这些API统一的格式为:sklearn.datasets.load_<name>
。
方法名 | 返回数据 | 用途 |
---|---|---|
load_boston([return_X_y]) | 波士顿房价数据 | 回归 |
load_iris([return_X_y]) | 鸢尾花数据 | 分类 |
load_diabetes([return_X_y]) | 糖尿病数据集 | 回归 |
load_linnerud([return_X_y]) | Linnerrud 数据集 | 多标签回归 |
load_breast_cancer([return_X_y]) | 乳腺癌数据集 | 分类 |
load_wine([return_X_y]) | 葡萄酒数据 | 分类 |
load_digits([n_class, return_X_y]) | 手写数字数据集 | 分类 |
2.1波士顿房价数据集
用于回归任务的数据集
数据原地址:
http://archive.ics.uci.edu/ml/datasets/Housing
2.2鸢尾花数据集
用于分类任务的数据集
数据原地址:
http://archive.ics.uci.edu/ml/datasets/Iris
2.3糖尿病数据集
用于回归任务的数据集
注意:这10个特征变量都已经分别以均值为中心,并按照标准偏差乘以样本数(n_samples)进行缩放(即每列的平方和为1)
数据原地址:
http://www4.stat.ncsu.edu/~boos/var.select/diabetes.html
2.4Linnerrud 数据集
用于多标签回归任务的数据集
2.5乳腺癌数据集
用于分类任务的数据集
2.6手写数字数据集
数据原地址:
http://archive.ics.uci.edu/ml/datasets/Optical+Recognition+of+Handwritten+Digits
2.7可视化手写数据集图片
import matplotlib.pyplot as plt
%matplotlib inline
from sklearn.datasets import load_digits
# 可视化手写数据集的某张图片
digits = load_digits()
print("data shape: {0}".format(digits.data.shape))
print("images shape: {0}".format(digits.images.shape))
plt.imshow(digits.images[0])
plt.axis('off') # 不显示坐标轴
plt.show()
data shape: (1797, 64)
images shape: (1797, 8, 8)
3数据生成器生成数据集
sklearn中提供了数据生成器,这些生成器可以按照一些要求生成一些随机数据。这些API统一的格式为:sklearn.datasets.make_<name>
。以下是一些常用的方法。
3.1分类和聚类生成器
make_blobs
:多类单标签数据集,为每个类分配一个或多个正太分布的点集,对于中心和各簇的标准偏差提供了更好的控制,可用于演示聚类make_classification
:多类单标签数据集,为每个类分配一个或多个正太分布的点集,引入相关的,冗余的和未知的噪音特征;将高斯集群的每类复杂化;在特征空间上进行线性变换make_gaussian_quantiles
:将single Gaussian cluster (单高斯簇)分成近乎相等大小的同心超球面分离。make_hastie_10_2
:产生类似的二进制、10维问题。make_moons/make_moons
:生成二维分类数据集时可以帮助确定算法(如质心聚类或线性分类),包括可以选择性加入高斯噪声。它们有利于可视化。用球面决策边界对高斯数据生成二值分类。make_multilabel_classification
:生成多个标签的随机样本。make_biclusters
:Generate an array with constant block diagonal structure for biclustering。make_checkerboard
:Generate an array with block checkerboard structure for biclustering。
3.2回归生成器
make_regression
:产生的回归目标作为一个可选择的稀疏线性组合的具有噪声的随机的特征。它的信息特征可能是不相关的或低秩(少数特征占大多数的方差)。make_sparse_uncorrelated
: 产生目标为一个有四个固定系数的线性组合。make_friedman1
: 与多项式和正弦相关变换相联系。make_friedman2
: 包括特征相乘与交互。make_friedman3
: 类似与对目标的反正切变换。3.3可视化单标签分类数据
import matplotlib.pyplot as plt
%matplotlib inline
from sklearn.datasets import make_classification
from sklearn.datasets import make_blobs
from sklearn.datasets import make_gaussian_quantiles
plt.figure(figsize=(8, 8))
# 控制图像外侧边缘以及图像间的空白区域
plt.subplots_adjust(bottom=.05, top=.95, left=.05, right=.95)
plt.subplot(321)
plt.title("One informative feature, one cluster per class", fontsize=11)
X1, Y1 = make_classification(n_features=2, n_redundant=0, n_informative=1,
n_clusters_per_class=1)
plt.scatter(X1[:, 0], X1[:, 1], marker='o', c=Y1,
s=25, edgecolor='k')
plt.subplot(322)
plt.title("Two informative features, one cluster per class", fontsize=11)
X1, Y1 = make_classification(n_features=2, n_redundant=0, n_informative=2,
n_clusters_per_class=1)
plt.scatter(X1[:, 0], X1[:, 1], marker='o', c=Y1,
s=25, edgecolor='k')
plt.subplot(323)
plt.title("Two informative features, two clusters per class", fontsize=11)
X2, Y2 = make_classification(n_features=2, n_redundant=0, n_informative=2)
plt.scatter(X2[:, 0], X2[:, 1], marker='o', c=Y2,
s=25, edgecolor='k')
plt.subplot(324)
plt.title("Multi-class, two informative features, one cluster", fontsize=11)
X1, Y1 = make_classification(n_features=2, n_redundant=0, n_informative=2,
n_clusters_per_class=1, n_classes=3)
plt.scatter(X1[:, 0], X1[:, 1], marker='o', c=Y1,
s=25, edgecolor='k')
plt.subplot(325)
plt.title("Three blobs", fontsize=11)
X1, Y1 = make_blobs(n_features=2, centers=3)
plt.scatter(X1[:, 0], X1[:, 1], marker='o', c=Y1,
s=25, edgecolor='k')
plt.subplot(326)
plt.title("Gaussian divided into three quantiles", fontsize=11)
X1, Y1 = make_gaussian_quantiles(n_features=2, n_classes=3)
plt.scatter(X1[:, 0], X1[:, 1], marker='o', c=Y1,
s=25, edgecolor='k')
plt.show()
4API 在线下载网络数据集
sklearn中提供了数据生成器,这些生成器可以按照一些要求生成一些随机数据。这些API统一的格式为:sklearn.datasets.fetch_。以下是一些常用的数据集:
4.120个新闻组文本数据集
20个新闻组文本数据集包含有关20个主题的大约18000个新闻组,被分为两个子集:一个用于训练(或者开发),另一个用于测试(或者用于性能评估)。训练和测试集的划分是基于某个特定日期前后发布的消息。结果中包含20个类别。
这个数据集可以通过两个方法来获取下载:fetch_20newsgroups
和 fetch_20newsgroups_vectorized
。fetch_20newsgroups
返回一个能够被文本特征提取器接受的原始文本列表,fetch_20newsgroups_vectorized
返回将文本使用tfidf处理后的特征矩阵。
数据原地址:
http://qwone.com/~jason/20Newsgroups
4.2森林覆盖类型数据集
森林覆盖数据集对应美国的 30×30m 的 patches of forest(森林区域),收集这些数据用于预测每个 patch 的植被 cover type (覆盖类型),即优势树种。 总共有七个植被类型,使得这是一个多分类问题。 每个样本有 54 个特征,有些特征是布尔指标,其他的是离散或者连续的量。
这个数据集可以通过fetch_covtype
来获取下载。
数据原地址:
http://archive.ics.uci.edu/ml/datasets/Covertype
4.3路透社语料库第一卷数据集
路透社语料库第一卷( RCV1)是路透社为了研究目的提供的一个拥有超过 800,000 份手动分类的新闻报导的文档库。该数据集在 [1] 中有详细描述。该数据集的特征矩阵是一个 scipy CSR 稀疏矩阵,有 804414 个样品和 47236 个特征。 非零值包含 cosine-normalized(余弦归一化),log TF-IDF vectors。
这个数据集可以通过fetch_rcv1
来获取下载。
数据原地址:
http://jmlr.csail.mit.edu/papers/volume5/lewis04a/
4.4带标签的人脸识别数据集
这个数据集是一个在互联网上收集的名人 JPEG 图片集,每张图片的居中部分都是一张脸。这个数据集可以做两个任务,一个是人脸验证,给定两幅图片,二元分类器必须能够预测这两幅图片是否是同一个人。另一项任务人脸识别或面部识别,给定一个未知的面孔,通过参考一系列已经学习经过鉴定的人的照片来识别此人的名字。人脸验证和人脸识别都是基于经过训练用于人脸检测的模型的输出所进行的任务。
这个数据集可以通过两个方法来下载:fetch_lfw_pairs
和 fetch_lfw_people
。fetch_lfw_people
用于加载人脸验证任务数据集(每个样本是属于或不属于同一个人的两张图片)。 fetch_lfw_people
用于加载人脸识别任务数据集(一个多类分类任务(属于监督学习),
数据原地址:
http://vis-www.cs.umass.edu/lfw/
4.5下载 mldata.org 数据
mldata.org(http://mldata.org/ ) 是一个公开的机器学习数据仓库。mldata.org 中的数据大多都是以 (n_features, n_samples)
这样的组织形式存在。 这与 scikit-learn 中的习惯约定是不一致的,所以 sklearn.datasets.fetch_mldata
默认情况下通过 transpose_data 关键字控制对这个矩阵进行转置运算。
这些数据集都可以通过fetch_mldata
方法来下载,例如下载 MNIST 手写数据集:fetch_mldata('MNIST original')
作者:无邪,个人博客:脑洞大开,专注于机器学习研究。