上一篇介绍了scikit-learn中的几个玩具数据集,本篇介绍scikit-learn提供的一些真实的数据集。
玩具数据集:scikit-learn 基础(01)--『数据加载』之玩具数据集

1. 获取数据集

与玩具数据集不同,真实的数据集的数据不仅数据特征多,而且数据量也比较大,
所以没有直接包含在scikit-learn库中。

虽然scikit-learn中提供了在线加载数据的函数,不过由于网络方面的原因,在线加载几乎不可能成功。
我离线下载了所有scikit-learn的真实数据,并且转换成了缓存文件,经测试可正常离线使用。

已经转换好的离线数据集:

  1. olivetti:https://url11.ctfile.com/f/45455611-930509718-42d985?p=6872
  2. 20newsgroups:https://url11.ctfile.com/f/45455611-930509625-f32241?p=6872
  3. lfw_home:https://url11.ctfile.com/f/45455611-930509715-c10239?p=6872
  4. covertype:https://url11.ctfile.com/f/45455611-930509631-f5e629?p=6872
  5. RCV1:https://url11.ctfile.com/f/45455611-930509760-30d2a2?p=6872
  6. kddcup99-py3:https://url11.ctfile.com/f/45455611-930509652-4f47ea?p=6872
  7. kddcup99_10-py3:https://url11.ctfile.com/f/45455611-930509637-2f0131?p=6872
  8. cal_housing:https://url11.ctfile.com/f/45455611-930509628-395dab?p=6872

:所有文件的下载密码都是:6872

下载上面的 zip 包之后,解压到本地某个目录中(下面的示例是:d:\share\sklearn-realdata),
加载离线数据集的方法如下:

import os
# sklearn一共提供了9种加载真实数据的方法
from sklearn.datasets import fetch_olivetti_faces
from sklearn.datasets import fetch_20newsgroups
from sklearn.datasets import fetch_20newsgroups_vectorized
from sklearn.datasets import fetch_lfw_people
from sklearn.datasets import fetch_lfw_pairs
from sklearn.datasets import fetch_covtype
from sklearn.datasets import fetch_rcv1
from sklearn.datasets import fetch_kddcup99
from sklearn.datasets import fetch_california_housing home_dir = "d:\share\sklearn-realdata"
data = fetch_olivetti_faces(data_home=os.path.join(home_dir, "olivetti"))
print(data) data = fetch_20newsgroups(data_home=os.path.join(home_dir, "20newsgroups"))
print(data) data = fetch_20newsgroups_vectorized(data_home=os.path.join(home_dir, "20newsgroups"))
print(data) data = fetch_lfw_people(data_home=home_dir)
print(data)
data = fetch_lfw_pairs(data_home=home_dir)
print(data) data = fetch_covtype(data_home=home_dir)
print(data) data = fetch_rcv1(data_home=home_dir)
print(data) # 只加载10%的数据
data = fetch_kddcup99(data_home=home_dir)
print(data)
# 加载全部的数据
data = fetch_kddcup99(data_home=home_dir, percent10=False)
print(data) data = fetch_california_housing(data_home=os.path.join(home_dir, "cal_housing"))
print(data)

加载离线数据集的关键在于设置 data_home 参数。

2. 数据集概况

真实数据和之前的玩具数据集相比,它的优势在于数据取自实际应用之中,更能够反映实际问题的复杂性。
用它来学习算法时,可以提前遇到各种调整模型的问题。

scikit-learn一个提供了9 种加载真实数据集的函数,实际是7 种数据集。

2.1. Olivetti 面部数据集

这个数据集来自从 AT&T,包含40 个不同个体的人脸图像的数据集,每个个体有10 张不同的图片。
这些图像是在不同的时间拍摄的,并且具有不同的照明和面部表情(睁开/闭上眼睛,微笑/不微笑)以及面部细节(戴眼镜/不戴眼镜)。

所有的图像都采用黑色均匀的背景,并且个体处于直立的正面位置,允许一定的侧移。
图像被量化为256 个灰度级并以8 位无符号整数的形式存储。
这个数据集的目标是从 0 到 39 的整数,代表图中人物的身份。
由于每一类只有十个样例,这个相对较小的数据集对无监督学习半监督学习具有有趣的挑战性。

此数据集的加载函数:fetch_olivetti_faces

2.2. 新闻组数据集

这是一个常用的文本分类数据集,包含大约20,000 篇新闻文章,这些文章均匀分布在20 个不同的主题中。

这些新闻组数据来源于 1997 年之前的新闻文章,包括各种不同的新闻来源日期
这个数据集的目标是进行文本分类,将每篇文章分配到其对应的主题中。

该数据集通常用于训练和测试文本分类算法,例如朴素贝叶斯分类器、支持向量机或决策树等。
由于数据集的大小适中,它也适用于较小的机器学习模型。

此数据集的加载函数:fetch_20newsgroupsfetch_20newsgroups_vectorized
这两个函数的主要区别在于:

  • fetch_20newsgroups返回的是一个原始的文本列表,每个新闻组的数据都以字符串形式给出
  • fetch_20newsgroups_vectorized返回的是一个可以直接用于机器学习或评估的向量数据集,它已经为文本数据进行了特征提取,返回的是一个稀疏矩阵

