目录
特征归一化
对数值类型的特征作归一化可以将所有的特征都统一到一个大致相同的数值区间内。
为什么要归一化
- 为了消除数据特征之间的量纲影响,使得不同指标之间具有可比性。例如,分析一个人的身高和体重对健康的影响,如果使用米(m)和千克(kg)作为单位,那么身高特征在1.6-1.8的数值范围内,体重特征在50-100的范围内,分析出来的结果显然会倾向于数值差别比较大的体重特征。想要得到更为准确的结果,就需要进行特征归一化处理,使各指标处于同一数值量级,以便进行分析;
- 在梯度下降中更快地迭代求最优解。假设有两种数值型特征,x1的取值范围为 [0, 10],x2的取值 范围为[0, 3],于是可以构造一个目标函数符合图1.1(a)中的等值图。 在学习速率相同的情况下,x1的更新速度会大于x2,需要较多的迭代才能找到最优解。如果将x1和x2归一化到相同的数值区间后,优化目标的等值图会变成图 1.1(b)中的圆形,x1和x2的更新速度变得更为一致,容易更快地通过梯度下降找到最优解;
归一化的方法
1 线性函数归一化(Min-Max Scaling)
对原始数据进行线性变换,使结果映射到[0,1]的范围,实现对原始数据的等比缩放。归一化公式如下:
其中X为原始数据,Xmax、Xmin分别为数据的最大值和最小值。
2 零均值归一化(Z-Score Normalization)
将原始数据映射到均值为0、标准差为1的分布上。具体来说,假设原始特征的均值为μ、标准差为σ,那么归一化公式为:
归一化的应用与局限
数据归一化并不是万能的。
-
在实际应用中,通过梯度下降法求解的模型通常是需要归一化的,包括线性回归、逻辑回归、支持向量机、神经网络等模型;
-
但对于决策树模型则并不适用,决策树在进行节点分裂时主要依据数据集D关于特征x的信息增益比,而信息增益比跟特征是否经过归一化是无关的,因为归一化并不会改变样本在特征x上的信息增益;
过拟合和欠拟合
简介
- 过拟合指的是模型对于训练数据拟合过当,就是模型在训练集上的表现很好,但在测试集上的表现较差;过拟合模型过于复杂,把噪声数据的特征也学习到模型中,导致模型泛化能力下降;
- 欠拟合指的是模型在训练集和测试集上表现都不好;
降低过拟合风险的方法
- 从数据入手,获得更多的训练数据。使用更多的训练数据是解决过拟合问题最有效的手段,因为更多的样本能够让模型学习到更多更有效的特征,减小噪声的影响。当然,直接增加实验数据一般是很困难的,但是可以通过一定的规则来扩充训练数据。比如,在图像分类的问题上,可以通过图像的平移、旋转、 缩放等方式扩充数据;
- 降低模型复杂度。在数据较少时,模型过于复杂是产生过拟合的主要因素,适当降低模型复杂度可以避免模型拟合过多的采样噪声。例如,在神经网络模型中减少网络层数、神经元个数等;在决策树模型中降低树的深度、进行剪枝等;
- 正则化方法。给模型的参数加上一定的正则约束;
- 集成学习方法。集成学习是把多个模型集成在一起,来降低单一模型的过拟合风险,如Bagging方法;
降低欠拟合风险的方法
- 添加新特征。当特征不足或者现有特征与样本标签的相关性不强时,模型容易出现欠拟合。通过挖掘“上下文特征”“组合特征”等新的特征,往往能够取得更好的效果;
- 增加模型复杂度。简单模型的学习能力较差,通过增加模型的复杂度可以使模型拥有更强的拟合能力。例如,在线性模型中添加高次项,在神经网络模型中增加网络层数或神经元个数等;
- 减小正则化系数。正则化是用来防止过拟合的,但当模型出现欠拟合现象时,则需要有针对性地减小正则化系数;
PCA降维
- 在机器学习领域中,我们对原始数据进行特征提取,有时会得到比较高维的特征向量。在这些向量所处的高维空间中,包含很多的冗余和噪声。我们希望通过降维的方式来寻找数据内部的特性,从而提升特征表达能力,降低训练复杂度;
- PCA(Principal Components Analysis,主成分分析)是降维中最经典的方法,PCA旨在找到数据中的主成分,并利用这些主成分表征原始数据,从而达到降维的目的;
- 在信号处理领域,我们认为信号具有较大方差,噪声具有较小方差,信号与噪声之比称为信噪比。信噪比越大意味着数据的质量越好,反之,信噪比越小意味着数据的质量越差。由此我们不难引出PCA的目标,即最大化投影方差,也就是让数据在主轴上投影的方差最大;
K-Means算法
- 是通过迭代方式寻找K个簇(Cluster)的一种划分方案,使得聚类结果对应的代价函数最小,代价函数可以定义为各个样本距离所属簇中心点的误差平方和;
- K均值聚类的核心目标是将给定的数据集划分成K个簇,并给出每个数据对应的簇中心点。算法的具体步骤描述如下:1 数据预处理,如归一化;2 随机选取K个簇中心;3 定义代价函数;4 对于每一个样本xi,将其分配到距离最近的簇;5 对于每一个类簇k,重新计算该类簇的中心; 6 迭代4和5,直到代价函数收敛(达到最小值)7 终止条件可以是没有(或最小数目)对象被重新分配给不同的聚类,没有(或最小数目)聚类中心再发生变化;
有监督学习的损失函数
- 在有监督学习中,损失函数刻画了模型和训练样本的匹配程度,损失函数越小,表明模型在该样本点匹配得越好;
- 对于回归问题,最常用的损失函数是平方损失函数,平方损失函数是光滑函数,能够用梯度下降法进行优化;
BP神经网络
- BP(back propagation)神经网络是一种按照误差逆向传播算法训练的多层前馈神经网络;
- 从结构上讲,BP网络具有输入层、隐藏层和输出层;从本质上讲,BP算法就是以网络误差平方为目标函数、采用梯度下降法来计算目标函数的最小值;
- 每一层包含若干个神经元,相邻层之间的神经元相互连接(包含一定的连接权值),同一层内的神经元相互不连接;
- BP神经网络的计算过程由正向计算过程和反向计算过程组成;
- 正向计算过程,输入数据从输入层经隐单元层逐层处理,并转向输出层,每一层神经元的状态只影响下一层神经元的状态;
- 反向计算过程,将误差信号沿原来的连接通路返回,通过修改各神经元的权值,使得误差信号最小。
梯度下降法
- 梯度下降法的主要目的是通过迭代找到目标函数的最小值,或者收敛到最小值;
- 梯度下降法的基本思想可以类比为一个下山的过程:一个人被困在山上,需要从山上下来(找到山的最低点,也就是山谷)。但此时山上的浓雾很大,导致可视度很低;因此,下山的路径就无法确定,必须利用自己周围的信息一步一步地找到下山的路。这个时候,便可利用梯度下降算法来帮助自己下山。怎么做呢,首先以他当前的所处的位置为基准,寻找这个位置最陡峭的地方,然后朝着下降方向走一步,然后又继续以当前位置为基准,再找最陡峭的地方,再走直到最后到达最低处(陡峭度几乎为0);
- 对应到函数中,就是找到给定点的梯度 ,然后朝着梯度相反的方向,就能让函数值下降得最快!因为梯度的方向就是函数值增长最快的方向;
- 在多变量函数中,梯度是一个向量(多个变量的导数),向量有方向,梯度的方向就指出了函数在给定点的上升最快的方向;
- 在梯度下降算法中有一个学习率(步长)的概念,可以控制每一步走的距离,如果步长过大容易错过最低点,如果步长过小会导致训练次数过多,因此步长的选择很重要;
- 每训练一次就是一次反向传播的过程,并更新权值,梯度接近0(即收敛到最小值)时训练结束;
反向传播算法(即BP)
- 即误差反向传播,对网络中所有权重计算损失函数的梯度,这个梯度会反馈给最优化方法,用来更新权值以最小化损失函数;
- 由两个阶段组成:激励传播和权重更新:
2.1 激励传播:每次迭代包含两步:1 (前向传播阶段)将训练输入送入网络以获得激励响应;2 (反向传播阶段)将激励响应同训练输入对应的目标输出求差,从而获得输出层和隐藏层的响应误差;
2.2 权重更新:对于每个突触上的权重:1 将输入激励和响应误差相乘,并利用梯度下降法获得权重的梯度;2 将这个梯度乘以一个比例并取反后加到权重上;
激活函数
- 激活函数在人工神经网络的神经元上运行,负责将神经元的输入映射到输出端。在神经元中,输入的 inputs 通过加权求和后,还被作用了一个函数,这个函数就是激活函数,引入激活函数是为了使神经网络模型具有非线性特性;
- 激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多非线性模型中;
- 常用激活函数:
-
Sigmoid:将变量映射到(0,1),不是0均值,可以用来做二分类;
-
Tanh:将变量映射到(-1,1),是0均值的;
-
Relu:修正线性单元,它的作用是如果计算出的值小于0,就让它等于0,否则保持原来的值不变,通常用于隐层神经元输出;
-
LSTM神经网络(长短期记忆网络)
1 LSTM可以对有价值的信息进行长期记忆,从而减小循环神经网络的学习难度,在语音识别、机器翻译、图像描述文本生成等问题中有着广泛应用;
2 与传统的循环神经网络相比,LSTM仍然是基于xt和ht−1来计算ht,只不过对内部的结构进行了更加精心的设计,加入了输入门it、遗忘门ft以及输出门ot三个门和 一个内部记忆单元ct。输入门控制当前计算的新状态以多大程度更新到记忆单元中;遗忘门控制前一步记忆单元中的信息有多大程度被遗忘掉;输出门控制当前的输出有多大程度上取决于当前的记忆单元;
3 经典的LSTM中,第t步的更新计算公式为:
其中it是通过输入xt和上一步的隐含层输出ht−1进行线性变换,再经过激活函数 σ得到的。输入门it的结果是向量,其中每个元素是0到1之间的实数,用于控制各维度流过阀门的信息量;Wi、Ui两个矩阵和向量bi为输入门的参数,是在训练过程 中需要学习得到的。遗忘门ft和输出门ot的计算方式与输入门类似,它们有各自的参数W、U和b。与传统的循环神经网络不同的是,从上一个记忆单元的状态ct−1到当前的状态ct的转移不一定完全取决于激活函数计算得到的状态,还由输入门和遗忘门来共同控制。
- 1 在一个训练好的网络中,当输入的序列中没有重要信息时,LSTM的遗忘门的值接近于1,输入门的值接近于0,此时过去的记忆会被保存,从而实现了长期记忆功能;2 当输入的序列中出现了重要的信息时,输入门的值接近1,而遗忘门的值接近于0,这样旧的记忆被遗忘,新的重要信息被记忆。经过这样的设计,整个网络更容易学习到序列之间的长期依赖;
- 关于激活函数的选取,在LSTM中,遗忘门、输入门和输出门使用Sigmoid函数作为激活函数;在生成候选记忆时,使用双曲正切函数Tanh作为激活函数。Sigmoid函数的输出在0~1之间,符合门控的物理定义。 且当输入较大或较小时,其输出会非常接近1或0,从而保证该门开或关。在生成候选记忆时,使用Tanh函数,是因为其输出在−1~1之间,这与大多数场景下特征分布是0中心相吻合;
决策树
- 决策树是一种自上而下,对样本数据进行树形分类的过程,由结点和有向边组成;
- 结点分为内部结点和叶结点,其中每个内部结点表示一个特征或属性,叶结点表示类别;
- 从顶部根结点开始,所有样本聚在一起。经过根结点的划分,样本被分到不同的子结点中。再根据子结点的特征进一步划分,直至所有样本都被归到某一个类别(即叶结点)中;
- 决策树作为最基础、最常见的有监督学习模型,常被用于分类问题和回归问题,在市场营销和生物医药等领域尤其受欢迎,主要因为树形结构与销售、诊断等场景下的决策过程十分相似;
- 将决策树应用集成学习的思想可以得到随机森林、梯度提升决策树等模型;
- 一般而言,决策树的生成包含了特征选择、树的构造、树的剪枝三个过程;
- 如何对决策树进行剪枝?一棵完全生长的决策树会面临一个很严重的问题,即过拟合。因此我们需要对决策树进行剪枝,剪掉一些枝叶,提升模型的泛化能力。决策树的剪枝通常有两种方法,预剪枝和后剪枝;预剪枝,即在生成决策树的过程中提前停止树的增长。而后剪枝,是在已生成的过拟合决策树上进行剪枝,得到简化版的剪枝决策树;
- 建立决策树模型主要包括两个步骤:节点变量的选择以及每个节点的分支概率的确定。在决策树分析中,节点变量的选择可以通过卡方检验、最大熵减少量、基尼系数减少量等方式来完成,首先筛选与目标分类变量显著相关的变量,如果同时有几个变量与目标分类变量相关,那么再根据相关程度的大小,安排变量的进入顺序;分支概率则通过已有数据来确定即可。以上这两个步骤都会随着样本数据量的变化而变化;
集成学习
简介
- 面对一个机器学习问题,通常有两种策略。一种是研发人员尝试各种模型,选择其中表现最好的模型做重点调参优化。这种策略类似于奥运会比赛,通过强强竞争来选拔最优的运动员,并逐步提高成绩;另一种重要的策略是集各家之长,如同贤明的君主广泛地听取众多谋臣的建议,然后综合考虑,得到最终决策;
- 后一种策略的核心,是将多个分类器的结果统一成一个最终的决策。使用这类策略的机器学习方法统称为集成学习。其中的每个单独的分类器称为基分类器;
- “三个臭皮匠,顶一个诸葛亮”,基分类器就类似于“臭皮匠”,而之前介绍的很多复杂模型可以认为是“诸葛亮”。即使单一一个“臭皮匠”的决策能力不强, 我们有效地把多个“臭皮匠”组织结合起来,其决策能力很有可能超过“诸葛亮”;
种类
1 Boosting
- Boosting方法训练基分类器时采用串行的方式,各个基分类器之间有依赖。 它的基本思路是将基分类器层层叠加,每一层在训练的时候,对前一层基分类器分错的样本,给予更高的权重。最终根据各层分类器结果的加权得到结果;
- Boosting的过程很类似于人类学习的过程,我们学习新知识的过程往往是迭代式的,第一遍学习的时候,我们会记住一部分知识,但也会犯一些错误,对于这些错误,我们的印象会很深。第二遍学习的时候,就会针对犯过错误的知识加强学习,以减少类似的错误发生。不断循环往复,直到犯错误的次数减少到很低的程度;
2 Bagging
- Bagging与Boosting的串行训练方式不同,Bagging方法在训练过程中,各基分类器之间无强依赖,可以进行并行训练。其中很著名的算法之一是基于决策树基分类器的随机森林;
- 为了让基分类器之间互相独立,将训练集 分为若干子集(当训练样本数量较少时,子集之间可能有交叠)。Bagging方法更像是一个集体决策的过程,每个个体都进行单独学习,学习的内容可以相同,也可以不同,也可以部分重叠。但由于个体之间存在差异性,最终做出的判断不会完全一致。在最终做决策时,每个个体单独作出判断,再通过投票的方式做出最后的集体决策;
3 集成学习有哪些基本步骤
- 一般是3个步骤:(1)找到误差互相独立的基分类器;(2)训练基分类器;(3)合并基分类器的结果;
- 合并基分类器的方法有voting和stacking两种。前者是用投票的方式,将获得最多选票的结果作为最终的结果。后者是用串行的方式,把前一个基分类器的结果输出到下一个分类器,再将所有基分类器的输出结果相加(或者用更复杂的算法融合);
以Adaboost为例
- 确定基分类器:可以选取ID3决策树作为基分类器;
- 训练基分类器:Boosting的思想,对分类正确的样本降低了权重,对分类错误的样本升高或者保持权重不变;
- 合并基分类器:在最后进行模型融合的过程中,也根据错误率对基分类器进行加权融合,错误率低的分类器拥有更大的“话语权”;
以GBDT(梯度提升决策树)为例
其核心思想是,每一棵树学的是之前所有树结论和的残差,这个残差就是一个加预测值后能得真实值的累加量。
以一个视频网站的用户画像为例,为了将广告定向投放给指定年龄的用户,视频网站需要对每个用户的年龄做出预测。在这个问题中,每个样本是一个已知年龄的用户,而特征则包括这个人访问的时长、时段、观看的视频的类型等。
例如用户A的真实年龄是25岁,但第一棵决策树的预测年龄是22岁,差了3 岁,即残差为3;那么在第二棵树里我们把A的年龄设为3岁去学习,如果第二棵树 能把A分到3岁的叶子节点,那两棵树的结果相加就可以得到A的真实年龄;如果第二棵树的结论是5岁,则A仍然存在−2岁的残差,第三棵树里A的年龄就变成−2岁, 继续学;这里使用残差继续学习,就是GBDT中Gradient Boosting所表达的意思。
4 为什么把决策树作为基分类器
- 决策树可以较为方便地将样本的权重整合到训练过程中,而不需要使用过采样的方法来调整样本权重;
- 决策树的表达能力和泛化能力,可以通过调节树的层数来做折中;
- 数据样本的扰动对于决策树的影响较大,因此不同子样本集合生成的决策树基分类器随机性较大,这样的“不稳定学习器”更适合作为基分类器。此外, 在决策树节点分裂的时候,随机地选择一个特征子集,从中找出最优分裂属性, 很好地引入了随机性;
GBDT(梯度提升决策树)的基本原理
- Gradient Boosting是Boosting中的一大类算法,其基本思想是根据当前模型损失函数的负梯度信息来训练新加入的弱分类器(决策树),然后将训练好的弱分类器以累加的形式结合到现有模型中;
- 在每一轮迭代中,首先计算出当前模型在所有样本上的负梯度,然后以该值为目标训练一个新的弱分类器进行拟合并计算出该弱分类器的权重,最终实现对模型的更新;
- 用一个很简单的例子来解释一下GBDT训练的过程,如图所示。模型的任务是预测一个人的年龄,训练集只有A、B、C、D4个人,他们的年龄分别是14、16、24、26,特征包括了“月购物金额”“上网时长”“上网历史”等。下面开始训练第一棵树,训练的过程跟传统决策树相同,简单起见,我们只进行一次分枝。训练好第一棵树后,求得每个样本预测值与真实值之间的残差。可以看到,A、B、C、D的残差分别是−1、1、−1、1。这时我们就用每个样本的残差训练下一棵树,直到残差收敛到某个阈值以下,或者树的总数达到某个上限为止;
-
由于GBDT是利用残差训练的,在预测的过程中,我们也需要把所有树的预测值加起来,得到最终的预测结果;
-
优点:1 预测阶段的计算速度快,树与树之间可并行化计算;2 在分布稠密的数据集上,泛化能力和表达能力都很好;3 采用决策树作为弱分类器使得GBDT模型具有较好的解释性和鲁棒性, 能够自动发现特征间的高阶关系,并且也不需要对数据进行特殊的预处理如归一化等;
XGBoost与GBDT
XGBoost是陈天奇等人开发的一个开源机器学习项目,高效地实现了GBDT算法并进行了算法和工程上的许多改进,被广泛应用在许多机器学习竞赛中。
- GBDT是机器学习算法,XGBoost是该算法的工程实现;
- 在使用CART(一种决策树)作为基分类器时,XGBoost显式地加入了正则项来控制模型的复杂度,有利于防止过拟合,从而提高模型的泛化能力;
- GBDT在模型训练时只使用了代价函数的一阶导数信息,XGBoost对代价函数进行二阶泰勒展开,可以同时使用一阶和二阶导数;
- 传统的GBDT采用CART作为基分类器,XGBoost支持多种类型的基分类器,比如线性分类器;
- 传统的GBDT在每轮迭代时使用全部的数据,XGBoost则采用了与随机森林相似的策略,支持对数据进行采样;
- 传统的GBDT没有设计对缺失值进行处理,XGBoost能够自动学习出缺失值的处理策略;
梯度提升算法和梯度下降算法的对比
两者都是在每一轮迭代中,利用损失函数相对于模型的负梯度方向的信息来对当前模型进行更新,只不过在梯度下降中,模型是以参数化形式表示,从而模型的更新等价于参数的更新。而在梯度提升中,模型并不需要进行参数化表示,而是直接定义在函数空间中,从而大大扩展了可以使用的模型种类。