如何使用sklearn加载和下载机器学习数据集

时间:2022-05-08
本文章向大家介绍如何使用sklearn加载和下载机器学习数据集,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

推荐阅读时间:10min~12min 文章内容:通过sklearn下载机器学习所用数据集

1简介

数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。

sklearn 中提供了很多常用(或高级)的模型和算法,但是真正决定一个模型效果的最后还是取决于训练(喂养)模型时所用的数据。sklearn 中的 sklearn.datasets 模块包含了数据生成相关的功能。主要包含以下几种类型的数据集:

  • 小型玩具(样本)数据集
  • 数据生成器生成数据集
  • API 在线下载网络数据集

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波士顿房价数据集

用于回归任务的数据集

  • 样本数量:506
  • 特征数量:13
  • 特征信息:
    • CRIM 城镇人均犯罪率
    • ZN 占地面积超过2.5万平方英尺的住宅用地比例
    • INDUS 城镇非零售业务地区的比例
    • CHAS 查尔斯河虚拟变量 (= 1 如果土地在河边;否则是0)
    • NOX 一氧化氮浓度(每1000万份)
    • RM 平均每居民房数
    • AGE 在1940年之前建成的所有者占用单位的比例
    • DIS 与五个波士顿就业中心的加权距离
    • RAD 辐射状公路的可达性指数
    • TAX 每10,000美元的全额物业税率
    • PTRATIO 城镇师生比例
    • B 1000(Bk - 0.63)^2 其中 Bk 是城镇的黑人比例
    • LSTAT 人口中地位较低人群的百分数
    • MEDV 以1000美元计算的自有住房的中位数
  • 缺失特征值:无

数据原地址:

http://archive.ics.uci.edu/ml/datasets/Housing

2.2鸢尾花数据集

用于分类任务的数据集

  • 样本数量:150(三个分类各有50)
  • 特征数量:4(数值型)
  • 特征信息:
    • sepal length 萼片长度(厘米)
    • sepal width 萼片宽度(厘米)
    • petal length 花瓣长度(厘米)
    • petal width 花瓣宽度(厘米)
  • 目标信息:
    • Iris-Setosa 山鸢尾
    • Iris-Versicolour 变色鸢尾
    • Iris-Virginica 维吉尼亚鸢尾
  • 缺失特征值:无

数据原地址:

http://archive.ics.uci.edu/ml/datasets/Iris

2.3糖尿病数据集

用于回归任务的数据集

  • 样本数量:442
  • 特征数量:10
  • 特征信息:
    • age 年龄
    • sex 性别
    • bmi 体重指数
    • bp 平均血压
    • s1 血清测量值1
    • s2 血清测量值2
    • s3 血清测量值3
    • s4 血清测量值4
    • s5 血清测量值5
    • s6 血清测量值6

注意:这10个特征变量都已经分别以均值为中心,并按照标准偏差乘以样本数(n_samples)进行缩放(即每列的平方和为1)

数据原地址:

http://www4.stat.ncsu.edu/~boos/var.select/diabetes.html

2.4Linnerrud 数据集

用于多标签回归任务的数据集

  • 样本数量:20
  • 特征数量:3
  • 特征信息:
    • Chins 下巴
    • Situps 仰卧起坐
    • Jumps 跳跃
  • 目标信息:
    • Weight 体重
    • Waist 腰围
    • Pulse脉搏
  • 缺失特征值:无

2.5乳腺癌数据集

用于分类任务的数据集

  • 样本数量:569
  • 特征数量:30
  • 特征信息:
    • radius 半径(从中心到边缘上点的距离的平均值)
    • texture 纹理(灰度值的标准偏差)
    • perimeter 周长
    • area 区域
    • smoothness 平滑度(半径长度的局部变化)
    • compactness 紧凑度(周长 ^ 2 /面积 - 1.0)
    • concavity 凹面(轮廓的凹部的严重性)
    • concave points 凹点(轮廓的凹部的数量)
    • symmetry 对称性
    • fractal dimension 分形维数(海岸线近似 - 1)
  • 目标信息:
    • malignant 恶性
    • benign 良性

2.6手写数字数据集

  • 样本数量:1797
  • 特征数量:64
  • 特征信息:8x8 范围在(0-16)的整型像素值图片
  • 缺失属性值:无
  • 目标信息:数字 1-10

数据原地址:

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_20newsgroupsfetch_20newsgroups_vectorizedfetch_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_pairsfetch_lfw_peoplefetch_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')

作者:无邪,个人博客:脑洞大开,专注于机器学习研究。