# 1.2 数据获取
- 这一讲主要讲在没有现成的数据情况下,
如何去找到数据集,并对各种现有的数据集有个大致的概念
以及实在找不到数据集的时候, 该用什么方法来生成数据.
什么时候需要考虑数据的获取?
00:12
- 如果你要开始机器学习项目
但是手头没有足够多现成数据.
你就要考虑获取数据
获取数据的途径
获取数据主要是两个途径:
1. 首先寻找 现有数据集
2. 如果没有现成的数据,那就要考虑 生成数据
这里的数据集(dataset)指的是, 已经被人整理过,能直接拿来用
数据获取流程
-
如何去找数据
-
如何生成数据
## 如何发现数据集
根据目标来定数据集
-
寻找已有的数据集(手上有)
- 一般来说你需要寻找多个被人用过的公共数据集
- 对于不同目的来说,你选择数据集的标准也是会有所微调,
- 为了验证自己的一个想法,需要 多个各有特点的小规模数据集
- 如果是深度学习, 需要一些大规模的数据
- 收集新的数据
- 你的数据应该能够覆盖所有可能遇到的所有问题
-
寻找benchmark的数据集来验证新的想法; 例如对于一个新的超参数调节算法, 需要找一系列的小到中的数据集进行验证; 对于一个非常大且深的神经网络要用大体量的数据集
-
收集新数据(做产品) ;例如覆盖不同驾驶场景的架势录像
## 常见的数据集
-
维基百科中关于数据集的列表 https://en.wikipedia.org/wiki/List_of_datasets_for_machine-learning_research 其中收录了一系列的数据集
-
MNIST: 手写数字数据集 MNIST handwritten digit database, Yann LeCun, Corinna Cortes and Chris Burges
-
imageNet : 大规模图片数据集 ImageNet
-
AudioSet: 油管的声音片段数据 https://research.google.com/audioset/
-
Kinetic : 油管人类动作视频片段 https://deepmind.com/research/open-source/kinetics
-
KITTI : 无人驾驶数据集 The KITTI Vision Benchmark Suite
-
Amazon Review: 亚马逊用户评价数据 https://s3.amazonaws.com/amazon-reviews-pds/readme.html
-
SQuAD: 维基百科问答 The Stanford Question Answering Dataset
-
LibriSpeech : 有声书数据集 https://www.tensorflow.org/datasets/catalog/librispeech
## 去哪找数据集
-
Paperwithcodes 论文相关数据集 https://paperswithcode.com/ 提供了学术论文和相关的数据,并且给出了这个论文在数据集上面的运行表现
-
Kaggle https://www.kaggle.com/ 除了竞赛数据集以外,很多用户也上传数据集, 这些用户上传的数据集质量鱼龙混杂.
-
google 数据集搜索. https://datasetsearch.research.google.com/ 这是谷歌的一个搜索入口. 可以搜到其他各种来源的数据
-
开源工具自带的数据集
-
tensowflow 深度学习软件, 往往会自带一些数据集
-
huggingface 文本transform库
-
各种数据比赛的竞赛数据 往往质量比较高
-
保存在云盘上的数据集, 比如说 open data on AWS
-
公司本身的数据仓库或者数据湖(data lakes)
## 数据集的分类和比较
-
学术界数据集(academic datasets)
-
竞赛数据集(competition datasets)
-
工业数据集(raw data)
数据集和数据集是不一样的, 学术界的数据集(academic datasets)和工业界的原始数据(raw data)是两个极端
- 学术界的数据集是精心挑选且人工处理过的, 数据干净, 拿来就用,方便在上面测试算法.
但是这些数据集不仅数量少, 往往和真实数据差别很大
- 比如 UCL 数据集 https://archive.ics.uci.edu/ml/datasets.php
- 工业界的原始数据是最多样, 而且是真实的. 但往往需要消耗非常多的人力才能让这个数据变得"好用"
- 各种数据比赛的竞赛数据介于工业界和学术界之间.
## 数据融合
- 数据融合就是把多个表合并(join)成一个表.
- sql之类数据库中这个操作对应 join 命令
- R中常常使用merge 函数, 或者 tidyverse 中的 dplyr::*join 函数. 可以参考 R语言中dplyr包join函数之目前我看到过的最形象的教程 - 简书
- 数据往往被存放在多个位置, 用的时候需要把他们合起来
- 比如说很多数据, 分属于不同的部门,或者说不同数据更新的频率不同, 分开存储会灵活.
- 为了方便数据融合, 你的数据要有一个 不重复的主键(key)
- 主键(key)往往表现为数据表的一列,往往是某种ID
- 在数据融合的时候,你可能会碰到重复的主键或者数据缺失, 或者不同表上记录相互冲突.
## 生成数据
25:43
- 实在找不到数据集的时候, 尝试生成数据, 就是自己制造一批数据
- GAN 生成图像
- 数据增强 Data augmentation
- 比如说以一张图片为蓝本, 生成一系列相似,但又有差别的图片
- 另一个例子, 使用翻译引擎,来回翻译一段话
## 总结
-
找到合适的数据。找数据很麻烦,而且还要区分这个数据是否合用
-
学术界使用的数据和工业界使用的数据差异较大
-
很多时候,多个数据表要融合成一张表
-
数据扩充和合成数据,所以生成数据现在越来越常见, 尤其是数据增强方法