2.3. 人脸数据集

这个数据集是一个包含13233 张人脸图像的数据集,用于测试人脸识别算法。
这些图像均来自互联网,包含不同的人脸角度、表情和光照条件。
每张图像都给出了对应的人名,共有5749 个个体,其中大部分人只有一张图像,部分人有多张图像。

此数据集的目标是测试人脸识别算法的准确率,通常用于评估算法的准确性召回率交叉验证等。
由于数据集包含大量的人脸图像和个体,因此也适用于训练和测试深度学习模型。

此数据集的加载函数:fetch_lfw_peoplefetch_lfw_pairs
这两个函数的主要区别在于:

  • fetch_lfw_people数据集中每个人至少有一张图片,每张图片都对应不同的人。这个数据集的目标是训练一个分类器来识别不同的人
  • fetch_lfw_pairs数据集中每个人有两张不同图片。这些图片是在不同的时间、不同的光照条件下拍摄的。这个数据集的目标是训练一个分类器来识别同一个人在不同条件下的图片

2.4. 森林覆盖数据集

这个数据集是一个包含森林覆盖类型信息的植被覆盖类型数据集。
该数据集包含581,012 个样本,每个样本是一个30m x 30m 区域的森林覆盖类型,
包括 7 种类型:云杉/冷杉、洛奇波尔松、黄松、三叶杨/柳树、阿斯彭、花旗松和克鲁姆霍尔茨。

除了前 10 个特征是浮点数外,其余特征都是one-hot 变量。这个数据集的目标是预测给定区域的森林覆盖类型。
适用于分类相关的机器学习算法的测试。

此数据集的加载函数:fetch_covtype

2.5. RCV1 多标签数据集

这个数据集是一个包含1063389 个样本的大规模文本分类数据集。
该数据集由英国广播公司(BBC)和英国邮报(The Guardian)的新闻文章组成,每篇文章都被标记为其中一个类别(例如体育、娱乐、政治等)。

RCV1数据集的目标是训练和测试文本分类算法。由于数据集规模较大,它适合用于评估大型机器学习模型和分布式计算系统的性能。
RCV1数据集包含多个属性,如文本内容、类别标签和样本权重等,可以用于训练多种不同类型的文本分类模型,例如朴素贝叶斯分类器、支持向量机或深度学习模型等。

此数据集的加载函数:fetch_rcv1

2.6. kddcup99 数据集

这个数据集是一个网络入侵检测的数据集,源自DARPA入侵检测评估项目。
该数据集包含了 9 个星期的网络连接数据,分为训练集测试集两部分。

训练集包含了4920917条连接记录,测试集包含了4555136条连接记录。
这些连接记录涵盖了多种网络协议和攻击类型,例如 TCP、UDP、ICMP 等以及 DoS、U2R、R2L 等攻击类型。
数据集中的每个连接记录包含41 个固定的特征属性,包括源 IP 地址、目的 IP 地址、协议类型、字节数等,以及一个类标识符表示该连接是否属于攻击类型。

kddcup99数据集是网络入侵检测领域广泛使用的事实基准数据集,可用于评估和比较不同入侵检测算法的性能。

此数据集的加载函数:fetch_kddcup99
由于此数据集数据量很大,所以默认只加载 10%的数据,若要加载全部数据设置参数percent10=False
本文第一节加载离线数据的示例中也加载示例。

2.7. 加州住房数据集

这个数据集包含了加利福尼亚州 1990 年所有城市的房价信息。
数据集中的每个样本都包含 8 个变量的值:

  1. MedianHouseValue(中位数房价):以 1000 美元为单位。
  2. MedianIncome(中位数收入):以年为单位,以美元为单位。
  3. HouseAge(房龄):以年为单位。
  4. Rooms(房间数):整数。
  5. Bedrooms(卧室数):整数。
  6. Population(人口):以 1000 人为单位。
  7. HousingUnits(房屋数量):以千为单位。
  8. SquareMiles(平方英里):以平方英里为单位。

该数据集被广泛用于房价预测相关的机器学习算法的学习中。
此数据集的加载函数:fetch_california_housing

3. 总结

当机器学习的算法掌握到一定程度的时候,一定会想尝试用真实的数据集来训练模型。
这些经典的真实数据集不仅数据量丰富,而且涵盖的范围广,用来练手和提高自己的能力再好不过。

