机器学习-数据
当使用机器学习技术解决实际问题时,最先要考虑模型输入数据问题,如何获取数据,对数据进行标注、清理以及变换等,以满足模型的输入要求。
数据获取
主要有两个获取手段
- 寻找已有的数据集(MNIST ImageNet等等)
- 维基百科数据集总结
- paperwithcode datasets 论文中常见的数据集
- Kaggle Datasets 用户上传数据集
- Google Dataset search 数据集搜索引擎,聚合数据集网站内容
- Hugging Face 数据集 聚焦于文本数据
- 根据任务,收集,形成自己的数据集
- 生成数据
三种不同的数据集类型
- 学术数据集
- 定义清晰,但是局限于某个小问题
- 竞赛数据集
- 接近于真实的机器学习应用
- 原始数据
- 需要消耗大量的精力预处理
当收集到的数据来源不同,我们需要对数据进行集成(integrate)
类似于数据库中不同表的join,寻找合并key,处理重复项、冲突以及确实
当找不到可用的数据,或者收集到的数据量过小时,可通过人造(synthetic)数据增加数据量
- 使用GANs 生成数据
- 数据增强(augmentation)
- 图像反转、拉伸等
- 文本的反复翻译,改变语序
总结
网页数据抓取(Scraping)
网页数据抓取是获取数据的有效手段,包括ImageNet在内的很多数据集通过这种方式获取生成,其优缺点包括
- 数据较为原始,包含的无关信息较多
- 数据量大
常用的网页抓取工具
linux的curl命令(通常会被反爬虫屏蔽)
使用模拟浏览器
- 不断更换ip,防止短时间大量相同ip访问导致的屏蔽
数据标注
在完成数据收集后,需要考虑数据的标注问题,根据标签的多少,选取不同的策略
- 标签充足-监督/半监督学习
- 标签不足-人工标注
- 标签+经费均不足-弱监督学习
半监督学习(Semi-supervised learning SSL)- 简单理解
Semi-supervised learning is a class of machine learning tasks and techniques that also make use of unlabeled data for training – typically a small amount of labeled data with a large amount of unlabeled data.
李宏毅机器学习视频中有详细讲解
半监督训练主要针对训练数据只有少部分已标注,大部分均未标注的情况,假设训练数据满足以下条件
- 一致性假设(Continuity assumption) 具有相同特征的样本标签相同
- 聚类/簇假设(Cluster assumption) 若数据存在簇结构(即可以聚类),一个簇具有一个标签
- 流形假设(manifold assumption) 高维数据大致会分布在一个低维的流形上,邻近的样本拥有相似的输出,邻近的程度常用“相似”程度来刻画
半监督算法之一:自学习
首先用带标签的数据训练一个模型,在未标注数据上进行预测,获得预测标签,也就是所谓的伪标签(Pseudo-labeled),根据置信度选择部分伪标签数据与标签数据合并训练一个新模型(自学习),不断循环训练,直到模型满足任务要求。
半监督学习算法之二:主动学习(active learning)
与自学训练过程类似,但是每次预测结果最典型的未标记样本,由人工标记
- uncertainty sampling 选取最不确定的样本作为最典型(概率为1/N)
Label through Crowdsourcing(众包)
花钱找人标注
弱监督学习(Weak Supervision)
半自动生成标号,虽然比人工标注差,但是足够训练使用,常用手段
Data programming
人工总结一些规律,设计一些规则(规则匹配),通过程序半自动生成标签