机器学习
一、绪 论
启发式小故事:
- AlphaGo
理论 算法 数据 建模 对策
学习16万局业余棋手比赛 - AlphaGo Zero
3天后: 100:0 超越AlphaGo Lee
21天后:达到AlphaGo Master
40天后:超过所有之前的版本
Thoughts about AlphaGo Zero:
无师自通:没有任何人类的经验
自问:人类的经验是有害的?
人类因循着先人的足迹,却可能错过了更优化的路径。
但人类的经验并非一无是处:谁愿意让一个零经验的机器人做手术?
最终的目标 vs 人类的伦理
预备知识:线性代数,概率与统计,随机过程,算法设计与分析
定义:
机器学习是从人工智能中产生的一个重要分支。
与人类相似的方式:利用经验(统计学习)从数据中提取信息(推断)。
机器学习—为输入与输出的关系建立模型
问题分类:
- 分类问题:又分为二分类,多分类
2 回归问题:在连续的输入与输出变量之间建立映射关系
机器学习的基本模式
- Supervised Learning 监督学习:训练集全有标记
- Semi-supervised Learning 半监督学习:训练集中的部分示例没有被标记
- Unsupervised Learning 无监督学习:训练集不含任何标记
- Reinforcement Learning 强化学习:在与环境的交互中学习,而不是向“导师”学习
Alpha Go is supervised learning + reinforcement learning.
基本术语
模型(model): 假设 (结构+参数)
学习(learning):缩小模型与真相的差距
推断(inference): 把模型用在新数据上做预测
数据集; 训练集, 测试集
假设空间
假设空间是指机器学习算法所有可能的假设组成的集合。
假设空间的大小:\(n1 * n2 * n3 + 1\)
学习过程:在所有假设(hypothesis)组成的空间中进行搜索的过程
目标: 找到与训练集“匹配”(fit)的假设
(即能将训练集中的样例判断正确的假设)
版本空间 (version space): 与训练集一致的假设集合
归纳偏好 (inductive bias)
归纳偏好:机器学习算法在学习过程中对某种类型假设的偏好,任何一个有效的机器学习算法必有其偏好。
一般原则:奥卡姆剃刀(Ocam’s razor),即如果多个理论都能解释同一个现象,那么我们应该选择最简单的那个。即一般情况下选A。
但是
学习算法的归纳偏好是否与问题本身匹配,还是需要看数据本身的特征。
大多数时候直接决定了算法能否取得好的性能!
NFL定理:一个算法 A若在某些问题上比另一个算法B 好,必存在另一些问题, B比 A好。
总误差与学习算法无关!所有算法一样好!
NFL定理的重要前提:所有“问题”出现的机会相同、或所有问题同等重要(即f的分布)
实际情形并非如此:我们通常只关注自己正在试图解决的问题
所以还是要看数据,再选用不同的算法。
二、模型评估与选择
泛化误差 vs. 经验误差
什么模型好?譬如在新样本上预测错误率低、精度高。。。
泛化误差:在“未来”样本上的误差(严格说是在整体样本上的误差)
训练误差:在训练集上的误差
泛化误差越小越好!
训练误差是否越小越好?
NO! 因为会出现“过拟合” (overfitting)
过拟合 (overfitting) vs. 欠拟合 (underfitting)
模型选择 (model selection)
三个关键问题:
如何获得测试结果? 评估方法
如何评估性能优劣? 性能度量
如何判断实质差别? 比较检验
评估方法
关键:怎么获得“测试集” (test set) ?
测试集应该与训练集“互斥”
常见方法:
留出法 (hold-out)
交叉验证法 (cross validation)
留出法
注意:
- 保持数据分布一致性 (例如: 分层采样)
- 多次重复划分 (例如: 100次随机划分)
- 测试集不能太大、不能太小 (例如:小型数据集1/5~1/3)
k-折交叉验证法
若 k = m,则得到“留一法” (leave-one-out, LOO)
10-折交叉验证法示意图如下:
算法步骤:
- 将数据集随机分成10个大小相等的子集(称为“折”)。
- 将其中一个折作为验证集,其余9个折作为训练集。
- 使用训练集训练模型,并在验证集上评估模型性能。
- 重复步骤2和3,每次使用不同的折作为验证集。
- 计算10次评估结果的平均值,作为模型的最终性能指标。
“调参”与最终模型
算法的参数:一般由人工设定,亦称“超参数”
模型的参数:一般由学习确定
调参过程相似于 先产生若干模型,然后基于某种评估
方法进行选择
注意区别:训练集 vs. 验证集 (validation set) vs. 测试集:
算法参数选定后,要用“训练集+验证集”重新训练最终模型,然后用测试集验证最终模型
tips:参数调得好不好对性能往往对最终性能有关键影响
性能度量
性能度量(performance measure) 是衡量模型泛化能力的评价标准,反映了任务需求
使用不同的性能度量往往会导致不同的评判结果
tips:什么样的模型是“好”的,不仅取决于算法和数据,还取决于任务需求
回归(regression) 任务常用均方误差:
错误率 vs. 精度
真正例率(TPR)、假正例率(FPR)
-
假正例率 (FPR),即模型错误地将负样本预测为正样本的概率。:预测错误实际正确的/实际是错误的
-
真正例率 (TPR)/召回率,即模型正确地将正样本预测为正样本的概率:预测正确实际也正确/实际是正确的
查准率(P) vs. 查全率(R)
查准率(P):在所有的数据中,算法判断的有多准:预测正确实际也正确/所有预测是正确的
查全率(R):算法是不是将所有的正例都查询到了:预测正确实际也正确/实际是正确的
PR图, BEP
根据学习器的预测结果按正例可能性大小对样例进行排序,并逐个把样本作为正例进行预测
F1
比 BEP 更常用的 F1 度量
若对查准率/查全率有不同偏好:
宏xx vs. 微xx
若能得到多个混淆矩阵:
(例如多次训练/测试的结果,多分类的两两混淆矩阵)
宏(macro-) 查准率、查全率、F1
微(micro-) 查准率、查全率、F1
假正例率 (FPR),真正例率 (TPR),ROC, AUC
-
真正例率 (TPR)/召回率,即模型正确地将正样本预测为正样本的概率:预测正确实际也正确/实际是正确的
-
假正例率 (FPR),即模型错误地将负样本预测为正样本的概率。:预测错误实际正确的/实际是错误的
ROC (Receiver Operating Characteristic) Curve:ROC 曲线是一个图形化的工具,它展示了模型在不同分类阈值下的性能。
横坐标: 假正例率 (FPR),纵坐标: 真正例率 (TPR)。
AUC: Area Under the ROC Curv:AUC 是 ROC 曲线下的面积。AUC 的值介于 0 和 1 之间,它可以用来衡量模型的整体性能。
- ROC 曲线和 AUC(Area Under the Curve)作为指标,不受正负类比例的影响。无论数据集的正负样本比例如何,ROC 曲线的形状和 AUC 值不会因为类别的不平衡而受到显著影响。
- 这使得 ROC 曲线特别适用于类别不平衡的问题(即正类样本数量远少于负类样本的情况),因为它不会因为负类样本的数量多而使评价结果产生偏差。
非均等代价
犯不同的错误往往会造成不同的损失
此时需考虑“非均等代价”(unequal cost)
代价敏感 (cost-sensitive) 错误率:
比较检验
在某种度量下取得评估结果后,是否可以直接比较以评判优劣?
NO !
因为:
- 测试性能不等于泛化性能
- 测试性能随着测试集的变化而变化
- 很多机器学习算法本身有一定的随机性
机器学习 = “概率近似正确”
常用方法
统计假设检验 (hypothesis test) 为学习器性能比较提供了重要依据
(统计显著性)
两学习器比较
-
交叉验证 t 检验 (基于成对 t 检验)
k 折交叉验证; 5x2交叉验证 -
McNemar 检验 (基于列联表,卡方检验)