一.基本
1.模型也被称为学习器,学习器更为准确。学习器是指能从已有的数据中学习到所需知识的数学模型。
2.模型分类:按照学习的数据分类,
(1)监督学习(supervised learning):训练的数据有标记信息。又由标记信息的
【1】分类:标记信息呈现离散状态。KNN、朴素贝叶斯、逻辑回归、随机森林、支持向量机、决策树、神经网络
【2】回归:标记信息呈现的是连续值。线性回归、Adaboost、Gradient Boosting、神经网络
(2)无监督学习(unsupervised learning):训练数据无标记信息,给定一些数据,自动找出数据的结构、规律,关联规则的抽取
【1】聚类:自动对数据进行分类,手动给定类的标记。k-means
(3)半监督学习(Semi-Supervised Learning):是监督学习与无监督学习相结合的一种学习方法。使用大量未标记的数据以及少量标记数据。
3.相关概念
(1)归纳偏好(inductive bias):机器学习算法在学习过程中对某种类型假设的偏好,比如:存在多个模型能反映训练样本,但是他们对于新的样本却又不同的输出,表示不同模型对不同假设的偏好------------一个数据集能训练出很多不同的模型,取决于训练数据时的假设
(2)奥卡姆剃刀原则(Occam‘s razor):若有多个假设与观察一致,则选最简单的那个。-----------选简单的那个模型
(3)没有免费的午餐’定理(No Free Lunch Theorem)(NFL):在所有问题同等重要的情况下,无论学习算法怎样,他们的期望性能相同,没有一种机器学习算法是适用于所有情况的。--------------同一模型在不同问题上的表现不同
4.总结:要结合具体的问题,对已有的数据进行大致分析,选择一些可能合适的模型,通过数据训练模型,确定它们的参数,对这些模型进行评估,选择其中效果最好的模型,再利用数据确定它的超参数,确定最终的模型,再做最后一次的评估作为最终模型测试的结果,最后运用。在整个的流程中,我们还会对模型不断进行评估检验和改进。
二.学习算法的选择
1.不同学习算法学得的模型具有不同的特点和偏好,可以根据问题或数据可视化来进行第一步的选择-----------哪几种学习算法可能比较好(更需要经验)
2.有了待定的学习算法后,可以对各种学习算法进行评估(比如交叉验证),进行第二步的选择-------------------进行比较,选择泛化性能最好的学习算法(取决于评估标准)
3.第二步的选择:关于模型的评估,比较的是不同的模型,比如y=ax与y=ax^2+bx之间的比较,
4.过程:首先把数据集分为原训练集和测试集,其次为了进行模型选择,把原训练集进一步划分为训练集和验证集,对于一个模型而言,我们在训练集上训练模型,在验证集上评估模型,得到该模型的评估结果。但是对于我们选择的一组模型来说,这样是可以得到一组评估结果(确定了模型的参数和验证误差),但问题在于:不同模型对于训练集的偏向不同,也就是说我们划分出的训练集可能在A模型上更好,在B模型上差,也就是说,我们得到的所谓的好的模型A可能只在我们划分的训练集上表现良好,这与我们的目标(在整个数据集得出较好的模型)不符,因此我们提出一种方法:对原有训练集进行多次划分出训练集和验证集,在这些训练集+验证集上多次对一个模型进行训练评估,可以得到一个模型的多个评估结果,取平均作为该模型最终的评估效果,这样,我们可以得到多个模型较为公正的(平均)评估结果,此时选择其中比较好的模型(确定了超参数-----超参数不同导致模型不同),我们再在整个原有训练集上训练该模型得到最终的模型,确定模型参数,最后在测试集上测试该模型。
5.交叉验证:上述的原训练集被称为交叉验证集,因为他被多次划分为训练集和验证集,这基于导致训练集和验证集的数据互相交叉,这次训练时在训练集中的数据可能在下次训练时出现在验证集中。
(1)交叉验证的意义在于在一组模型中,比较公平地得出其中较好的模型,确定超参数而非确定模型参数。
(2)划分数据方法:
【1】留出法(hold-out):把数据集划分为两个互斥集合,采用若干次随机划分,重复试验,取平均值作为评估结果
【2】交叉验证法(cross validation):将数据集划分为k个大小相似的互斥集合,将k-1个子集作训练集,剩下那个作测试集,即进行k次训练和测试,k次试验的k个结果取平均-------适用数据量足够---计算量大,精度好
【3】留一法(leave-out-out)(LOO):上述k=样本数,训练集较大时留一法计算复杂度高-------适用数据量少
【4】自助法(bootstrapping):每次随机从数据集D中挑选一个样本,将其拷贝放入采样数据集D‘,然后将其放回到D中,使它下次仍有可能被采到,重复自助采样m次,得到一个包含m个样本的数据集D’作为训练集---------适用于样本量少
6.模型的不同表现在两方面,一是模型类型的不同,比如线性模型和神经网络;而是模型参数的不同,这里的参数指的是超参数。但是这两者本质也是相同的,模型就是数学的表达,两者都是要人工手动设置的,模型都是共通的,比如神经网络本质还是线性模型,线性模型经过非线性变换可以变为神经网络。所以我们在进行模型选择的时候同时设置了超参数,超参数影响模型的性能,模型完成时,最优超参数也确定了。注意:超参数设置的范围一般很大,所以我们一般对每个超参数选定一个范围和变化步长。
7.模型的本质:模型是用数学公式来表现的,模型中包含特征、模型参数、超参数、预测变量以及误差。因为我们训练的数据是服从某种分布的随机变量,而且误差具有随机性,因此预测变量也是服从某种分布的一个随机变量,而模型参数的估计值依据训练数据,因此模型参数的估计值也是服从某种分布的一个随机变量,而且一般来说,模型参数表示对应特征对预测变量的影响幅度,随机变量就是真实值加误差,误差也就一个随机变量,因此,我们的模型中必然会有很多误差,关于随机变量的一个具体数据可以作为一个观测值,观测值就是真实值+误差,我们可以利用这些观测值估计真实值。
8.模型幻觉:不相关的特征被加入模型里,且被认为与预测结果有相关性
(1)解决:加入惩罚项削弱模型参数对变量的影响或假设检验
9.模型内生性:我们不知道预测变量的变化多少是由真实观测变量引起的,有多少是由误差引起的,若误差和观测变量相关,则会引发内生性
(1)来源: 遗漏变量(它使得模型中随机扰动项其实是为未被观测到的变量和真实扰动项的组合,这就导致模型中变量和随机扰动项相关)
(2)来源:度量误差:我们用的是观测值进行建模,观测值是真实值+e,则模型中的x和模型中的e相关
(3)来源:因变量和自变量互为因果,同时发生
三.模型评估
1.对模型的关注有两个方面,一是模型的拟合能力,而是模型的泛化能力,
(1)泛化能力:模型对于未知数据的预测能力。
【1】泛化能力是评估模型的唯一标准,因为这是我们的目标。
【2】一般用模型在测试集上的测试误差近似为泛化误差,测试误差体现泛化能力,越低越好。选择模型都是选择测试误差较小的那个模型。
(2)拟合能力:模型对于数据的学习能力,实际上是指真实模型与训练出的模型之间的差距,包括对已知数据(训练数据)的拟合和对未知数据(测试数据)的拟合。
【1】模型的拟合能力体现在对数据的学习上,但是数据包括我们需要的信息(对泛化能力有作用的信息)和不需要的信息,若我们没有学到需要的信息,就会导致我们我们不能很好地进行预测(欠拟合),若我们学到很多不需要的数据,就会导致我们预测的错误(过拟合),因此,我们需要对数据进行一定量的学习。
【1】过拟合(overfitting):学习器把训练样本学的太好,以至于把训练样本所包含的不太一般的性质都学到了,这样会导致泛化性能下降,无法彻底避免,只能缓解
【2】欠拟合(underfitting):学习能力低下,对训练样本的一般性质尚未学好,学习不充分导致泛化能力下降,比较好克服
【3】例:比如对于树叶的训练,过拟合可能会误以为树叶都是有锯齿(其实是样本自身的特性),欠拟合可能会误以为绿色的都是树叶(学习不充分)
【4】注:拟合能力指的是模型对于整个数据集空间的拟合,而不仅仅是对训练数据集的拟合,
2.误差:模型的实际预测输出与样本的真实输出之间的差异
(1)按照在不同数据集上的表现,分为训练误差(经验误差)和测试误差(泛化误差)
【1】训练误差:模型在训练集上的误差。
【【1】】训练误差体现了模型对于数据的拟合能力,训练误差越小,模型在训练集上的拟合能力越强。
【【2】】由于模型在刚开始时拟合能力弱,所以我们首先会在训练集上通过最小化训练误差来增强模型的拟合能力。模型不断地学习数据的过程也是不断地降低训练误差的过程,同时也伴随着模型参数的更新。
【【3】】训练误差的降低意味着拟合能力的增强,但不一定意味着泛化能力的增强。所以对训练误差不谈偏差和方差,只要一心最小化训练误差即可。
【【4】】训练误差的大小,在判断给定的问题是否是一个容易学习的问题上,具有一定的意义,但其实际价值并不大。
【2】测试误差:模型在测试集上的误差。
【【1】】测试误差体现了模型对于数据的泛化能力,测试误差越小,模型对于未知数据的泛化能力越强。
【【2】】模型是在训练集上训练得到的,而测试集不参与模型的训练,所以一般来说,模型在训练集上的表现好于在测试集上的表现,即训练误差小于或等于泛化误差。
【【3】】测试误差的降低是我们的目标,意味着泛化能力的增强
【【4】】测试误差的大小,反应了模型的泛化能力,多用于模型评估中。我们更关注的是如何降低泛化误差。
(2)不同的问题也有不同的误差公式
【1】回归问题:均方误差
【2】分类问题:查准率(precision)和查全率(recall):‘检索出的信息有多少比例是用户感兴趣的’,和‘用户感兴趣的信息有多少被检索出来’
【【1】】查准率和查全率互相矛盾:一般来说,查准率高时查全率底,查全率高时查准率底
【【2】】若一个学习器的P-R图被另一个学习器p-R图覆盖,则可断言后者性能优于前者
【【3】】平衡点(BEP)(break-even point):查准率=查全率时的取值,可以作为学习器之间的度量
【【4】】F1度量表达出对查准率/查全率的不同偏好
【3】分类问题:ROC和AUC
【【1】】很多时候,我们通过模型只能得到一个预测值,若要对它进行分类,往往是把预测值和设定的某个阈值进行比较,大于的正例,小于的为反例,那么这个预测值其实表达了它属于正例的概率(它属于负例的概率),表明它最可能属于哪一类
【【2】】我们根据模型的预测结果对样例进行排序,按此顺序逐个把样本作为正例进行预测,每次计算出两个重要量的值,分别以它们为横(假正例率FPR),纵坐标(真正例率TPR)作图,得到“ROC曲线”
【【3】】若一个模型的ROC曲线被另一个模型的包住,则代表后者性能更好,若两者有交叉,则比较曲线下的面积(AUC),AUC越大相比较说越好
(3)比较检验
【1】性能的比较:1)我们希望比较的是泛化性能,然而我们只能得到测试误差,两者未必相同,2)测试集的性能和测试集本身可能有很大关系,而且不同测试集会有不同结果,3)机器学习算法具有随机性,这导致测试结果也有随机性。
【2】统计假设检验的意义在于让我们认为在测试集上表现好的模型的泛化性能在统计意义上也表现好,以及这个把握有多大
【3】假设检验:表面意思---检验假设
【【1】】首先提出一个假设(对模型泛化错误率分布的判断或猜想)-----------我们是不知道泛化错误率的,但是我们知道测试错误率,而且直观上,两者接近的可能性比较大,两者相差很远的可能性小,因此我们可以根据测试错误率估计推断出泛化错误率的分布。
(在测试集上计算错误率实际上是一个随机事件(因为测试集具有随机性),则测试错误率实际上是可观测的一个随机变量,每次计算测试错误率都可得到一个观测值,而我们需要得到的是真实错误率,很明显,在多次观测后,靠近真实错误率的测试错误率多,远离真实错误率的测试错误率少,也就是说单次测得的测试错误率有较大的可能接近真实错误率,这也与测试错误率这个随机变量服从正太分布(一般来说,均值可能为真实错误率)的假设是一致)
(既然测试错误率的概率成正太分布,我们假设模型的泛化错误率,若泛化错误率在正太分布的均值附近,表明我们假设的泛化错误率是正确的,若假设的泛化错误率远离均值,则代表我们假设的泛化错误率有问题,这时候我们会拒绝假设,也就是泛化错误率不会是我们假设的值,但泛化错误率一般是一个值,一次次拒绝一个值还剩的是一个无穷的空间,因此我们一般对泛化错误率的假设为其在某个区间)
(置信区间:就是根据观测值,真实值大概率所在的区间,相当于真实值和观测均值的误差范围,我们一般设定这个范围占总体范围的概率为95%,也就是说我观测100次测试误差,有95次都靠近真实值。置信区间的计算公式取决于所用到的统计量)
(显著性水平通常称为α(希腊字母alpha),代表可能犯错的概率,绝大多数情况会将α设为0.05,那么置信度则是0.95或95%,)
(Pr-value:假定值、假设机率。就是一种概率,表示在原假设为真的前提下出现极端情况的概率。根据样本算出来的。就是如果我们的假设成立,那么出现极端情况的概率,若P值小于显著性水平,则代表真实误差是极端的情况,p-value越小,表明结果越显著,说明错误拒绝假设的概率很低,则我们有理由相信假设本身就是错误的,而非检验错误导致则拒绝假设,则我们拒绝假设)
【【2】】选定统计方法,由样本观察值按相应的公式计算出统计量的大小,如X2值、t值等
【【3】】根据统计量的大小及其分布确定检验假设成立的可能性P的大小并判断结果
3.方差--偏差分析:解释模型泛化性能。
(1)泛化误差可以分解为偏差、方差和噪声之和。泛化性能是由学习算法的能力(算法的拟合能力----偏差)、数据的充分性(数据扰动所造成的影响-----方差)以及学习任务本身的难度(噪声)所共同决定的
(2)噪声:表达了在当前任务上任何学习算法所能达到的期望泛化误差的下界,即任务本身的难度
(3)偏差:在数学中,在一组数据中,偏差是指随机变量对于数学期望的偏离程度。在机器学习中,偏差度量了学习算法的期望预测与真实结果的偏离程度。
【1】偏差针对期望预测与真实值的差值,体现了模型对未知数据的拟合能力,强调模型的学习能力。
【2】偏差小------模型学习充分,但是可能过拟合,
【3】偏差大------模型学习不充分,肯定欠拟合,泛化能力差
【4】偏差和泛化误差是不同的,泛化误差指的是差异,偏差是由具体公式的差值,泛化误差包含偏差,而偏差体现了对未知数据的拟合能力,所以泛化误差也体现了拟合能力,拟合能力一部分体现在训练误差上,一部分在偏差上。
(4)方差:在数学中,在一组数据中,方差是每个样本值与样本均值之差的平方值的平均数,方差体现一组数据的离散程度。在机器学习中,方差度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响。
【1】方差针对所有预测值的离散程度,强调数据的扰动能力,。
【2】方差小----模型稳定,
【3】方差大----模型不稳定,
(5)求解偏差--方差步骤:
【1】选择一条样例作为测试样例,x--y
【2】选用一种模型M(已确定超参数,为确定模型参数),利用交叉验证法(n个相同大小的(训练集,验证集)),训练数据集得出n个具体的模型M2...Mn(超参数和参数都确定)
【3】让这些模型对样例进行预测,得出n个预测值y1...yn,则有期望预测(对相同大小、不同训练集下的同一样本的预测值取均值,而不是对一次训练的所有样本的预测值取均值)y_mean=(y1+...+yn)/n
【4】这个样例的偏差:期望预测与真实值的差距:|y_mean-y|
【5】这个样例的方差:不同训练集下的预测值减去期望预测的平方均值,即(|y1-y_mean|^2+|y2-y_mean|^2+...|yn-y_mean|^2)/n
【6】理解:偏差-方差分析代表了我们对于模型M泛化能力的分析,而模型M的泛化能力是体现在整个数据集上的,而不仅仅在训练集上,我们可以通过训练数据确定参数使模型M变成Mi,具体的模型Mi对于数据也有偏向(一个模型Mi可能在这个训练集上表现好,在另一个训练集上表现差,),因此仅仅在一个训练集上得出的模型Mi并不能代表这个模型M真正的泛化能力,所以我们对于相同大小的不同数据集进行训练,需要注意的是我们所说的模型的好坏是指针对某个具体的机器学习问题,一个确定了超参数,未确定参数的模型M的好坏,而不是全确定的具体模型Mi,Mi的表现好坏不能代表M的好坏,而且每次由M训练所得的模型Mi可能不同,但是我们通过衡量M1来简介衡量M。对于一个样例,我们用所有Mi预测结果的期望来代表M对于该样例x的预测,则该预测与真实值之间的差距(偏差)代表了M的拟合能力(预测的准确性)。Mi对于x的预测是不同的,如果所有的预测值都互相接近,即在一定小的范围内,这说明模型M在整个数据的任意一个子训练集都能预测到一个范围内,预测稳定,这表示数据对模型M的影响小,此时方差(预测的离散程度)小;反之,若预测值分布广泛(东一个西一个),说明模型M对于x的预测对数据的依赖性大(数据稍有变动,预测值就有较大变动),模型不稳定,此时方差大(预测值的离散程度大)。
(6)目标:给定一个测试样例,我们的目标是要得到偏差小(模型M无论在什么训练集上训练,预测值都能接近真实值)而且方差小(模型无论在什么训练集上训练,预测值的变化都在较小范围内)的模型M(无论在什么训练集上训练,得到的预测值都能在真实值附近的极小范围内变化,这说明模型M的泛化能力强),最理想的模型是能够拟合所有数据点,永远预测出真实值的模型(显然不能得到)
(7)模型训练和泛化误差:给定训练数据和一个模型M。训练不足时,学习器的拟合能力不够强,训练数据的扰动不足以使学习器产生显著变化,此时偏差主导了泛化错误率;随着训练程度的加深,学习器的拟合能力逐渐增强,训练数据发生的扰动渐渐能被学习器学到,方差逐渐主导了泛化错误率;在训练程度充足后,学习器的拟合能力已经非常强,训练数据发生的轻微扰动都会导致学习器发生显著变化,若训练数据自身的、非全局的特性被学习器学到了,则将发生过拟合。
4.模型复杂度(参数个数)和偏差-方差
(1)模型越简单(拟合能力差,模型受到数据的变动的影响小)-----偏差越大,方差越小
(2)模型越复杂(拟合能力强,但容易造成欠拟合,模型对于数据扰动敏感,方差变大)----偏差越小,方差越大
5.模型复杂度和误差
(1)模型越简单(模型变量少或者多项式次数低),模型越不容易拟合大数据集,欠拟合,此时训练误差大,模型越简单,模型受数据扰动的影响小---方差小,但拟合能力很差---偏差很大,验证误差大,所以,总体的话,验证误差大于训练误差
(2)随着模型复杂度的增加,模型越能拟合数据集-----偏差降低,则训练误差急剧降低,而在测试集上训练误差(包含偏差和方差),拟合能力的提高导致泛化能力的提高----偏差降低,模型受数据扰动的影响增加不明显---方差降低,这导致测试误差会降低,
(3)随着模型复杂度的继续,模型所能提高的拟合能力达到极限----偏差降低的缓慢,所以训练误差仍会慢慢下降(不明显),此时随着拟合程度的不断提高,可能导致过拟合,此时模型受数据扰动的影响很敏感-----方差急剧提高,因此测试误差上升,
6.学习曲线:判断某一个学习算法是否处于偏差-方差问题
(1)对于一个模型来说,可以增大训练集的规模来判断它是否过拟合或欠拟合
(2)正确的学习曲线:对于一个适当模型来说(既无欠拟合,又无过拟合),则随着训练规模的增大,因为训练集误差是所有训练数据的训练误差总和,所以整个训练集上的训练误差是上升的,有由于模型的拟合能力增强,所以单个训练样本的训练误差成下降趋势,因此训练误差成梯度下降的上升趋势;刚开始时,模型肯定预测不准,拟合能力差--偏差大,数据扰动的影响大---方差大,所以测试误差极大,测试误差表示的是泛化性能,随着训练规模的增大,模型拟合能力的提高--偏差减小,数据扰动的影响降低--方差降低,模型趋于稳定,模型的泛化能力也相应提高,因此此时测试误差快速降低,而又随着数据量的增多,偏差的变化不再明显,方差的变化也变得缓慢,此时测试误差也趋于稳定,因此测试误差成有快到慢的下降趋势。最终的训练误差和测试误差几乎接近,相当于一个级别,不过测试误差比训练误差相对较大一点,因为训练数据集训练出的模型对训练数据集拟合的程度较好,相对的模型对应训练数据集的均方误差相对较小。
(3)欠拟合模型的学习曲线:欠拟合代表学习能力不足,则偏差和训练误差都较大,因此训练误差和测试误差的渐近线比正常的偏高,这代表模型本身不正确,则增大训练数据不能有任何帮助
(4)过拟合模型的学习曲线:过拟合代表学习能力好,但是泛化能力差,即方差大,随着训练规模的增大,则测试误差大于训练误差,增大训练数据可能会有帮助
7.正则化参数对训练误差和测试误差的影响
(1)若不用正则化参数,训练的模型最后偏差小,方差大
(2)正则化参数是对模型参数的惩罚,因此加入正则化参数,模型拟合能力降低,泛化能力增大,对应训练误差增大,测试误差降低
(3)再随着正则化参数的增大,模型的作用在某个值时会低于正则化参数的作用,此时泛化误差中偏差作主导作用,测试误差增大
(4)当正则化参数很大时,相当于不用模型,此时肯定偏差大,方差大
8.总结
(1)对模型的评估,其实就是对其泛化能力的评估,但是泛化能力不可得,我们用测试误差或者说是验证误差来近似化地替代泛化能力,但是验证误差包含偏差、方差和噪声,其中噪声是问题本身的难度、方差表示数据扰动的影响,偏差代表模型的学习能力,因此泛化能力受到拟合能力的影响,所以对模型的评估就是对拟合能力和泛化能力的评估,也就是对训练误差和验证误差的分析,也就是对偏差和方差的分析。
(2)所以模型的评估还是要看方差和偏差。对于一个模型来说,刚开始:高方差、高偏差;随着数据的训练,拟合能力增强,偏差降低;开始训练时,训练数据不足,则训练数据的扰动不足以使模型改变,此时方差变化不大,偏差在泛化能力中占主导;随着训练量的增加,则数据扰动被模型学到,方差占主导。最后,训练数据过量,此时模型拟合能力过强,则轻微的数据扰动都会对模型发生明显变化,若属于训练数据本身的特性被模型学到,则模型的泛化能力会降低,即过拟合。
四.模型改进
1.模型的评估根据方差和偏差,对模型的改进本质是调整方差和偏差
(1)高偏差、高方差:一般是模型初始训练时的表现,既不能表现拟合能力,也不能改进泛化能力,需要利用数据进行训练
(2)低偏差、低方差:模型训练完成之后的理想状态,模型泛化能力强、拟合能力强
(3)低偏差、高方差(欠拟合):模型训练完成之后的需纠正的表现,模型泛化能力强、拟合能力弱
(4)高偏差、低方差(过拟合):模型训练完成之后的需纠正的表现,模型泛化能力弱、拟合能力强
一般模型训练(1)---(3)---(4)----(2),对于一个(1)模型,可以通过不断增大数据来增大拟合能力变成(3),由于目标是泛化能力,所以我们还要降低方差,一旦过渡训练,则会导致(4),我们最终的目标是(2),我们的改进实质是对(3)和(4)的改进。
5.高偏差:模型拟合能力弱,模型简单,
(1)引入更多的相关特征,采用多项式特征-------使模型变复杂,增大拟合能力
(2)减小正则化参数---------减小对模型的惩罚力度,相当于提高模型复杂度
5.高方差:模型泛化能力弱,1)数据训练不足导致数据扰动不能被模型学的(训练完的模型验证误差明显大于训练误差),2)数据训练过量,拟合能力过强导致模型学得训练数据自身的特性
(1)采集更多的样本数据-----增加训练量---1)
(2)减少特征数量,去除非主要的特征--------使模型变简单,降低拟合能力对泛化能力的影响-----2)
(3)增加正则化参数-----------增大对模型的惩罚力度,相当于降低模型的复杂度-----2)
6. 欠拟合(高偏差,高方差):模型拟合能力差导致泛化能力差
(1)提高模型复杂度(增加特征,添加非线性变换...)
(2)如果有,减小正则化参数
7.过拟合(高偏差、低方差):拟合能力过强导致泛化能力差
(1)若数据训练不足,则增加数据量
(2)降低模型复杂度(选择合适模型,减少特征,减少训练次数,选择合适特征,采用dropout方法,减少迭代次数,增大学习率,添加噪声数据,剪枝....)
(3)如果没有,则添加正则化参数;如果有,增大正则化参数
(4)数据清洗(降低数据噪声的影响)
8.正则化:在最小化经验误差函数(代价)上加约束,用来平衡损失函数和模型参数
(1)我们对于代价函数的目的是最小化它以提高模型的拟合能力,但是这容易导致过拟合,因此想到通过降低模型复杂度降低模型的泛化能力,在代价函数后加入惩罚项(正则项)实际上是对模型参数的惩罚,代价函数前面是为了更好的拟合训练集,提高拟合能力,后半部分则变成最小化模型参数和正则化参数的组合,实际上表示我们要获得何种性质的模型(当然是复杂度低的模型),我们要在两者之间进行平衡,正则化参数是超参数,实际上是对模型参数的惩罚,也是对模型的惩罚,若设置过大,表示惩罚力度高,模型参数需要接近0才能尽可能降低代价函数,此时模型变得简单(直线)(欠拟合),若设置过小,表示近乎无惩罚,即我们不关注模型的复杂度,起不到过拟合的作用
(2)正则化项 :对于复杂模型,我们希望去除某些特征来降低模型复杂度,很明显我们应该尽量去除不相关的特征,也就是在模型中使他们前面的系数接近0,但由于我们不知道选择哪些特征相关性低,所以修改代价函数来缩小每一个参数----正则化项 λ∑θ2
(3)正则化参数:控制两个不同目标之间的取舍:1)更好的拟合训练集;2)保持参数尽量小,保持模型简单,避免过拟合
(4)正则化参数的选择:不大不小1)太大,表示惩罚程度高,参数接近0,模型(直线)(欠拟合),偏差过大;2)太小:起不到处理过拟合的作用
(5) L1正则化(L1范数):让原目标函数加上了所有特征系数绝对值的和来实现正则化,更适用于特征选择
(6)L2正则化(L2范数):让原目标函数加上了所有特征系数的平方和来实现正则化,可以产生稀疏权值矩阵,即产生一个稀疏模型,更适用于防止模型过拟合
(7)正则化线性回归:梯度下降:相当于把参数往0移动一点(变小一点点),再进行和以前一样的操作;正规方程:矩阵不可逆问题得到解决,因为正则化参数大于0
五.模型训练
1.步骤
(1)首先要明白目标是:通过已知数据训练得到一个模型,使未知数据在这个模型上的表现最好。但是对于这个理想最好模型,我们是一无所知的,因此我们首先假设理想模型(设定超参数和变量,设定初始模型参数)(模型也被称为假设)
(2)对于假设模型,我们的目的使通过学习数据使它的泛化误差不断降低,而模型的泛化误差受到数据和模型拟合能力的双重影响,我们不能改变数据,因此我们只有改变拟合能力,拟合能力通俗地说就是使模型经过各个数据点的能力,也就是说我们要让模型拟合数据。而拟合能力可以用损失函数来相似表达,降低损失函数就是提高拟合能力,因此第二步我们要设定损失函数。
(3)我们的目标变为最小化损失函数了,这是一个最优化问题,所以我们第三步要设置一个优化器来解决损失函数最小化问题。
(4)最后损失函数会得到模型参数的迭代值,我们从而改变模型参数更新模型。
2.变量(特征):手动改变或自动改变,不在模型训练中
3.参数(parameter):影响最终模型的性能,分为模型参数和超参数
(1)超参数:自己手动设定的参数,比如学习速率、迭代次数、隐藏层的层数、每层神经元的个数、正则项参数等
【1】根据问题手动设定和调整,无法从数据中得出
【2】超参数的设定在模型第一次选择(1)阶段,超参数的选择在模型评估选择(2)阶段
【3】不同超参数有时候意味着不同模型M,比如K最近邻的K
【4】调参是指对不同超参数的设定,但是很多超参数都是实数域取值,因此超参数的调整费时费力,可以依靠经验
(2)模型参数:模型训练时自动得到的参数,比如权重、支持向量、系数等
【1】在训练模型时,可以从数据中获得
【2】模型参数在模型训练初始阶段设定初值,在单次模型训练完成后更新值,
【3】参数的不同只意味着具体模型的不同(M1和M2),但是抽象的模型还是一样M
【4】利用优化算法估计模型参数,超参数影响模型参数的估计
【5】如果一个模型的参数不显著,应该将其排除,重新建模
4.损失函数和代价函数
(1)两者表示预测值和真实值的差距,表现模型的拟合能力,通过最小化函数来提高模型拟合能力,两者都是模型参数的函数
(2)损失函数(loss)是对于单个样本而言,代价函数(cost function)是对于整个数据集而言,所有损失值的平均
(3)最小化代价函数实际上是最优化问题,可以用各种优化器求解
(4)常用损失函数:
【1】分类问题
【【1】】0-1损失函数:预测值和目标值不相等为1,否则为0
【【2】】对数损失
【【3】】Hinge损失
【2】回归问题
【【1】】平方损失函数:
【【2】】绝对值损失函数:
(5)常用代价函数
【1】均方误差/平方损失/L2 损失------只考虑误差的平均大小,不考虑其方向,如果我们的数据容易出现许多的异常值,则不应使用这个它
【2】均方根代价函数-----能够直观观测预测值与实际值的离散程度
【3】平均绝对误差/L1损失函数----------对异常值更加稳健
【4】交叉熵代价函数-----分类问题的代价函数,实际输出(概率)与期望输出(概率)的距离,也就是交叉熵的值越小,两个概率分布就越接近
5.优化器
(1)优化器是在机器学习中用来求解最优化代价函数问题的,本质是最优化问题的求解方法
(2)正规方程法:采用类似求偏导导的方法直接求解模型参数
【1】特点:不需要学习率;但需要求矩阵;如果特征很多,速度会很慢
【2】可能出现的问题:求解矩阵时可能有时候要求解逆矩阵,但奇异矩阵是不可逆的矩阵(有多余特征或特征数量大于样例数),这时可以通过删除线性相关的特征或正则化的方法使之可逆,但效率低大
(3)梯度下降法:给定函数参数的初值,让其不断延参数变化幅度最快的方向(梯度)变动,从而不断更新参数,由于梯度变化幅度是由快到缓,因此为梯度下降法
【1】梯度:一个矢量(有方向的偏导),表示函数在点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向变化最快,变化率最大。
【2】代价函数的最优化问题一般是最小化,目标是求最小值点,若该函数为凸函数,则一定有最小值,若函数为非凸函数,则求解到的可能是极小值
【3】梯度下降法有一个关键超参数------学习率(步长)
【【1】】学习率:指参数每次变动的大小;(梯度指参数每次变动的方向)
【【2】】学习率设定应适中:若过大,则代价可能随迭代次数而上升(冲过极小值点)或上升下降循环,不会收敛,不会下降,而且梯度下降依赖泰勒展开,这是在局部成立的,所以不能过大;若过小,则收敛需要的步数变多,收敛速度变慢
【4】若在极小值点的临近范围是一个凸函数,极小值点梯度为0,在其左边,点的梯度大于0,在其右边,点的梯度小于0,而且根据泰勒展开式(函数某一点的值和他附近的值之间的关系),梯度非0的每个点都可以在它的附近找到一个更小值点,因此参数可以从初值开始,延梯度方向搜索更小值点,参数的迭代公式(p‘=p-r*f‘ 其中p为前参数,p‘为更新后的参数,r为学习率>0,f’为p的梯度)用减号(-),
【5】迭代停止的判断条件:1)达到一定的迭代次数;2)设定一个迭代的收敛阈值(不可取)
【6】注意:
【【1】】一般来说,如果代价随着迭代次数的增长而减小并收敛,则表示梯度下降成功
【【2】】不同初值下降的结果可能不同
【【3】】若有多个参数,则要同时更新才是梯度下降(非同步更新-----交叉,新的值放到旧的更新中),而且计算梯度时,若函数不可微,则无法计算偏导
【【4】】要考虑不同特征值取值范围大小的影响,特征缩放可使梯度下降的速度变快(迭代次数变少):使不同特征的取值范围尽可能相近。采用方法:缩放特征范围(加减乘除)或均值归一化(特征值/(特征最大值-特征最小值)):把特征变成具有均值0的特征,(x=(x-u)/s,x是特征,u是特征的平均值,s是特征值范围或标准差),若两个特征取值相差较大,则下降可能会来回地波动折线下降,这会导致下降的时间变得很长,
【【5】】若有鞍点(不是极小值,也不适合最小值,梯度为0 ),梯度下降法会在这点失效,模型参数不会进行更改,模型停止迭代,返回值
【【6】】若有山谷(在一个狭长的区域内梯度几乎等于0,但两边的梯度绝对值很大,相当于学习速率过大),则参数会来回震荡
【【7】】损失函数对于某个参数的偏导为该参数下降最快的方向,又因为代价函数是所有样本点的损失的和,所以对于某个参数的偏导,其实是每个样本点对于该参数的偏导,求和,然后取平均
【7】分类和区别
【【1】】标准梯度下降(Gradient Descent):由于最优化代价函数是所有样本的损失之和,所以计算一个梯度时实际要计算各个样本点的损失函数的梯度再把它们加起来平均,
【【【1】】】优点:不需要求解逆矩阵,对于凸函数,可以求解到最优值,有严格的理论证明,能够求解最优化问题(就算模型很复杂)
【【【2】】】缺点:可能达到局部最优点或鞍点,数据多时计算开销大,学习率的影响大
【【2】】随机梯度下降法(Stochastic Gradient Descent):每次计算梯度时,随机地选择一个样本点进行梯度的计算
【【【1】】】优点:每次更新的计算量变小,速度快
【【【2】】】缺点:每次迭代的方向不一定正确,参数更新具有高方差,从而导致损失函数剧烈波动,下降不稳定,需要的迭代次数多。
【【3】】批量梯度下降法(Batch Gradient Descent):每次选择一定数量的样本点进行梯度计算,取平均值作为下降的梯度,平均了SGD和GD的优点和缺点
(4)动量方法(momentum):本次变化考虑历史变化,(上一次迭代的改变量视为速度,此次迭代的梯度视为加速度,)
本来参数的改变为原参数减去步长乘以梯度,现在这个变动浮动变为步长乘以梯度+一个值,这个值引入了动量(0-1间),乘以上次的变动幅度,也就是说,上次转60度走20米(v(t-1)),本次本应该转90度走30米(学习率*梯度),但是引入动量变量(γ),是两者间进行一个平衡,这次可能走75度25米(vt),这实质上是考虑了历史梯度,就是说这次的变化应和上次有关,动量系数表示有多少关联
【1】优点:既减少震荡,又大方向不变(本次梯度下降方向),从而保证了效率和正确的收敛
【2】缺点:梯度下降的那些缺点
(5)AdaGrad:增加了一个学习率递减系数,这个递减系数由之前所有更新的反向梯度的平方的和来决定。即学习率都要除以历史梯度总和的平方根,因此分母增大,所以实际上AdaGrad的学习率始终是在减小。
【1】优点:不需要人为的调节学习率,它可以自动调节,适用于数据稀疏或者分布不平衡的数据集
【2】缺点:在到达全局最优前算法就停止了,降速太快而且没有办法收敛到全局最优
(6)RMSProp:修改了AdaGrad的梯度积累为指数加权的移动平均,使得其在非凸设定下效果更好,学习率除以前t次的梯度平方的均值的平方根
【1】优点:避免了学习率越来越低的的问题,而且能自适应地调节学习率
(7)Adam:集合了Momentum优化和RmsProp的想法,对于历史梯度较小的模型参数,放大当前的更新步伐,反之则变小,对于改变慢的,放大步伐。
(8)比较总结:Adam最好,SGD最差
六.模型变化
1.所有模型的基础都是线性模型,是线性模型和非线性变化的组合
2.激活函数----数学上的复合函数
(1)激活函数用于对模型进行转换,若模型为f(x),激活函数为g(x),则转换后的模型为g(f(x))
(2)Sigmoid函数(Logistic函数):
特点:把输出映射在(0,1)之间,单调连续,输出范围有限,优化稳定,可以用作输出层,而且求导容易。但由于其软饱和性,容易产生梯度消失,导致训练出现问题。其输出并不是以0为中心的。
(3)Tanh函数:解决了输出不是0均值的问题
(4)Relu函数:解决了梯度消失问题 (在正区间),计算速度非常快,只需要判断输入是否大于0,收敛速度远快于sigmoid和tanh,ReLU的输出不是0均值,某些神经元可能永远不会被激活,导致相应的参数永远不能被更新
2)Dead ReLU Problem
(5)ELU (Exponential Linear Units) 函数:解决了relu的问题,但计算量大
(6)一般来说,elu>relu>tanh>sigmoid
七.总结
原文地址:https://www.cnblogs.com/yu-liang/p/12585437.html