【scikit-learn基础】--『数据加载』之真实数据集的更多相关文章

  1. Python 数据分析(一) 本实验将学习 pandas 基础,数据加载、存储与文件格式,数据规整化,绘图和可视化的知识

    第1节 pandas 回顾 第2节 读写文本格式的数据 第3节 使用 HTML 和 Web API 第4节 使用数据库 第5节 合并数据集 第6节 重塑和轴向旋转 第7节 数据转换 第8节 字符串操作 ...

  2. odoo基础数据加载

    odoo 基础数据加载 这里介绍的odoo基础数据加载分两种方式,一种是演示数据加载,一种是默认数据加载,下面就是详细介绍 首先,当然是创建一个date文件夹 项目目录,右键自定义一个文件夹 XML数 ...

  3. transformers 之Trainer对应的数据加载

    基础信息说明 本文以Seq2SeqTrainer作为实例,来讨论其模型训练时的数据加载方式 预训练模型:opus-mt-en-zh 数据集:本地数据集 任务:en-zh 机器翻译 数据加载 Train ...

  4. ScrollView嵌套ListView,GridView数据加载不全问题的解决

    我们大家都知道ListView,GridView加载数据项,如果数据项过多时,就会显示滚动条.ScrollView组件里面只能包含一个组件,当ScrollView里面嵌套listView,GridVi ...

  5. python多种格式数据加载、处理与存储

    多种格式数据加载.处理与存储 实际的场景中,我们会在不同的地方遇到各种不同的数据格式(比如大家熟悉的csv与txt,比如网页HTML格式,比如XML格式),我们来一起看看python如何和这些格式的数 ...

  6. flask+sqlite3+echarts3+ajax 异步数据加载

    结构: /www | |-- /static |....|-- jquery-3.1.1.js |....|-- echarts.js(echarts3是单文件!!) | |-- /templates ...

  7. Entity Framework关联查询以及数据加载(延迟加载,预加载)

    数据加载分为延迟加载和预加载 EF的关联实体加载有三种方式:Lazy Loading,Eager Loading,Explicit Loading,其中Lazy Loading和Explicit Lo ...

  8. JQuery插件:遮罩+数据加载中。。。(特点:遮你想遮,罩你想罩)

    在很多项目中都会涉及到数据加载.数据加载有时可能会是2-3秒,为了给一个友好的提示,一般都会给一个[数据加载中...]的提示.今天就做了一个这样的提示框. 先去jQuery官网看看怎么写jQuery插 ...

  9. 如何评估ETL的数据加载时间

    简述如何评估大型ETL数据加载时间. 答:评估一个大型的ETL的数据加载时间是一件很复杂的事情.数据加载分为两类,一类是初次加载,另一类是增量加载. 在数据仓库正式投入使用时,需要进行一次初次加载,而 ...

  10. 浅谈Entity Framework中的数据加载方式

    如果你还没有接触过或者根本不了解什么是Entity Framework,那么请看这里http://www.entityframeworktutorial.net/EntityFramework-Arc ...

随机推荐

  1. AVR汇编(三):寻址方式

    AVR汇编(三):寻址方式 AVR具有多种寻址方式,在介绍具体的汇编指令之前,有必要对它们做一定了解. 前面介绍过,AVR将内存空间分为多个部分:寄存器堆.I/O空间.数据空间.程序空间.这些空间支持 ...

  2. MySql Workbench 迁移工具 migration 提示缺少pyodbc 2.1.8 的解决方法

    想把公司的数据库转到MySQL,所以想装个MySQL测试,发现新版的MySQL(8.0.34)默认安装还是有不少问题, 一.譬如表.字段大小写的问题: lower_case_table_names=0 ...

  3. java多线程使用详解与案例,超详细

    一.创建线程的方式 1.继承Thread类 让子类继承Thread线程类 子类必须重写Thread类的run方法 创建一个自己定义的线程对象 调用start()方法启动线程 //测试类 /** * 1 ...

  4. java实现的类似于sql join操作的工具类,通用递归,最低需要java8

    直接上代码,缺包的自行替换为自己项目中存在的 import java.util.ArrayList; import java.util.Collection; import java.util.Has ...

  5. 《Linux基础》09. Shell 编程

    @ 目录 1:Shell 简介 2:Shell 脚本 2.1:规则与语法 2.2:执行方式 2.3:第一个 Shell 脚本 3:变量 3.1:系统变量 3.2:用户自定义变量 3.2.1:规则 3. ...

  6. 《Linux基础》03. 运行级别 · 实用指令

    @ 目录 1:运行级别 2:帮助指令 2.1:man 2.2:help 3:文件目录指令 3.1:pwd 3.2:ls 3.3:cd 3.4:mkdir 3.5:rmdir 3.6:touch 3.7 ...

  7. C# 异步执行操作

    为了方便测试异步,先加个计时 计时相关(可以直接跳过该部分) //开始计时 Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); // 停 ...

  8. Maven安装与配置教程

    一.安装前检查 检查电脑上是否安装JDK,如果没有安装,请查看JDK安装教程:点我查看 如果电脑上已经安装JDK,按Win 和R键,输入cmd,然后点击确定 输入java -version,点击回车, ...

  9. 在CentOS 8上安装Xrdp远程桌面服务

    如何在CentOS 8上安装Xrdp远程桌面服务 写在前面 Xrdp是Microsoft远程桌面协议(RDP)的开源实现,可让您以图形方式控制远程系统.使用RDP,您可以登录到远程计算机并创建真实的桌 ...

  10. paramiko免密登陆

    paramiko免密登陆 # -*- coding: utf-8 -*- import paramiko pkey='D:/pycharm_workspace/testpy/ssh_paramiko_ ...