常见的机器学习⾯试问题(持续更新中)
卷积神经⽹络中的权值共享
输⼊层和隐层之间若按照全连接⽅式去连接,权值w的维数太⼤,为了减少权值w的维数,可以采⽤隐层的每个神经元与输⼊层中的1010个
神经元相连,这样就⼤⼤减少了w的维数。进⼀步,如果我们让隐层每个神经元对⽤的1010的权重w都相同,那么最后我们的权重w就只有
1010,但是这样⼦做未免也太粗糙了,提取的特征肯定很少,在此基础上,可以多加⼏个1010⼤⼩的w就可以了,⽐如50个,那就可以
提取50次特征了,总的w的维度就变成501010个。这就是权值共享。
统计学习(传统机器学习)和深度学习的区别和联系
区别:传统机器学习需要⼈⼯设计特征,需要做特征⼯程,并且特征⼯程很关键。⽽深度学习可以⾃动学习特征,特别是在图像、语⾔、⽂
本⽅⾯,这些数据都有局部和整体的关系,深度学习能发挥很⼤的作⽤,但是调参也是⼀个很繁琐的事情。
联系:深度学习是⼀种实现机器学习的技术。
##LR和SVM的异同
相同点:
LR和SVM都是分类算法
如果不考虑核函数,LR和SVM都是分类算法,也就是说他们的决策⾯都是线性的
LR和SVM都是监督学习算法
LR和SVM都是判别模型
LR和SVM在学术界都⼴为⼈知并且应⽤⼴泛
不同点:
本质上是其lossfunction不同。不同的lossfunction代表不同的假设前提,也就代表了不⽤的分类原理。简单来说,逻辑回归⽅法是
基于概率理论,假设样本为1的概率可以⽤sigmoid函数来表⽰,然后通过极⼤似然的⽅法可以估计出参数的值。⽀持向量则是基于⼏
何间隔最⼤的原理,认为存在最⼤⼏何间隔的分类为最优分类⾯。
⽀持向量只考虑局部边界线附近的点,⽽逻辑回归考虑全局。从这⼀点可以得知:线性SVM不直接依赖于数据分布,分类平⾯不受⼀
类点影响;LR则受所有数据点的影响,如果数据不同类别stronglyunbalance,⼀般需要先对数据做balancing。
在解决⾮线性问题时,⽀持向量机采⽤核函数的机制,⽽LR通常不采⽤核函数的⽅法。这个问题理解起来⾮常简单。分类模型的结果
就是计算决策⾯,模型训练的过程就是决策⾯的计算过程。通过上⾯的第⼆点不同点可以了解,在计算决策⾯时,SVM算法⾥只有少
数⼏个代表⽀持向量的样本参与了计算,也就是只有少数⼏个样本需要参与核计算(即kernalmachine解的系数是稀疏的)。然
⽽,LR算法⾥,每个样本点都必须参与决策⾯的计算过程,也就是说,假设我们在LR⾥也运⽤核函数的原理,那么每个样本点都必须
参与核计算,这带来的计算复杂度是相当⾼的。所以,在具体应⽤时,LR很少运⽤核函数机制。
线性SVM依赖数据表达的距离测量,所以需要对数据先做normalization,LR不受其影响。(⼀个基于概率,⼀个基于距离)
SVM的损失函数就⾃带正则项,这就是问什么SVM是结构风险最⼩化算法的原因。⽽LR必须在损失函数上添加正则项下式是SVM的
损失函数
特征缩放(数据标准化)(概率模型不需要)
特征缩放技术是指⾯对多维特征时,将特征数据标准化到⼀个特定的范围,保证这些特征具有相近的尺度,将其进⾏归⼀化,这将帮助梯度
下降法反向传播时更快的收敛。
min-max标准化(Min-MaxNormalization)(它把原始数据映射到[0-1]之间)
L(ω,b,α)=ω−
2
1
∥∥2α(y(ωx+i=1
∑n
ii
T
ib)−1)
0均值标准化(z-score标准化)(去均值除以标准差)
两种⽅法的适⽤场景
在不涉及距离度量、协⽅差计算、数据不符合正太分布的时候,可以使⽤第⼀种⽅法或其他归⼀化⽅法。⽐如图像处理中,将RGB图像
转换为灰度图像后将其值限定在[0255]的范围
在分类、聚类算法中,需要使⽤距离来度量相似性的时候、或者使⽤PCA技术进⾏降维的时候,第⼆种⽅法(Z-score
standardization)表现更好。
特征⼯程⼀般如何做
特征⼯程的⽬的是获取更好的训练数据,把原始数据转变成特征。从数学的⾓度来看,特征⼯程就是⼈⼯的去设计输⼊变量X。主要分为三
个步骤:1、特征构建;2、特征提取;3、特征选择
1、特征构建
特征构建是指从原始数据中⼈⼯的找出⼀些具有物理意义的特征。需要花时间去观察原始数据,思考问题的潜在形式和数据结构,对
数据敏感性和机器学习实战经验能帮助特征构建。
2、特征提取
PCA(Principalcomponentanalysis,主成分分析)
LDA(LinearDiscriminantAnalysis,线性判别分析)
ICA(Independentcomponentanalysis,独⽴成分分析)
3、特征选择
从给定的特征集合中选择出相关特征⼦集的过程,称为特征选择。
原因:
维数灾难
去除不相关的特征往往会降低学习任务的难度
主要选择⽅式:
过滤式选择(先选择特征再训练)
包裹式选择(根据要使⽤的学习器选择特征、期间进⾏多次训练、开销⼤,但是效果优于前者)
嵌⼊式选择与L1正则化(不同于前两个将学习器的训练和特征选择分开,该⽅法边训练边选择)
解释什么是降维,在哪⾥会⽤到降维,它的好处是什么?
降维是指通过保留⼀些⽐较重要的特征,去除⼀些冗余的特征,减少数据特征的维度。⽽特征的重要性取决于该特征能够表达多少数据集的
信息,也取决于使⽤什么⽅法进⾏降维。使⽤哪种降维⽅法则是通过反复的试验和每种⽅法在该数据集上的效果。⼀般情况会先使⽤线性降
维⽅法再使⽤⾮线性的降维⽅法。
好处:
x=max−min
x−max
x=
σ
x−μ
节省存储空间
加速计算速度,维度越少,计算量越少,并且能够使⽤那些不适合⾼维度的算法
去除⼀些冗余特征,⽐如降维后使得数据不会即保存平⽅⽶⼜保存平⽅英⾥的表⽰地形⼤⼩的特征
将数据维度降到2维或者3维使之能可视化,便于观察和挖掘信息
特征太多或者太复杂会使得模型过拟合
PCA和LDA
两者都可⽤于将维,区别是PCA是⼀种⽆监督的映射⽅法,⽽LDA是有监督的映射⽅法。
PCA将整组数据整体映射到最⽅便表⽰这组数据的坐标轴上,映射时没有利⽤任何数据内部的分类信息。⽤主要的特征代替其他相关的⾮主
要的特征,所有特征之间的相关度越⾼越好。经过PCA处理后,整组数据在表⽰上更加⽅便(降低了维数并将信息损失降到最低),但在分类
上也许会变得更加困难。
LDA主要求⼀个映射,使得类别内的点距离越近越好(集中),类别间的点越远越好。其简要原理就是求取⼀个线性变换,使得不同类数据
间的协⽅差矩阵和同⼀类数据内部的各个数据间协⽅差矩阵之⽐的达到最⼤。
如何处理缺失值
处理⽅法有两种,⼀种是删除整⾏或者整列的数据,另⼀种则是使⽤其他值去填充。
如何解决过拟合
获取更多的数据,数据越多越接近整体(数据集扩增)
使⽤简单的模型
训练时间,提前结束训练(Earlystopping)(训练集误差不停下降,但是测试数据是先下降后上升,选择哪个临界点)
正则化(限制权值)
神经⽹络可以采⽤Dropout
ROC和AUC
AUC(AreaUnderROCCurve),即在ROC曲线下的⾯积。ROC曲线就是根据学习器的预测结果对样例进⾏排序,按此顺序逐个把样本作
为正例进⾏预测,每次计算出两个重要的量,⼀个是真正例率,⼀个是假正例率(假例中预测为正例的⽐率),真正例率(正例中预测为正例的
⽐率)作为纵轴,假正例率作为横轴,作图,就得到ROC曲线。
解释K-means原理
K-means算法针对聚类所得的簇划分最⼩化平⽅误差。找到最优解需考察样本集D所有可能的簇划分,这是⼀个NP难问题。k-means采⽤
了贪⼼策略,通过迭代优化来近似求解。
1、从D中随机选择k个样本作为初始均值向量,类别k是⼈为设定的。
2、计算各个样本与各个均值向量的距离,根据距离最近的均值向量确定样本的簇标记,并化⼊相应的簇。
3、更新均值向量,如果新的均值向量不等于之前的均值向量,则更新均值向量,否则保持不变。
4、重复2~3,直到当前均值向量均未更新,得到最终的簇划分。
DBSCAN
全称为“Density-BadSpatialClusteringofApplicationswithNoi”,属于密度聚类。此类算法假设聚类结构能通过样本分布的紧
密程度确定。
定义以下⼏个概念:
-邻域:对其邻域包含样本集D中与的距离不⼤于的样本,即
核⼼对象:若的-邻域中⾄少包含MinPts个样本,则是⼀个核⼼对象。
密度直达:若位于的-邻域中,且是核⼼对象,则称由密度直达。
密度可达:对与,若存在样本序列,其中,且由密度直达,则称由密度可达。
簇”定义为:由密度可达关系导出的最⼤密度相连样本集合。
##判别模拟和⽣成模型
判别模型会⽣成⼀个表⽰P(Y|X)的判别函数(或预测模型),⽽⽣成模型先计算联合概率p(Y,X)然后通过贝叶斯公式转化为条件概
率。简单来说,在计算判别模型时,不会计算联合概率,⽽在计算⽣成模型时,必须先计算联合概率。或者这样理解:⽣成算法尝试去找到
底这个数据是怎么⽣成的(产⽣的),然后再对⼀个信号进⾏分类。基于你的⽣成假设,那么哪个类别最有可能产⽣这个信号,这个信号就
属于那个类别。判别模型不关⼼数据是怎么⽣成的,它只关⼼信号之间的差别,然后⽤差别来简单对给定的⼀个信号进⾏分类。常见的判别
模型有:KNN、SVM、LR,条件随机场(待定),常见的⽣成模型有:朴素贝叶斯,隐马尔可夫模型。当然,这也是为什么很少有⼈问你
朴素贝叶斯和LR以及朴素贝叶斯和SVM有什么区别。
简单的说:判别模型是直接学习p(y|x),或者直接从特征空间学习类别标签;⽣成模型是对类别模型进⾏学习,实际上,⽣成模型是对
联合概率分布p(x,y)=p(x|y)p(y)进⾏学习的。
L1、L2正则化的区别
相同点:都⽤于避免过拟合
不同点:L1可以让⼀部分特征的系数缩⼩到0,从⽽间接实现特征选择。所以L1适⽤于特征之间有关联的情况,并且可以⽤来做特征
选择。L2让所有特征的系数都缩⼩,但是不会减为0,它会使优化求解稳定快速。所以L2适⽤于特征之间没有关联的情况。
对于L1正则化:当w为正时,更新后的w变⼩。当w为负时,更新后的w变⼤——因此它的效果就是让w往0靠,使⽹络中的权重尽可能
为0,也就相当于减⼩了⽹络复杂度,防⽌过拟合。
另外,上⾯没有提到⼀个问题,当w为0时怎么办?当w等于0时,|W|是不可导的,所以我们只能按照原始的未经正则化的⽅法去更新
w,这就相当于去掉ηλsgn(w)/n这⼀项,所以我们可以规定sgn(0)=0,这样就把w=0的情况也统⼀进来了。(在编程的时候,令
sgn(0)=0,sgn(w>0)=1,sgn(w<0)=-1)
什么是梯度消散和梯度爆炸
如果⽹络使⽤sigmod激活函数,误差在向前传递的时候,经过sigmod单元,需要乘sigmod的梯度,⽽sigmod的梯度最⼤是0.25,因此
越向前传递,误差就越⼩了,这就是梯度消散,但是梯度爆炸是什么?注意误差在经过全连接或者卷积层时,也要乘以权重w,如果w都⽐
较⼤,⼤过sigmod造成的减⼩,这样越往前误差就越来越⼤,梯度爆炸了!
对于BN层的理解
Batchnorm是深度学习发展以来提出的最重要的成果之⼀了,⽬前已经被⼴泛的应⽤到了各⼤⽹络中,具有加速⽹络收敛速度,提升训练
稳定性的效果,Batchnorm本质上是解决反向传播过程中的梯度问题。batchnorm全名是batchnormalization,简称BN,即批规范化,
通过规范化操作将输出信号x规范化保证⽹络的稳定性。
ϵx∈jDϵxjϵN(x)=ϵ
j{x∈iD∣dist(x,x)⩽i
jϵ}
xjϵxj
xjxiϵxixjxi
xixjp,p,…,p12np=1xip=1xipi+1pixjxi
1、防⽌梯度消失,加快训练速度
BN就是通过⼀定的规范化⼿段,把每层神经⽹络任意神经元这个输⼊值的分布强⾏拉回到均值为0⽅差为1的标准正太分布,其实就是把越
来越偏的分布强制拉回⽐较标准的分布,这样使得激活输⼊值落在⾮线性函数对输⼊⽐较敏感的区域,这样输⼊的⼩变化就会导致损失函数
较⼤的变化,意思是这样让梯度变⼤,避免梯度消失问题产⽣,⽽且梯度变⼤意味着学习收敛速度快,能⼤⼤加快训练速度。
通俗来说,随着⽹络的训练,出了输⼊数据,中间数据的的分布在不断的发⽣变化,这就给⽹络的学习带来了⼀定的困难,此现象称之
为InternalCovariateShift。BN层即将每个隐层神经元,把逐渐向⾮线性函数映射后向取值区间极限饱和区靠拢的输⼊分布强制拉回到均
值为0⽅差为1的⽐较标准的正态分布,使得⾮线性变换函数的输⼊值落⼊对输⼊⽐较敏感的区域,以此避免梯度消失问题。
2、防⽌过拟合
⼤概意思是:在训练中,BN的使⽤使得⼀个mini-batch中的所有样本都被关联在了⼀起,因此⽹络不会从某⼀个训练样本中⽣成确定的结
果。
这句话什么意思呢?意思就是同样⼀个样本的输出不再仅仅取决于样本本⾝,也取决于跟这个样本属于同⼀个mini-batch的其它样本。
同⼀个样本跟不同的样本组成⼀个mini-batch,它们的输出是不同的(仅限于训练阶段,在inference阶段是没有这种情况的)。我把这个
理解成⼀种数据增强:同样⼀个样本在超平⾯上被拉扯,每次拉扯的⽅向的⼤⼩均有不同。不同于数据增强的是,这种拉扯是贯穿数据流过
神经⽹络的整个过程的,意味着神经⽹络每⼀层的输⼊都被数据增强处理了。
为什么正则化可以防⽌过拟合
正则化可以是权值衰减,为什么w“变⼩”可以防⽌overfitting?⼀个所谓“显⽽易见”的解释就是:更⼩的权值w,从某种意义上说,表
⽰⽹络的复杂度更低,对数据的拟合刚刚好(这个法则也叫做奥卡姆剃⼑)
另外⼀种理解:过拟合的时候,拟合函数的系数往往⾮常⼤,为什么?如下图所⽰,过拟合,就是拟合函数需要顾忌每⼀个点,最终形
成的拟合函数波动很⼤。在某些很⼩的区间⾥,函数值的变化很剧烈。这就意味着函数在某些⼩区间⾥的导数值(绝对值)⾮常⼤,由于⾃
变量值可⼤可⼩,所以只有系数⾜够⼤,才能保证导数值很⼤。⽽正则化是通过约束参数的范数使其不要太⼤,所以可以在⼀定程度上减少
过拟合情况。
Randomforest原理
Randomforest是Bagging的⼀个扩展变体。以决策树为基学习器。在决策树的训练过程中引⼊了随机属性选择。
1.假如m个训练样本,⾃助采样⼀个训练集
2.当每个样本有d个属性,在决策树的每个节点需要分裂时,随机从这d个属性中选取出k个属性,满⾜条件k<
再从这个k个属性值中采取某种策略(⽐如说信息增益)来选择⼀个属性作为该节点的分裂属性。
3.决策树形成过程的每个节点都要按照步骤2来分裂,⼀直到不能够再分裂位置。整个决策树形成过程没有剪枝。
4.按照步骤1~3建⽴⼤量的决策树,再对训练出来的弱决策树进⾏集成,这样就构成了随机森林。
xgboost/gbdt在调参时为什么树的深度很少就能达到很⾼的精度?但是⽤
DecisionTree/RandomForest的时候需要把树的深度调到15或更⾼。
⼀句话的解释,来⾃周志华⽼师的机器学习教科书(机器学习-周志华):Boosting主要关注降低偏差,因此Boosting能基于泛化性能相
当弱的学习器构建出很强的集成;Bagging主要关注降低⽅差,因此它在不剪枝的决策树、神经⽹络等学习器上效⽤更为明显。
Bagging算法是这样做的:每个分类器都随机从原样本中做有放回的采样,然后分别在这些采样后的样本上训练分类器,然后再把这
些分类器组合起来。简单的多数投票⼀般就可以。其代表算法是随机森林。Boosting的意思是这样,他通过迭代地训练⼀系列的分类器,
每个分类器采⽤的样本分布都和上⼀轮的学习结果有关。其代表算法是AdaBoost,GBDT。
对于Bagging算法来说,由于我们会并⾏地训练很多不同的分类器的⽬的就是降低这个⽅差(variance),因为采⽤了相互独⽴的基分类
器多了以后,h的值⾃然就会靠近.所以对于每个基分类器来说,⽬标就是如何降低这个偏差(bias),所以我们会采⽤深度很深甚⾄不剪枝的
决策树。
对于Boosting来说,每⼀步我们都会在上⼀轮的基础上更加拟合原数据,所以可以保证偏差(bias),所以对于每个基分类器来说,问
题就在于如何选择variance更⼩的分类器,即更简单的分类器,所以我们选择了深度很浅的决策树。
k=logd2
集成学习介绍(boosting、bagging、stacking原理)
集成学习器通过构建并结合多个学习器(弱学习器)来完成学习任务,常可获得⽐单⼀学习器显著优越的泛化性能。
主要集成学习⽅法可以分为两⼤类:
1.个体学习器之间存在强依赖关系,必须串⾏⽣成序列化⽅法。(Boosting)
2.体学习器间不存在强依赖关系,可同时⽣成的并⾏化算法。(Bagging和RandomForest)
Boosting
先从初始训练集训练出⼀个基学习器,再根据基学习器的表现对样本分布进⾏调整,使得先前基学习做错的训练样本在后续受到更多的关
注,然后基于调整后的样本分布来训练下⼀个基学习器;如此反复进⾏,直到基学习器数⽬达到事先指定的值T,最终将这个T个基学习器进
⾏加权组合。
Bagging
基于⾃助采样法(booststrapsampling)。
采样出T个含m个训练样本的采样集,然后基于每个采样集训练出⼀个基学习器,在将这些基学习器进⾏结合。结合时分类任务常使⽤
简单投票法,回归任务使⽤简单平均法。
Stacking
Stacking其实是⼀种结合策略(本⾝也是⼀种著名的集成学习算法),即基学习器的结合策略。把个体学习器成为初级学习器,⽤于结合的
学习器称为次级学习器或元学习器。
Stacking先从初始数据集训练出初级学习器,然后⽣成⼀个新的数据集⽤于训练次级学习器,初级学习器的输出被当做样例特征,⽽初
始样本的标记仍被当作样例标记。
使⽤交叉验证或者留⼀法,⽤初级学习器为使⽤的样本来产⽣次级学习器的训练样本。
次级学习算法⼀般使⽤多响应线性回归效果较好。
随机梯度下降法和⽜顿法的区别和定义
随机梯度下降是使⽤的⼀阶导,实现简单。当⽬标函数是凸函数时,梯度下降法的解是全局最优解,⼀般情况下,其解不保证是全局最优
解。收敛速度未必是很快的。
⽜顿法和拟⽜顿法有收敛速度快的优点。需要求解⽬标函数的海赛矩阵的逆矩阵,计算⽐较复杂。拟⽜顿法通过正定矩阵近似海赛矩阵
的逆矩阵或海赛矩阵,简化了这⼀计算过程。主要是使⽤⼆阶导数。
常见的激活函数有哪些
加⼊激活函数是⽤来加⼊⾮线性因素的,解决线性模型所不能解决的问题。
(1)sigmoid
函数表达式:
存在梯度消失、不是关于原点对称、计算exp⽐较耗时等问题
(2)tanh
函数表达式:
收敛速度⽐sigmoid快
解决了原点对称问题,但是梯度弥散(梯度消失)没有解决
(3)ReLU
函数表达式:
能够有效缓解梯度消失问题。
提供神经⽹络的稀疏表达能⼒。
ReLU在时,权重⽆法更新,会导致“神经元死亡”。
f(x)=1+e−x
1
f(x)==e+ex−x
e−ex−x
1+e−2x
1−e−2x
f(x)=max(0,x)
x<0
(4)Leaky-ReLu
函数表达式:
(5)PReLU(parametricReLU)
对于LeakyReLU中的作为⼀个参数进⾏训练。
⼀般如何选择?
答:⾸先尝试ReLU
更详细内容,请参考
反向传播中,怎么做梯度检验?
对于⼀个函数来说,通常有两种计算梯度的⽅式:
数值梯度
解析题都
经⽹络算法使⽤反向传播计算⽬标函数关于每个参数的梯度,由于神经⽹络中函数都是可导的,所以求的是解析梯度。由于计算过程中涉及
到的参数很多,反向传播计算的梯度很容易出现误差。
为了确认代码中反向传播计算的梯度是否正确,可以采⽤梯度检验(gradientcheck)的⽅法。通过计算数值梯度,得到梯度的近似值,
然后和反向传播算法进⾏⽐较,若两者相差很⼩的话则证明反向传播的代码是正确的。
数值梯度:
是⼀个很⼩的值,⽐如。所以我们可以通过计算损失函数的数值梯度来检验解析梯度,如果⼆者很接近的话,则验证解析⽅法得到
的梯度是正确的。
SVM调参
最重要的两个:
(1)C:⽬标函数的惩罚系数C,⽤来平衡分类间隔margin和错分样本的,defaultC=1.0。C⼀般可以选择为:10^t,t=[-4,4]就是
0.0001到10000。其中C是惩罚系数,即对误差的宽容度。C越⾼,说明越不能容忍出现误差,容易过拟合。C越⼩,容易⽋拟合。C过⼤
或过⼩,泛化能⼒变差
(2)gamma:核函数的系数(‘Poly’,‘RBF’and‘Sigmoid’),默认是gamma=1/n_features;gamma是选择RBF函数作为
kernel后,该函数⾃带的⼀个参数。隐含地决定了数据映射到新的特征空间后的分布,gamma越⼤,⽀持向量越少,gamma值越⼩,⽀持
向量越多。⽀持向量的个数影响训练与预测的速度。
总结:
C表⽰模型对误差的惩罚系数;gamma反映了数据映射到⾼维特征空间后的分布,gamma越⼤,⽀持向量越多,gamma值越⼩,⽀
持向量越少。C越⼤,模型越容易过拟合;C越⼩,模型越容易⽋拟合。gamma越⼩,模型的泛化性变好,但过⼩,模型实际上会退化为线
性模型;gamma越⼤,理论上SVM可以拟合任何⾮线性数据。
为维持模型在过拟合和⽋拟合之间的平衡,往往最佳的参数范围是C⽐较⼤,gamma⽐较⼩;或者C⽐较⼩,gamma⽐较⼤。也就是说当
模型⽋拟合时,我们需要增⼤C或者增⼤gamma,不能同时增加,调节后如果模型过拟合,我们⼜很难判断是C过⼤了,还是gamma过⼤
了;同理,模型⽋拟合的时候,我们需要减⼩C或者减⼩gamma。
还有⼀些其他的:⽐如每个类的权重,最⼤地带次数等等。
lr调参
f(x)=ax(x<0)
f(x)=x(x>=0)
α
J(θ)=
dθ
d
2ϵ
J(θ+ϵ)−J(θ+ϵ)
ϵ10(−4)
(1)正则化参数的选择:L1L2等;
(2)优化算法:⽜顿,拟⽜顿,SGD等;
(3)分类⽅式选择:ovr(one-vs-rest)和MvM(many-vs-many)
OvR的思想很简单,⽆论你是多少元逻辑回归,我们都可以看做⼆元逻辑回归。具体做法是,对于第K类的分类决策,我们把所有第K类的
样本作为正例,除了第K类样本以外的所有样本都作为负例,然后在上⾯做⼆元逻辑回归,得到第K类的分类模型。其他类的分类模型获得
以此类推。
⽽MvM则相对复杂,这⾥举MvM的特例one-vs-one(OvO)作讲解。如果模型有T类,我们每次在所有的T类样本⾥⾯选择两类样本出
来,不妨记为T1类和T2类,把所有的输出为T1和T2的样本放在⼀起,把T1作为正例,T2作为负例,进⾏⼆元逻辑回归,得到模型参数。
我们⼀共需要T(T-1)/2次分类。
从上⾯的描述可以看出OvR相对简单,但分类效果相对略差(这⾥指⼤多数样本分布情况,某些样本分布下OvR可能更好)。⽽MvM
分类相对精确,但是分类速度没有OvR快。
(4)⼀些权重参数。
更详细内容,请参考
贝叶斯分类中朴素贝叶斯和半朴素贝叶斯的理解
贝叶斯分类是⼀类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类。⽽朴素朴素贝叶斯分类是贝叶斯分类中最简
单,也是常见的⼀种分类⽅法。
朴素贝叶斯分类
1、假设特征之间相互独⽴,再去做贝叶斯分类。假设独⽴的原因有两点(1、每个特征有多个属性,多个特征的联合概率分布总数过多;
2、)
详细内容参考:
机器学习算法中GBDT和XGBOOST的区别有哪些?
传统GBDT以CART作为基分类器,xgboost还⽀持线性分类器,这个时候xgboost相当于带L1和L2正则化项的逻辑回归(分类问
题)或者线性回归(回归问题)。
传统GBDT在优化时只⽤到⼀阶导数信息,xgboost则对代价函数进⾏了⼆阶泰勒展开,同时⽤到了⼀阶和⼆阶导数。顺便提⼀
下,xgboost⼯具⽀持⾃定义代价函数,只要函数可⼀阶和⼆阶求导。
Shrinkage(缩减),相当于学习速率(xgboost中的eta)。xgboost在进⾏完⼀次迭代后,会将叶⼦节点的权重乘上该系数,主要
是为了削弱每棵树的影响,让后⾯有更⼤的学习空间。实际应⽤中,⼀般把eta设置得⼩⼀点,然后迭代次数设置得⼤⼀点。(补充:
传统GBDT的实现也有学习速率)
列抽样(columnsubsampling)即特征抽样。xgboost借鉴了随机森林的做法,⽀持列抽样,不仅能降低过拟合,还能减少计算,这
也是xgboost异于传统gbdt的⼀个特性。
对缺失值的处理。对于特征的值有缺失的样本,xgboost可以⾃动学习出它的分裂⽅向。
xgboost⼯具⽀持并⾏。boosting不是⼀种串⾏的结构吗?怎么并⾏的?注意xgboost的并⾏不是tree粒度的并⾏,xgboost也是⼀次
迭代完才能进⾏下⼀次迭代的(第t次迭代的代价函数⾥包含了前⾯t-1次迭代的预测值)。xgboost的并⾏是在特征粒度上的。我们知
道,决策树的学习最耗时的⼀个步骤就是对特征的值进⾏排序(因为要确定最佳分割点),xgboost在训练之前,预先对数据进⾏了排
序,然后保存为block结构,后⾯的迭代中重复地使⽤这个结构,⼤⼤减⼩计算量。这个block结构也使得并⾏成为了可能,在进⾏节点
的分裂时,需要计算每个特征的增益,最终选增益最⼤的那个特征去做分裂,那么各个特征的增益计算就可以开多线程进⾏。
可并⾏的近似直⽅图算法。树节点在进⾏分裂时,我们需要计算每个特征的每个分割点对应的增益,即⽤贪⼼法枚举所有可能的分割
点。当数据⽆法⼀次载⼊内存或者在分布式情况下,贪⼼算法效率就会变得很低,所以xgboost还提出了⼀种可并⾏的近似直⽅图算
法,⽤于⾼效地⽣成候选的分割点。
参考
本文发布于:2022-12-30 05:51:56,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/90/57787.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
| 留言与评论(共有 0 条评论) |