最近在B站上复习李沐老师的机器学习课程,在此记录。下面图片多来自课程课件
课程主页:stanford cs 329
1.1 机器学习的重要内容3’
Data
Model training
Development
Workflow
Data
1.2 Data Acquisition
常见的提供数据集的平台:paperswithcodes, kaggle, google, tensorflow…
数据一般可以分为这几类:academic data, competitive data and raw data. 学术和竞赛数据一般更干净,但数据量会较小,原始数据量可能很大,但数据可能噪声很多,需要做大量的清理工作。
关于数据进入模型前的处理一般包括这几个步骤:
Data Labelling – Data exploration – Data Cleaning – Data Transformation – Feature Engineering。后面会逐个介绍。
1.3 Web Scrapping
网络数据抓取,“爬虫”。(不过一般的“爬数据”指的是整个网页的抓取,web scrapping 倾向于对网页中具体数据的获取。
一般用到 python 里面一个叫 selenium 的库,用 beautifulsoup 包解析 html。
要注意的是,web scrapping 所要考虑的成本不只是“爬”,还有“存”(当然还有之后的数据处理)。
1.4 Data Labelling
1)什么是label(标签)?
标签可以理解为 模型的已知输出或结果,比如我们做一个图片分类问题,“猫”,“狗”就可以是某一张图片的label。
2)How to improve labels?
这里主要涉及到三个技术:semi-supervision, crowdsourcing, active learning, weak supervision,也就是 半监督,手动打标签(雇人判断 eg. Imagenet 数据集),灵活学习和弱监督。
Semi-supervision Learning
适用场景:只有小部分的 labeled data,有大量 unlabeled data。
假设:
- 特征相似的数据视为同label。
- cluster 内在结构一致视为同label。
- Manifold(流型),降维得到更干净的数据。
manifold 思想介绍:Manifold 基本思想
策略:Self-training
主要三步:
- train:用带标签的数据训练模型
- predict: 用训练出来的模型对没有标签的数据进行预测,给其附上标签。
- merge: 把新打上标签的数据和之前的有标签的数据进行合并,之后再一起开启下一轮训练…
注意:predict 之后,置信的数据才能合并。
那不置信的数据怎么办呢?这里就要用到 weak supervision 了。一般来说,我们semi-supervision 和 Active learning 是一起用的。
Active Learning
和 Self -training 类似,但是有人为干预,也就是把非置信的数据人为的打上 label。
Flow:
一般用 Active Learning + Self-training.
Weak Supervision
weak supervision 最是常用了,它是利用数据的一些规律,半自动的生成 label。
举个栗子:
def check_out(x): # 含“check out”的视为垃圾邮件
return SPAM if "check out" in x.lower() else ABSTAIN
def sentiment(x):#sentiment_polarity(x) 计算情感极性(通常是一个介于 -1 和 1 之间的值,其中 1 表示非常积极,-1 表示非常消极)。情感极性大于 0.9,认为文本情感非常积极
return HAM if sentiment_polarity(x) > 0.9 else ABSTAIN
def short_comment(x):# 文本分割成单词后,个数小于5,视为短文本
return HAM if len(x.split()) < 5 else ABSTAIN