机器学习: 致力于研究如何通过计算的手段,利用经验来改善系统自身的性能。在计算机系统中,“经验”通常以“数据“形式存在,因此,机器学习所研究的主要内容,是关于在计算机上从数据中产生”模型“的算法,即”学习算法“。有了学习算法,我们把经验数据提供给它,他就能基于这些数据产生模型;在面对新的情况时,模型会给我们提供相应的判断。可以说机器学习时研究关于”学习算法“的学问。
数据集(data set):记录的集合。其中每条记录是关于一个事件或对象的描述,称为“示例”,“样本”
eg.总共100个西瓜
属性\特征(attribute\feature):反映事件或对象在某方面的表现或性质的事项。
eg.西瓜的特征:色泽、根蒂、敲声等
属性值(attribute value):属性上的取值。其张成的空间称为“属性空间(attribute space)”\“样本空间(sample space)”\“输入空间(sample space)”。
eg.西瓜的色泽有青绿、乌黑等。
eg.属性空间是属性值的全体集合,比如西瓜的三个属性(色泽、根蒂、敲声),张成3维空间,每个西瓜都在该空间中找到自己的坐标,每个点也对应一个"坐标向量",也称"特征向量"
数学表述
学习\训练(learning\training):从数据中学得模型的过程。是假设不断逼近真实的过程。
训练数据(training data):训练过程所使用的数据。
训练样本(training sample):训练所使用的样本。
训练集(training set):训练样本的集合。
假设(hypothesis):学得模型对应了关于数据的某种潜在规律。
真相\真实(ground truth):潜在规律自身。
标记(label):训练样本的“结果”信息,是判断,预测。
样例(example):带有标记的样本。
分类(classification):预测的是离散值的学习任务。
二分类(binary classification):只涉及两个类别。
多分类(multi-class classification):涉及多个类别。
回归(regression):预测的是连续值的学习任务
聚类(clustering):将训练集中的样本分为若干组,机器自己分组。每个组称为一个"簇"。
监督学习(supervised learning):知道样本的结果。
比如:分类+回归
无监督学习(unsupervised learning):不知道样本的结果。
比如:聚类
测试(testing):对学得模型,对其进行预测的过程。
泛化能力:学得模型适用在新样本上的能力。
归纳:从特殊到一般的“泛化”过程,从具体的事实归结出一般性规律。
狭义:从训练数据中得到概念
广义:从样本中学习
演绎:从一般到特殊的"特化"过程,从基础原理推演出具体状况。
机器学习,是从样例中学习的过程。是归纳的过程。
机器学习过程看作一个在所有假设组成的空间中进行搜索的过程,搜索目标是找到与训练集“匹配”的假设,
版本空间:存在与训练集一致的假设集合。
同一个数据集训练出了不同的模型,如何选择模型?
归纳偏好:机器学习算法在学习过程中对某种类型假设的偏好。
引导算法确立偏好的一般性原则:
奥卡姆剃刀(Occam's razor):若有多个假设与观察一致,则选最简单的那个
学习算法的期望性能相同:
没有免费的午餐定理(NFL:No free Lunch Theorem):脱离具体问题,空谈哪个算法更好,无意义
错误率:分类错误的样本数占样本总数的比例。
如果在m个样本中有a个样本分类错误,则错误率\(E=a/m\)
精度(accuarcy):精度=1-错误率
\(1-a/m\)
误差(error)\训练误差\经验误差:学习器的实际预测输出与样本的真实输出之间的差异。
泛化误差:在新样本上的误差。
过拟合(overfitting):把训练样本学得太好了,可能把训练样本自身的一些特点当做了所有潜在样本都会具有的一般性质,导致泛华性能下降。
造成因素:1、学习能力过于强大,将训练样本的自身特性学到。
解决:无法避免,只能减小
欠拟合(underfittinig):对训练样本的一般性质尚未学好。
造成因素:1、学习能力低下,没有学习到训练样本的一般特征。
解决:1、决策树中扩展分支;2、增加该训练轮数;
模型选择问题:算法、参数都会产生不同的模型,如何选模型?
理想方案:对模型的泛化误差进行评估,然后选择泛化误差最小的模型;但泛化误差没法直接获得,而训练误差又有过拟合现象;
利用测试集来测试学习群对新样本的判别能力,然后以测试集上的"测试误差"作为泛化误差的近似。
测试集:测试学习器对新样本的判别能力。
测试集的选择
"留出法"直接将数据集D划分为两个互斥的集合,其中一个集合作为训练集S,另一个作为测试集T. \(D=S∪T,S∩T=∅\).在S上训练出模型后,用T来评估其测试误差,作为对泛化误差的估计.
分层采样:保留类别比例的采样方式。
该方法需要多次重复试验,取平均值
"交叉验证法" (cross alidation) 将数据D分为k个大小相似的互斥子集,\(D= D1∪D2∪...Dk, Di∩Dj = ø(i≠j)\),每个子集Di尽可能保持数据分布的一致性,即从D通过分层采样得到。然后,每次用k-1 子集的并集作为训练集,余下的那个子集作测试集;这样就可获得k组训练/测试集,从而可进行k次训练和测试,最终返回的是k个测试结果的均值。
注意:将数据集D划分为k个子集同样存在多种划分方式.为减小因样本划分不同而引入的差别,k折交叉验证通常要随机使用不同的划分重复p次,最终的评估结果是这p次k折交叉验证结果的均值。
特别地:
假定数据集D中包含 m样本,令 k=m 则得到了交叉验证法的一个特例:留一法(Leave-One-Out,简称LOO).显然,留一法不受随机样本划分方式的影响,因为m个样本只有唯一的方式划分为m个子集一一每个子集包含一个样本;留一法使用的训练集与初始数据集相比只少了一个样本,这就使得在绝大多数情况下,留一法中被实际评估的模型与期望评估的用D训练出的模型很相似.因此,留一法的评估结果往往被认为比较准确.
留出法和交叉验证法,使用评估模型的训练集比D小,必然会引入一些因样本规模不同而导致的估计偏差。
留一法手训练样本规模的影响比较小,但计算复杂度太高
“自助法”以自助采样法(bootstrap sampling)为基础.给定包含m个样本的数据集D,我们对它进行采样产生数据集D': 每次随机从D中挑选一个样本,将其拷贝放入D',然后再将该样本放回初始数据集D中,使得该样本在下次采样时仍有可能被采到;这个过程重复执行m次后,我们就得到了包含m个样本的数据集D',这就是自助采样的结果。
可见,D中有一部分样本会在 D'中多次出现,而另一部分样本不出现.
注意
自助法在数据集较小、难以有效划分训练/测试集时很有用;此外,自助法能从初始数据集中产生多个不同的训练集,这对集成学习等方法有很大的好处.然而,自助法产生的数据集改变了初始数据集的分布,这会引入估计偏差.因此,在初始数据量足够时,留出法和交叉验证法更常用一些.
什么是调参(parameter tuning)?
学习算法都有参数的设定,参数不同,学得模型的性能有着显著差别。因此,在模型评估与选择时,除了要选择合适的学习算法,还要对算法参数进行设定,即"参数调节"、"调参".
调参和算法选择的区别?如果采用性能最好的模型的参数作为结果不就行了。这样的考虑基本正确。
最终模型:在模型评估和选择过程中,预留了一部分数据作评估测试。在模型选择完成后,学习算法和参数配置已选定,此时应该用数据集D重新训练模型。这个模型在训练过程中使用了所有样本,这才是我们提交给用户的模型。
验证集(validation set):在模型评估与选择中,用于评估测试的数据集称为验证集.
测试集上的判别效果来估计模型在实际使用时的泛化能力,而把训练数据划分训练集和验证集,基于验证集上额性能来进行模型选择和调参
训练集相当于上课学知识
验证集相当于课后的的练习题,用来纠正和强化学到的知识
测试集相当于期末考试,用来最终评估学习效果
性能度量(performance management):模型泛化能力的评价标准
描述:在预测任务中,给定样例集\(D=\{(x_{1},y_{1}),...,(x_{m},y_{m})\}\)其中\(y_{i}\)是示例\(x_{i}\)的真实标记。要评估学习器\(f\)的性能,就预测学习器预测结果\(f(x)\)与真实标记\(y\)进行比较。
补充:
1、回归任务最常用的性能度量是“均方误差”(mean squared error)
分类任务中最常用的两种性能度量:错误率+精度
对样例集\(D=\{(x_{1},y_{1}),...,(x_{m},y_{m})\}\)来说,
错误率:
\(\mathbb{I}\)(.)是指示函数,若·为真则取值1,否则取值0.
精度:
注意:精度不一定是准确的,受样本数据分布的影响。
混淆矩阵(confusion matrix):预测结果和真实值之间的对比。
TP:真正例;FP:假正例;TN:真反例;FN:假反例
右边P\N代表预测值,左边T\F是对预测值的判断;比如TN 预测反例,真实反例
举个形象的例子:
查准率:预测到的结果中有多少是匹配的;
查全率:匹配的结果中有多少是预测到的;
案例:手写数字识别,分类器,二分类:是5 vs 不是5
1、混淆矩阵:
2、P-R反向变动关系原理
单独阈值下,查准、查全率分析
3、阈值-PR图像
各种阈值情况下,查准、查全率曲线
4、P-R图像
5、最优阈值的确定
方法一:BEP(平衡点)
阈值-PR图像中,P线与R线相交的点
PR图像中,P=R直线与曲线相交点
方法二:F1度量-调和平均
想要P和R的比例更合理
视P,R如下:
\(P=\frac{1}{1+3}\),\(R=\frac{1}{1+2}\)
方法三:\(F_{β}\)度量-加权调和平均
其中\(β>0\)度量了查全率对查准率的相对重要性.
\(β=1\)时退化为标准的\(F_{1}\);
\(β>1\)时查全率有更大的影响;
\(β<1\)时查准率有更大的影响。
注意部分
\(F_{1}\)是基于查准率与查全率的调和平均(harmonic mean)定义的:
\(F_{β}\)则是加权调和平均:
与算数平均\(\frac{P+R}{2}\)和几何平均\(\sqrt{P×R}\)相比,调和平均更重视较小值
1、先分别计算,再求平均值
\((P_{1},R_{1}),(P_{2},R_{2}),(P_{3},R_{3})...,(P_{n},R_{n})\)
2、先求平均值再计算
\(\overline{TP},\overline{FP},\overline{TN},\overline{FN}\)
1、ROC(Receiver Operation Characteristic):全称“受试者工作特征”曲线。根据学习器的预测结果对样例进行排序,按此顺序逐个把样本作为正例进行预测,每次计算出两个重要量的值,分别以它们为横、纵坐标作图,就得到了ROC曲线。
ROC曲线的纵轴是真正率(TPR),横轴是假正率(FPR)
还是得用到混淆矩阵,给出理解
混淆矩阵 | P | N |
---|---|---|
T | TP(真正例) ① | FN(假反例) ② |
F | FP(假正例) ③ | TN(真反例) ④ |
注:①②③④,是相应的指代,在公式中方便理解。 |
ROC曲线下分析
ROC示意图:
2、AUC(Area under ROC Curve):ROC曲线下的面积
形式化看,AUC考虑的是样本预测的排序质量,因此它与排序误差有紧密连续,给定\(m^{+}\)个正例和\(m^{-}\)个反例,令\(D^{+}\)和\(D^{-}\)分别表示正、反例集合,则排序“损失”(loss)定义为:
\(l_{rank}计算\)举例分析:
D(正反例集合) | m(正例、反例) | P | N | |
---|---|---|---|---|
+ | D+(正例集合)[5,5,5,5,5,5] | m+(6个) | ① | ② |
- | D-(反例例集合)[8,7,3,9,2,6] | m-(6个) | ③ | ④ |
\(l_{rank}\)计算过程:
考虑每一对正反例,若正例的预测值小于反例,则记一个“罚分”,若相等,则记0.5个“罚分”。容易看出,\(l_{rank}\)对应的是ROC曲线上的面积:一个正例在ROC曲线上对应标记点的坐标是(x,y)则x恰是排序在其之前的反例所占的比例,即假正例率.因此有:
AUC公式分析:
ROC\阈值点 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
TPR | 0/6 | 1/6 | 2/6 | 3/6 | 3/6 | 4/6 | 5/6 | 5/6 | 6/6 | 6/6 | 6/6 | 6/6 | 6/6 |
FPR | 0/6 | 0/6 | 0/6 | 0/6 | 1/6 | 1/6 | 1/6 | 2/6 | 2/6 | 3/6 | 4/6 | 5/6 | 6/6 |
将表格中的数值,绘制成ROC曲线:
1、为权衡不同类型错误所造成的不同损失,可为错误赋予“非均等代价”(unequal cost)
2、在非均等代价下,我们所希望的不再是简单地最小化错误次数,而是希望最小化“总体代价”(total cost)
二分类代价矩阵:
“代价敏感”错误率(Error)为
相当于:
代价曲线:
在非均等代价下,ROC曲线不能直接反映出学习器的期望总体代价,但代价曲线可达该目的。
解释:
1、明确参数:\(p=\frac{m_{+}}{m}\)(正例占比)
2、代价曲线基本思路:
目的:对于一个模型,根据p不同,找到使得代价总期望最小的模型的阈值。
模型算法固定,阈值不固定,找到阈值从而使得模型固定下来,即固定模型的代价总期望,从而对比不同模型。
横轴:归一化的正概率代价期望
纵轴:归一化的总代价期望
过程:
给定p,给定模型
根据归一化代价期望的最小值,确定圈1圈2圈3圈4的比例
之前我们通过例子看出,阈值决定了这个比例
反过来说,这个比例确定了,阈值也就确定了
所以这时模型的阈值也对应确定下来了
代价曲线:
代码实践
https://github.com/Gievance/Python-MachineLearning/blob/master/Machine Learning note/代价曲线.ipynb
有了评估方法和性能度量,可以对学习器的性能进行比较了吗?
不能,理由如下:
1、测试集上的性能与真正的泛化性能未必相同
2、测试集上的性能和测试集本身有很大关系,即使使用相同测试集,测试的结果也会有不同。
3、很多机器学习算法本身具有一定的随机性,即便用相同的参数设置在同一测试集上,其结果也会不同。
适当的方法对学习器的性能进行比较:统计假设检验(hypothesis test)
本节默认以错误率为性能度量,用\(\epsilon\)表示
\(即:P(\hat{\epsilon};\epsilon)=(\begin{matrix}m\\\hat{\epsilon×m}\end{matrix})\epsilon^{\hat{\epsilon}×m}(1-\epsilon)^{m-\hat{\epsilon}×m}\)
实践代码:https://github.com/Gievance/Python-MachineLearning/blob/master/Machine Learning note/假设检验-二项检验.ipynb
\(\alpha\):不可置信度
所以:
使用“二项检验(binomial test)”对"\(\epsilon \leq 0.3\)"(即泛化是否不大于0.3)这样的假设进行检验。
更一般的,考虑假设"\(\epsilon \leq \epsilon_{0}\)",则在\(1-\alpha\)的概率内所能观测到的最大错误率如下计算。这里的\(1-\alpha\)反映了结论的"置信度"(confidence),直观地来看,相应与二项分布示意图非阴影区域
若测试错误率\(\hat{\epsilon}\)小于临界值\(\overline{\epsilon}\),则在\(1-\alpha\)置信度下,认为\(\epsilon \leq \epsilon_{0}\)
小结:
假设泛化错误率为\(\epsilon \leq \epsilon_{0}\),在测试集样本中,以泛化错误率为测试集错误率,对测试集不同错误数的情况检验其概率,得到二项分布图,当真实测试集的错误样本数在\(1-\alpha\)区域内,则称有\(1-\alpha\)的置信度说,泛化错误率小于\(\epsilon_{0}\)
很多时候并非进行一次测试,而是通过多次重复留出法或是交叉验证法等进行多次测试,得到多个测试错误率,此时使用"t-检验".
假定我们得到k个测试错误率,\(\hat{\epsilon}_{1},\hat{\epsilon}_{2},...,\hat{\epsilon}_{k}\)
则平均测试错误率和方差为:
平均测试错误率\(\mu\):
方差\(\sigma^{2}\):
考虑k个测试错误率可看作泛化错误率\(\epsilon_{0}\)的独立采样,则变量:$ \tau_{t}=\frac{\sqrt{k}(\mu-\epsilon_{0})}{\sigma}$服从自由度为k-1的t分布:
对于假设"\(\mu=\epsilon_{0}\)"和显著度\(\alpha\),当测试错误率为\(\epsilon_{0}\)时,\(|\mu-\epsilon_{0}|\)位于置信区间(\(1-\alpha\))内,则假设成立,即可认为泛化错误率为\(\epsilon_{0}\).否则,假设不成立。
下接:3-4章线性模型