机器学习
参考文章链接:https://gitee.com/fakerlove/machine-learning
(我参考师兄的笔记做了一点儿的修改,增加了一些内容和自己对于某些部分的理解。整体框架还是师兄的东西,致敬!)
1. 绪论
1.1 简介
1.1.1 人工智能
人工智能之父-图灵
人工智能:机器模拟人的意识和思维
人工智能是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门技术科学。“人工智能”是“一门技术科学”,它研究与开发的对象是“理论、技术及应用系统”,研究的目的是为了“模拟、延伸和扩展人的智能”。
人工智能的研究领域也在不断扩大,图二展示了人工智能研究的各个分支,包括专家系统、机器学习、进化计算、模糊逻辑、计算机视觉、自然语言处理、推荐系统等。
1) 发展方向
人工智能大致分三个方向
-
计算机视觉
人脸识别
图像形成
-
自然语言处理(NLP)
文本挖掘和分类
机器翻译
语音识别
-
机器人
2) 三要素
- 数据
- 算法
- 计算力
1.1.2 机器学习
机器学习:一种实现人工智能的方法
机器学习(Machine Learning)是指用某些算法指导计算机利用已知数据得出适当的模型,并利用此模型对新的情境给出判断的过程。
机器学习的思想并不复杂,它仅仅是对人类生活中学习过程的一个模拟。而在这整个过程中,最关键的是数据。
任何通过数据训练的学习算法的相关研究都属于机器学习,包括很多已经发展多年的技术,比如线性回归(Linear Regression)、K均值(K-means,基于原型的目标函数聚类方法)、决策树(Decision Trees,运用概率分析的一种图解法)、随机森林(Random Forest,运用概率分析的一种图解法)、PCA(Principal Component Analysis,主成分分析)、SVM(Support Vector Machine,支持向量机)以及ANN(Artificial Neural Networks,人工神经网络)。
1.1.3 深度学习
深度学习(Deep Learning)的概念源于人工神经网络的研究。含多隐层的多层感知器就是一种深度学习结构。深度学习通过组合低层特征形成更加抽象的高层表示属性类别或特征,以发现数据的分布式特征表示。
深度学习是机器学习研究中的一个新的领域,其动机在于建立、模拟人脑进行分析学习的神经网络,它模仿人脑的机制来解释数据,例如图像,声音和文本。
深度学习:一种实现机器学习的技术,
深度学习,作为目前最热的机器学习方法,但并不意味着是机器学习的终点。
1.1.4 分类(判别式和生成式)
机器学习可以分为两大类:生成式模型(Generative Model)、判别式模型(Discriminative Model)。
判别式模型:直接根据 x x x的特征,来对 c c c建模,划定一个整体判别边界。训练完模型后,每新来一个数据,就根据这个边界来判断它应该属于哪一类。
生成式模型:观察 x x x与 c c c的整体分布,通过对每一个 c c c建模,最终选择能使结果最优的c作为最终分布P(x,c)。训练完模型后,每新来一个数据,就根据所得到的P(x,c)与x的特征,来判断c。(所以生成式模型可以转化成判别式模型,而判别式模型不能转化成生成式模型)
总结一下就是,所谓“判别”和“生成”其实是在训练阶段的目标不同,判别式模型目标在于得到一个判别边界,而生成式模型目标在于数据与标签的联合分布。
1.2 书本网站推荐
- 学习网址: https://cs231n.Stanford.edu
- 第二个网址-吴恩达的学习网站: https://www.coursera.org/learn/machine-learning
- 机器学习平台:https://studio.azureml.net/
1.3 三者关系
在人工智能的大陆上,有很多家族,其中最大的一个家族就是机器学习,其中现任族长叫做深度学习,手上有个特殊的绝技神经网络。现在有个不安分的弟子想篡位叫做强化学习
严格意义上说,人工智能和机器学习没有直接关系,只不过目前机器学习的方法被大量的应用于解决人工智能的问题而已。目前机器学习是人工智能的一种实现方式,也是最重要的实现方式。
早期的机器学习实际上是属于统计学,而非计算机科学的;而二十世纪九十年代之前的经典人工智能跟机器学习也没有关系。所以今天的AI和ML有很大的重叠,但并没有严格的从属关系。
不过如果仅就计算机系内部来说,ML是属于AI的。AI今天已经变成了一个很泛泛的学科了。
如果把人工智能与机器学习当成两个学科来看,三者关系如下图所示:
向左转|向右转
如果把深度学习当成人工智能的一个子学科来看,三者关系如下图所示
向左转|向右转
1.4 十大算法分类
十大经典算法各种的都有。就总结一下
较为著名的机器学习十大算法为:决策树、支持向量机SVM、随机森林算法、逻辑回归、朴素贝叶斯、KNN算法、K-means算法、Adaboost算法、Apriori算法、PageRank算法。
1.4.1 监督学习
supervised learning;
有监督学习,就是有正确的答案的训练数据
输入数据即由输入特征和目标值所组成,
-
决策树(Decision Trees)
决策树是一个决策支持工具,它使用树形图或者决策模型以及可能性序列,包括偶然事件的结果、资源成本和效用。
-
朴素贝叶斯分类
(Naive Bayesian classification)
朴素贝叶斯分类器是一类简单的概率分类器,它基于贝叶斯定理和特征间的强大的(朴素的)独立假设。
一些应用例子:
- 判断垃圾邮件
- 对新闻的类别进行分类,比如科技、政治、运动
- 判断文本表达的感情是积极的还是消极的
- 人脸识别
-
最小二乘法(Ordinary Least Squares Regression)
如果你懂统计学的话,你可能以前听说过线性回归。最小二乘法是一种计算线性回归的方法。你可以将线性回归看做通过一组点来拟合一条直线。实现这个有很多种方法,“最小二乘法”就像这样:你可以画一条直线,然后对于每一个数据点,计算每个点到直线的垂直距离,然后把它们加起来,那么最后得到的拟合直线就是距离和尽可能小的直线。
-
逻辑回归(Logistic Regression)
逻辑回归是一个强大的统计学方法,它可以用一个或多个解释变量来表示一个二项式结果。它通过使用逻辑函数来估计概率,从而衡量类别依赖变量和一个或多个独立变量之间的关系,后者服从累计逻辑分布。
-
支持向量机(Support Vector Machine,SVM)
SVM是二进制分类算法。给定N维坐标下两种类型的点,SVM生成(N-1)维的超平面来将这些点分成两组。假设你在平面上有两种类型的可以线性分离的点,SVM将找到一条直线,将这些点分成两种类型,并且这条直线尽可能远离所有这些点。
-
集成方法(Ensemble methods)
集成方法是学习算法,它通过构建一组分类器,然后通过它们的预测结果进行加权投票来对新的数据点进行分类。原始的集成方法是贝叶斯平均,但是最近的算法包括纠错输出编码、Bagging和Boosting。
-
KNN(K Nearest Neighbor)
K表示K个邻居,不表示距离,因为需要求所有邻居的距离,所以效率低下。
优点:可以用来填充缺失值,可以处理非线性问题
调优方法:K值的选择,k值太小,容易过拟合
应用:样本数少,特征个数较少,kNN更适合处理一些分类规则相对复杂的问题,在推荐系统大量使用
KNN算法和贝叶斯算法有某种神秘的联系,用贝叶斯算法估算KNN的误差。
1.4.2 非监督学习
unsupervised learning;
-
聚类算法(Clustering Algorithms)
K-means K均值
聚类是将一系列对象分组的任务,目标是使相同组(集群)中的对象之间比其他组的对象更相似。
没有正确答案的训练数据,怎么样都是对的
每一种聚类算法都不相同,下面是一些例子:
- 基于质心的算法
- 基于连接的算法
- 基于密度的算法
- 概率
- 降维
- 神经网络/深度学习
-
主成分分析(Principal Component Analysis,PCA)
PCA是一个统计学过程,它通过使用正交变换将一组可能存在相关性的变量的观测值转换为一组线性不相关的变量的值,转换后的变量就是所谓的主分量。
-
奇异值分解(Singular Value Decomposition,SVD)
在线性代数中,SVD是复杂矩阵的因式分解。对于给定的m * n矩阵M,存在分解使得M=UΣV,其中U和V是酉矩阵,Σ是对角矩阵。
-
独立成分分析
(Independent Component Analysis,ICA)
ICA是一种统计技术,主要用于揭示随机变量、测量值或信号集中的隐藏因素。ICA对观测到的多变量数据定义了一个生成模型,这通常是作为样本的一个大的数据库。在模型中,假设数据变量由一些未知的潜在变量线性混合,混合方式也是未知的。潜在变量被假定为非高斯分布并且相互独立,它们被称为观测数据的独立分量。
1.4.3 强化学习
reinforcement learning;
四要素:agent,action,environemnt,reward
1.4.4 半监督学习
semi-supervised learning
1.4.5 自监督学习
semi-supervised learning
1.4.6 遗传算法
genetic algorithm.
1.5 机器学习基本术语
机器学习的工作流程
- 获取数据
- 数据基本处理
- 特征工程
- 机器学习,模型训练
- 模型评估
就是从数据中自动分析获取数据模型,并利用模型对未知的数据进行训练
-
数据集-100个西瓜
一组记录的集合
-
样本-1个西瓜
数据集中的一条记录
-
特征(属性)-颜色,大小
反映时间或对象在某方面的表现或性质的事项
-
特征向量
以颜色为x轴,大小为y轴,敲声为z轴,每个西瓜都有自己的坐标位置,每个坐标位置对应的坐标向量叫做特征向量
-
学习
从数据中学得模型的过程称为学习或者训练
-
训练数据
训练过程中使用的数据称为训练数据
-
训练样本
数据的每个样本叫做训练样本
-
特征工程
特征工程是使用专业背景知识和技巧处理数据,使用特征能在机器学习算法上发挥更好的作用的过程
说白了就是如何把图像视屏等数据变成机器识别是过程
1.6 假设空间
科学的推理手段
-
归纳
特殊到一般
-
狭义
从训练数据中得到概念
布尔概念;是或者不是
-
广义
从样本中学习
-
-
演绎
一般到特殊
1.7 归纳偏好
同一个数据集训练出了不同 的模型,应该如何选择模型
一般会使用奥卡姆剃刀原则
若有多个假设与观察一致,则选择最简单的哪一个
2.模型评估与选择
如何评估一个模型到底好还是不好。这个时候就需要我们的模型评估。
一个模型好坏判决的标准:1. P-R曲线 2.ROC曲线
2.1 经验误差与过拟合
-
错误率
通常把分类错误的样本数占样本总数的比例叫做错误率
在m个样本中有a个样本分类错误,错误率E=a/m
-
欠拟合
机器学习到的特征太少,导致区分不太标准,不能准确识别天鹅。
-
过拟合
当学习器把训练样本学的太好的时候,很可能已经把训练样本的自身的一些特点当做了所有潜在样本都会具有的一般性质,会导致泛化能力的下降,这种现象叫做过拟合
机器由于学习的特征过多,导致是天鹅的在实际的验证过程中错误。
(西瓜书里判别树叶的例子也非常的形象。) -
泛化能力
即模型对没有见过的数据的预测能力
-
泛化误差
机器学习在训练集上的误差叫做训练误差或者经验误差,在新的样本上的误差叫做泛化误差
2.1.1 过拟合和欠拟合的解释
- 欠拟合是指模型在训练集、验证集和测试集上均表现不佳的情况;
- 过拟合是指模型在训练集上表现很好,到了验证和测试阶段就很差,即模型的泛化能力很差。
2.1.2 过拟合和欠拟合产生的原因:
欠拟合(underfitting):
- 模型复杂度过低
- 特征量过少
过拟合(overfitting):
- 建模样本选取有误,如样本数量太少,选样方法错误,样本标签错误等,导致选取的样本数据不足以代表预定的分类规则
- 样本噪音干扰过大,使得机器将部分噪音认为是特征从而扰乱了预设的分类规则
- 假设的模型无法合理存在,或者说是假设成立的条件实际并不成立
- 参数太多,模型复杂度过高
- 对于决策树模型,如果我们对于其生长没有合理的限制,其自由生长有可能使节点只包含单纯的事件数据(event)或非事件数据(no event),使其虽然可以完美匹配(拟合)训练数据,但是无法适应其他数据集
- 对于神经网络模型:a)对样本数据可能存在分类决策面不唯一,随着学习的进行,,BP算法使权值可能收敛过于复杂的决策面;b)权值学习迭代次数足够多(Overtraining),拟合了训练数据中的噪声和训练样例中没有代表性的特征
2.1.3 解决欠拟合(高偏差)的方法
1、模型复杂化
对同一个算法复杂化。例如回归模型添加更多的高次项,增加决策树的深度,增加神经网络的隐藏层数和隐藏单元数等
弃用原来的算法,使用一个更加复杂的算法或模型。例如用神经网络来替代线性回归,用随机森林来代替决策树等
2、增加更多的特征,使输入数据具有更强的表达能力
特征挖掘十分重要,尤其是具有强表达能力的特征,往往可以抵过大量的弱表达能力的特征。
特征的数量往往并非重点,质量才是,总之强特最重要。
能否挖掘出强特,还在于对数据本身以及具体应用场景的深刻理解,往往依赖于经验。
3、调整参数和超参数
超参数包括:
神经网络中:学习率、学习衰减率、隐藏层数、隐藏层的单元数、Adam优化算法中的β1和β2参数、batch_size数值等。
其他算法中:随机森林的树数量,k-means中的cluster数,正则化参数λ等。
4、增加训练数据往往没有用
欠拟合本来就是模型的学习能力不足,增加再多的数据给它训练它也没能力学习好。
5、降低正则化约束
正则化约束是为了防止模型过拟合,如果模型压根不存在过拟合而是欠拟合了,那么就考虑是否降低正则化参数λ或者直接去除正则化项
2.1.4 解决过拟合(高方差)的方法:
1、增加训练数据数
- 发生过拟合最常见的现象就是数据量太少而模型太复杂
- 过拟合是由于模型学习到了数据的一些噪声特征导致,增加训练数据的 量能够减少噪声的影响,让模型更多地学习数据的一般特征
- 增加数据量有时可能不是那么容易,需要花费一定的时间和精力去搜集处理数据
- 利用现有数据进行扩充或许也是一个好办法。例如在图像识别中,如果没有足够的图片训练,可以把已有的图片进行旋转,拉伸,镜像,对称等,这样就可以把数据量扩大好几倍而不需要额外补充数据
- 注意保证训练数据的分布和测试数据的分布要保持一致,二者要是分布完全不同,那模型预测真可谓是对牛弹琴了。
2、使用正则化约束
代价函数后面添加正则化项,可以避免训练出来的参数过大从而使模型过拟合。使用正则化缓解过拟合的手段广泛应用,不论是在线性回归还是在神经网络的梯度下降计算过程中,都应用到了正则化的方法。常用的正则化有l1正则和l2正则,具体使用哪个视具体情况而定,一般l2正则应用比较多。
3、减少特征数
欠拟合需要增加特征数,那么过拟合自然就要减少特征数。去除那些非共性特征,可以提高模型的泛化能力.
4、调整参数和超参数
不论什么情况,调参是必须的
5、降低模型的复杂度
欠拟合要增加模型的复杂度,那么过拟合正好反过来。
6、使用Dropout
这一方法只适用于神经网络中,即按一定的比例去除隐藏层的神经单元,使神经网络的结构简单化。
7、提前结束训练
即early stopping,在模型迭代训练时候记录训练精度(或损失)和验证精度(或损失),如果模型训练的效果不再提高,比如训练误差一直在降低但是验证误差却不再降低甚至上升,这时候便可以结束模型训练了。
2.2 常见的模型评估方法
是使用测试集来对学习器对新样本的判断能力。
2.2.1 留出法-测试集
直接将数据集D一份为2,一个为训练集S,一份为测试集T, D = S ∪ T D=S\cup T D=S∪T
使用S训练出模型,然后使用T评估其误差
如何划分呢?
很简单:划分前面是70% 为训练集,后面的30% 为测试集
2.2.2 交叉验证法-测试集
例如一共有10分数据集,
第一次把 D 10 D_{10} D10作为测试集,剩下的部分全部作为训练集
第二次把 D 9 D_{9} D9作为测试集,剩下的部分全部作为训练集
依次类推,最后一次把 D 1 D_{1} D1作为测试集,剩下的部分全部作为训练集.
一共得出10次结果,这样把结果求个平均值
k折交叉验证有一个特殊情况,当k=1时,就是留一法。将m个样本划分为m个子集,每个子集包含一个样本。训练集比初始数据集少一个样本,验证集就是这个少的样本。
缺点:当数据量较大时,对算力要求较高
2.2.3 自助法-测试集
首先了解一个数学极限
l i m m → ∞ ( 1 − 1 m ) m = 1 e = 0.368 lim_{m\to \infty}(1-\frac{1}{m})^m=\frac{1}{e}=0.368 limm→∞(1−m1)m=e1=0.368
怎么用呢,就是我们随机抽样m份的数据集,记录下数据,放回原样,然后再次取m 分数据,依次类推。重复如此操作m次后,就如同极限一样。取一次m的几率为 1 − 1 m 1-\frac{1}{m} 1−m1的机会,这样子去m次就有36.8%的样本未出现在数据集中,则把36.8%的样本集作为测试集,剩下的样本作为训练集
缺点:改变初始数据集的分布,会引入误差
2.2.4 调参-验证集
调参
大多数学习算法都需要设定自行设定参数,参数的不同,学习得出的模型性能往往天差地别
对参数的选择往往是区间内取值,比如有三个参数,每个参数有5种选择,那么测试/训练集就有125个模型需要查看
验证集
是模型评估与选择中用于评估册数的数据集,基于验证集上的性能进行模型的选择和调参。
流程一般如下:
训练集训练,验证集上看结果,进行调参,
再在验证集上看结果,
最后在测试集上看结果
2.3 性能度量
2.3.1 均方误差
E ( f ; D ) = 1 m ∑ i = 1 m ( f ( x i ) − y i ) 2 E(f;D)=\frac{1}{m}\sum_{i=1}^m(f(x_i)-y_i)^2 E(f;D)=m1∑i=1m(f(xi)−yi)2
如果数据分布D和概率密度函数p(.),均方误差无额
E ( f ; D ) = ∫ x ∼ D ( f ( x ) − y ) 2 p ( x ) d x E(f;D)=\int_{x\sim D}(f(x)-y)^2p(x)dx E(f;D)=∫x∼D(f(x)−y)2p(x)dx
2.3.2 错误率
E ( f ; D ) = 1 m ∑ i = 1 m ∏ ( f ( x i ) ≠ y i ) E(f;D)=\frac{1}{m}\sum_{i=1}^m\prod (f(x_i)\ne y_i) E(f;D)=m1∑i=1m∏(f(xi)=yi)
小双杠是统计,满足括号里条件的元素的个数的意思
这个表达式表达的意思为统计出来的错误的个数/总数m
E 表示的是error,不是期望
2.3.3 精度
a c c ( f ; D ) = 1 m ∑ i = 1 m ∏ ( f ( x i ) y i ) = 1 − E ( f ; D ) acc(f;D)=\frac{1}{m}\sum_{i=1}^m\prod (f(x_i)\ y_i)=1-E(f;D) acc(f;D)=m1∑i=1m∏(f(xi) yi)=1−E(f;D)
就是正确的比率
错误率和精度的优点是:它们不仅仅适用于二分类问题,也同样适用于多分类问题。
但是单单看错误率和精度两个指标无法很好的对模型进行合适的评估。一方面,现在不少的模型最终都是预测一个类别的概率值,为了计算错误率和精度,得设定一个阈值,以便确定预测的正例和反例。这样相当于引入了一个新的超参数,会增加复杂性和不确定行。
2.3.4 查准率,查全率
一个二分法
对于二分类问题,样本点的实际类别和预测的类别两辆组合,会产生4种情况:
真实情况 | 正例 | 反例 |
---|---|---|
T | TP(原本是正确,也预测成正确) | FN(原本是正确的,但是预测成错误的) |
错误的F | FP(原本是错误的,但是预测成正确的) | TN(原本是错误的,预测也是错的) |
也就是说只有TP和TN是成功的预测的结果,FP,FN是预测错误的
查准率
P = T P T P + F P P=\frac{TP}{TP+FP} P=TP+FPTP
查全率
R = T P T P + F N R=\frac{TP}{TP+FN} R=TP+FNTP
在举个例子
抓汉奸的例子吧
真实结果 | 预测结果 | ||
---|---|---|---|
健康人 | 健康 | 健康 | TP |
健康人 | 健康 | 患病 | FN(误诊) |
患者 | 患病 | 健康 | FP(漏诊) |
患者 | 患病 | 患病 | TN |
-
查准率
做健康筛查的时候,查出来是健康的人里面,多少人是真正健康的。
用西瓜说的话,我挑的瓜有多少比率是好瓜
查准率就是说筛查的这批病人中,被诊断为健康的人的正确率是多少。(大致可以这么理解。)
-
查全率
做健康筛查的时候,实际健康的人里面,多少人被诊断为健康。
用西瓜说,就是有多少的好瓜被我挑出来了
查全率就是说筛查的这批病人中,把健康的那部分人都诊断为健康的比率,也就是说有没有误诊。
将查准率和查全率结合起来,有三种方法进行最优阈值的确定。
n个二分法
当出现很多个二分类时,最直接的做法是分别计算出每个二分类的查准率和查全率,在计算平均值
得到 T P , F P , T N , F N TP,FP,TN,FN TP,FP,TN,FN的平均值 T P ‾ , F P ‾ , T N ‾ , F N ‾ \overline{TP},\overline{FP},\overline{TN},\overline{FN} TP,FP,TN,FN,在基于这些平均值计算出微查准率和微查全率
2.3.5 P-R曲线
一个训练集多种模型如何进行抉择?
将样本按照按照预测为正例的概率值从大到小进行排序,从第一个开始,逐个将当前样本点的预测值设置为阈值,有了阈值之后,即可得出混淆矩阵各项的数值,然后计算出P和R,以R为横坐标,P为纵坐标,绘制于图中,即可得出P-R曲线,示意图如下。
当一个模型a的P-R曲线完全包住另一个模型b的P-R曲线时,即可认为a优于b。
如果出现A和B这种有交叉的情况,我们就要借助平衡点(BEP)来进行度量。BEP即查全率等于查准率的点。对于A和B两个学习器而言,A优于B。但一般情况下,我们更常使用的是F1度量。
定义两者的调和平均值为F1。表示如下:
1 F 1 = 1 2 ( 1 P + 1 R ) \frac{1}{F1}=\frac{1}{2}(\frac{1}{P}+\frac{1}{R}) F11=21(P1+R1)
F 1 = 2 × P × R P + R = 2 × T P 样本总数 + T P − T N F1=\frac{2\times P\times R}{P+R}=\frac{2\times TP}{样本总数+TP-TN} F1=P+R2×P×R=样本总数+TP−TN2×TP
调和平均相比较于算数平均,
F1度量的一般形式—— F β F_{\beta} Fβ
如果更加重视较小值。也可以给P和R加上权重,表示如下:
1 F β = 1 1 + β 2 ( 1 P + β 2 R ) \frac{1}{F_{\beta}}=\frac{1}{1+\beta^2}(\frac{1}{P}+\frac{\beta ^2}{R}) Fβ1=1+β21(P1+Rβ2)
β
{\beta}
β>1,查全率有更大的影响。
β
{\beta}
β<1,查准率有更大的影响。针对于不同的问题场景,可以设置不同的
β
{\beta}
β。
例如,商品推荐,查准率更重要。患病筛查,查全率更加重要。
2.3.6 ROC曲线和AUC
同样使用分类结果的混淆矩阵
真实情况 | 正例 | 反例 |
---|---|---|
正确的T | TP(原本是正确,也预测成正确) | FN(原本是正确的,但是预测成错误的) |
错误的F | FP(原本是错误的,但是预测成正确的) | TN(原本是错误的,预测也是错的) |
T P R = T P T P + F N TPR=\frac{TP}{TP+FN} TPR=TP+FNTP
F P R = F P T N + F P FPR=\frac{FP}{TN+FP} FPR=TN+FPFP
以FPR为横坐标,TPR为纵坐标,即可绘制出ROC(Receiver Operating Characteristic)曲线
用于评估模型的好坏,面积的计算可以通过梯形去插值计算,公式和示意图如下:
A U C = 1 2 ∑ i = 1 m − 1 ( x i + 1 − x i ) ( y i + 1 + y i ) AUC=\frac{1}{2}\sum_{i=1}^{m-1}(x_{i+1}-x_i)(y_{i+1}+y_i) AUC=21∑i=1m−1(xi+1−xi)(yi+1+yi)
通俗点,AUC 就是阴影部分的面积,用来评估样本不平衡的情况
和P-R曲线一样,当一个模型a的ROC曲线完全包住另一个模型b的ROC曲线时,即可认为a优于b。
ROC 怎么绘制?
假设有10个方块,其中有7个好方块(白色),3个坏方块(黑色),编号为0-10
模型
我们已经训练好了一个分类模型M ,我们将方块输入这个模型,这个模型可以给每一个方块打分。这里我们假设打分范围是0-1分,分数越大,则模型认为该方块为好方块的几率越大。
将10个方块输入模型
我们将10个方块输入模型,得到每个方块的打分。
我们按照分数由高到低给方块排序。如下图:
设置第一个阈值
当我们设置阈值为0.90时,模型M 打分$\ge$0.90则为好方块, $\le$0.90则为坏方块。
在我们10个方块中的表现为:只有0方块为好方块,其余9个方块都为坏方块如图:
此时我们就可以计算出:
T P R 1 = 1 / 7 TPR_1=1/7 TPR1=1/7
F P R 1 = 0 FPR_1=0 FPR1=0
可以绘制ROC曲线上的一个点:
设置第二个阈值
同样,当我们设置阈值为0.85时,情况如下
此时的TPR 与FPR分别为:
T P R 2 = 2 / 7 TPR_2=2/7 TPR2=2/7
F P R 2 = 0 FPR_2=0 FPR2=0
绘出ROC曲线上的第二个点:
设置11个阈值并且绘制ROC曲线
依次类推,我们设置11个阈值,阈值对应的FPR与TPR的点如下表:
对应的ROC图像中的点为
我们把每个点依次连起来,就能得到ROC曲线
ROC曲线的形状会同时受到样本量和各个样本得分的影响。可以认为阈值的选取是任意值,无穷多,所以ROC曲线的形状不受阈值选取的影响。我们平时看到的ROC曲线的样子就长下面这样:
排序损失rank-loss
l r a n k = 1 m + m − ∑ x + ∈ D + ∑ x − ∈ D − ( ∏ ( f ( x + ) < f ( x − ) ) + 1 2 ∏ ( f ( x + ) = f ( x − ) ) ) l_{rank}=\frac{1}{m^+m^-}\sum_{x^+\in D^+}\sum_{x^-\in D^-}(\prod(f(x^+)<f(x^-))+\frac{1}{2}\prod(f(x^+)=f(x^-))) lrank=m+m−1∑x+∈D+∑x−∈D−(∏(f(x+)<f(x−))+21∏(f(x+)=f(x−)))
A U C = 1 − l r a n k AUC=1-l_{rank} AUC=1−lrank
上面的公式,啥意思呢?
简单的来说,就是正例的打分值也就是下面例子里面的
f
(
x
+
)
f(x^+)
f(x+)小于
f
(
x
−
)
f(x^-)
f(x−),那么记一个罚分。
f
(
x
+
)
f(x^+)
f(x+)等于
f
(
x
−
)
f(x^-)
f(x−),那就记半个罚分。
给12张图片判断是不是5
下面是使用二分类器后训练出来的结果
序号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
对应上面的图 | 8 | 7 | 3 | 9 | 5 | 2 | 5 | 5 | 6 | 5 | 5 | 5 |
m表示的是个数
D表示集合
m+表示是5的图片的个数
D+表示是5的集合
m-表示不是5的图片的个数
D-表示不是5的图片的集合
D | m | |
---|---|---|
+ | D+={第5张图,第7张图,第8张图,第10张图,第11张图,第12张图,} | m+=6 |
- | D-={第1张图,第2张图,第3张图,第4张图,第6张图,第9张图,} | m-=6 |
然后给所有图打分
序号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
对应上面的图 | 8 | 7 | 3 | 9 | 5 | 2 | 5 | 5 | 6 | 5 | 5 | 5 |
score,得分越高越有可能是5, 大于0的表示为机器识别为5,小于等于0的机器识别为不是5 | -1.2 | -1 | -0.8 | -0.7 | -0.4 | 0 | 0.2 | 0.4 | 0.5 | 0.7 | 0.9 | 1.3 |
f ( x − ) f(x^-) f(x−)在D-中的位置大小 | -1 | -2 | -3 | -4 | -5 | -6 | ||||||
f ( x + ) f(x^+) f(x+)在D+中的位置 | 1 | 2 | 3 | 4 | 5 | 6 |
这里的0代表一个阈值,因为是二分类,从0一分为二,负数不通过,正数通过。
可以提高,也可以下降,当阈值越低的时候,通过的数据就会越高,
比如,人脸识别一般超过80% 就通过,但是我们我们可以设置更加低的阈值50%,意味着更多的人通过人脸识别
这个题目的rank-loss
1 m + m − = 1 6 × 6 \frac{1}{m^+m^-}=\frac{1}{6\times 6} m+m−1=6×61
f ( x + ) < f ( x − ) f(x^+)<f(x^-) f(x+)<f(x−) 有 ( 1 , − 5 ) , ( 1 , − 6 ) , ( 2 , − 6 ) , ( 3 , − 6 ) (1,-5),(1,-6),(2,-6),(3,-6) (1,−5),(1,−6),(2,−6),(3,−6),一共是4个.
( 1 , − 5 ) (1,-5) (1,−5)是因为序号5(正例)经过f得到的分值为-0.4小于序号6(反例)经过f得到的分值为0。此时,计一个罚分。其余依次类推,
f ( x + ) = f ( x − ) f(x^+)=f(x^-) f(x+)=f(x−) 当前的案例没有
∑ x + ∈ D + ∑ x − ∈ D − ( ∏ ( f ( x + ) < f ( x − ) ) + 1 2 ∏ ( f ( x + ) = f ( x − ) ) ) = 4 \sum_{x^+\in D^+}\sum_{x^-\in D^-}(\prod(f(x^+)<f(x^-))+\frac{1}{2}\prod(f(x^+)=f(x^-)))=4 ∑x+∈D+∑x−∈D−(∏(f(x+)<f(x−))+21∏(f(x+)=f(x−)))=4
所以这题的 r a n k − l o s s = 1 36 × 4 = 4 36 = 1 9 rank-loss=\frac{1}{36}\times 4=\frac{4}{36}=\frac{1}{9} rank−loss=361×4=364=91
ROC和P-R区别
一般情况下,模型评估选择P-R或者ROC没啥区别,但是当正样本的个数严重少于负样本个数时,P-R曲线相比较于ROC曲线能够更加直观的表现模型之间的差异,更加合适。
2.3.7 代价敏感错误率和代价曲线
不同的错误代价是不一样的
把患者诊断为健康人,健康人诊断为患者。两者代价是 不一样的。后者可能是增加了进一步检查的麻烦,前者更加有可能是丧命。为了权衡不同类型的错误造成的代价,就把错误定义为非均等代价
定义了代价矩阵
真实情况 | 正例 | 反例 |
---|---|---|
正确的T | 0 | c o s t 01 cost_{01} cost01 |
错误的F | c o s t 10 cost_{10} cost10 | 0 |
代价敏感的错误率
E ( f ; D ; c o s t ) = 1 m ( ∑ x i ∈ D + ∏ ( f ( x i ) ≠ y i ) ∗ c o s t 01 + ∑ x i ∈ D − ∏ ( f ( x i ) ≠ y i ) ∗ c o s t 10 ) E(f;D;cost)=\frac{1}{m}(\sum_{x_i\in D^+}\prod(f(x_i)\ne y_i)*cost_{01}+\sum_{x_i\in D^-}\prod(f(x_i)\ne y_i)*cost_{10}) E(f;D;cost)=m1(∑xi∈D+∏(f(xi)=yi)∗cost01+∑xi∈D−∏(f(xi)=yi)∗cost10)
啥意思呢??
1 m × ( F N 的个数 × F N 的代价 c o s t 01 + F P 的个数 × F P 的代价 c o s t 10 ) \frac{1}{m}\times (FN的个数\times FN的代价cost_{01} +FP的个数\times FP的代价cost_{10}) m1×(FN的个数×FN的代价cost01+FP的个数×FP的代价cost10)
代价曲线
如果是非均等代价下,就只能使用代价曲线来直接反应学习器的期望总体代价,
目的
对于一个模型,根据p不同,找到使得代价总期望最小的模型的阈值
横轴 P ( + ) c o s t = p × c o s t 01 p × c o s t 01 + ( 1 − p ) × c o s t 10 , P ( + ) ∈ [ 0 , 1 ] P(+)cost=\frac{p\times cost_{01}}{p\times cost_{01}+(1-p)\times cost_{10}},P(+)\in [0,1] P(+)cost=p×cost01+(1−p)×cost10p×cost01,P(+)∈[0,1]
纵轴为 c o s t n o r m = F N R × p × c o s t 01 + F P R × ( 1 − p ) × c o s t 10 p × c o s t 01 + ( 1 − p ) × c o s t 10 cost_{norm}=\frac{FNR\times p\times cost_{01}+FPR\times (1-p)\times cost_{10}}{p\times cost_{01}+(1-p)\times cost_{10}} costnorm=p×cost01+(1−p)×cost10FNR×p×cost01+FPR×(1−p)×cost10
P ( + ) P(+) P(+)叫做正例概率代价
c o s t n o r m cost_{norm} costnorm叫做归一化代价,(也可以叫做总概率代价期望,错误率,犯错所需要付出的代价)
小p为现有的样本中正例出现的概率,对于上面判断是不是5的例子,小p=0.5,因为样本中12张图片,是5的一共有6张,所以为0.5
意思为
x = p ( + ) c o s t , x=p(+)cost, x=p(+)cost,
$y=cost_{norm} $
把x带入y中,变成关于x的函数为 c o s t n o r m = F N R × P ( + ) + F P R × ( 1 − P ( + ) ) cost_{norm}=FNR\times P(+)+FPR\times (1-P(+)) costnorm=FNR×P(+)+FPR×(1−P(+))
写成x和y的话, y = a x + b ( 1 − x ) → y = ( a − b ) x + b , x ∈ [ 0 , 1 ] y=ax+b(1-x)\rightarrow y=(a-b)x+b,x\in [0,1] y=ax+b(1−x)→y=(a−b)x+b,x∈[0,1],所以是一条直线
问题一为什么会有这么多的直线呢????
因为一个阈值,之前的阈值是0,但是我们可以改变阈值,
一个阈值对应一个(FNR,FPR),一个(FNR,FPR)对应一条直线
改变阈值时,就会生成一条直线
问题二单根线段与横轴之间的(梯形)面积 = 模型对于某一阈值的期望总体代价?
总体错误率”更为妥帖,即模型对于某一阈值的期望总体错误率
所有线段围成的下包络线与横轴之间的面积 = 模型对于所有阈值的期望总体代价?
总体错误率,即模型对于某一阈值的期望总体错误率
2.4 比较检验
我们想要对学习器的性能进行比较,但这件事情实际上不是简单的获取性能度量的值然后进行比较。
但这里涉及几个重要的因素:首先我们希望比较的是泛化性能。但是泛化性能和实际上我们所获得的测试机上的性能,两者的对比结果不一定相同。
其次,测试集不同导致的结果也会不同。
最后,机器算法具有随机性。
那么,我们如何对学习器进行性能比较呢?统计假设检验为我们进行学习器的比较提供了重要的依据。
(这部分的内容,需要有概率论的基础,下面的链接对于假设检验讲的十分清楚。)
(编公式太麻烦啦!!!下面还是链接,讲的很详细啦!)
比较检验:https://blog.csdn.net/qq_45882682/article/details/122618793
两个链接要结合起来看,没有概率论的知识是真的看不懂西瓜书或者上面的链接在说什么的。
2.5方差与偏差
2.5.1偏差、方差,噪声的公式
对测试样本x,令yD为x在数据集中的标记,y为x的真实标记,f(x;D)为训练集D上学得模型f在x上的预测输出.
使用样本数相同的不同训练集产生的方差为:
var
(
x
)
=
E
D
[
(
f
(
x
;
D
)
−
f
‾
(
x
)
)
2
]
\operatorname { var } ( x ) = E _ { D } [ ( f ( x ; D ) - \overline { f } ( x ) ) ^ { 2 } ]
var(x)=ED[(f(x;D)−f(x))2]噪声为:
ε
2
=
E
D
[
(
y
D
−
y
)
2
]
\varepsilon ^ { 2 } = E _ { D } [ ( y _ { D } - y ) ^ { 2 } ]
ε2=ED[(yD−y)2]
期望输出与真实标记的差别称为偏差(bias),即:
bias
2
(
x
)
=
(
f
‾
(
x
)
−
y
)
2
\operatorname { bias } ^ { 2 } ( x ) = ( \overline { f } ( x ) - y ) ^ { 2 }
bias2(x)=(f(x)−y)2
泛化误差可分解为偏差、方差与噪声之和:
E
(
f
;
D
)
=
bias
2
(
x
)
+
var
(
x
)
+
ε
2
E ( f ; D ) = \operatorname { bias } ^ { 2 } ( x ) + \operatorname { var } ( x ) + \varepsilon ^ { 2 }
E(f;D)=bias2(x)+var(x)+ε2
2.5.2 偏差、方差,噪声的含义
偏差:度量了学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力
方差:度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响。(我理解的是,学习程度加深,训练数据发生的稍微扰动就会被模型学习到,但是这些扰动是不需要被模型学习道德,那么泛化误差就会加深。)
噪声:表达了在当前任务上任何学习算法所能达到的期望泛化误差的下界,即刻画了学习问题本身的难度。(这个是没有办法去避免的一个东西哈。)
2.5.3 泛化误差与方差,偏差之间的关系
给定学习任务,假定我们能控制学习算法的训练程度,则在训练不足时,学习器的拟合能力不够强,训练数据的扰动不足以使学习器产生显著变化,此时偏差主导了泛化错误率。
随着训练程度的加深,学习器的拟合能力逐渐增强,训练数据发生的扰动渐渐能被学习器学到,方差逐渐主导了泛化错误率。
在训练程度充足后,学习器的拟合能力已非常强,训练数据发生的轻微扰动都会导致学习器发生显著变化,若训练数据自身的、非全局的特性被学习器学到了,则将发生过拟合。
下面这张图很清晰的表示了泛化误差与偏差,方差的关系。(真的很形象啊,家人们。)
参考资料
什么是过拟合和欠拟合,怎么解决?_奔跑的小仙女的博客-CSDN博客_欠拟合
参考链接:https://www.zhihu.com/question/63492375/answer/1313378782
解答思路:https://www.zhihu.com/question/63492375
参考链接:https://www.cnblogs.com/Renyi-Fan/p/14039548.html
习题,下个帖子见!