机器学习(二)

1、XGBoost为啥用二阶泰勒展开

利用泰勒公式去逼近任何函数,在GBDT一阶导数的基础上引入二阶导更加精确,同时在二阶导的基础上可以转化为关于叶子结点权重的一元二次方程,在顺序扫描计算增益损失时更加精准,因为本身二阶导在推导过程中可以更精确的反应梯度是如何变化的,从而更精确的实现loss下降(无放回训练,因为中间有梯度下降)

同时因为xgboost的损失函数是基于MSE的,这样有更好的扩展性,任何可以进行二阶泰勒展开的都可以自定义其损失函数,既可分类也可回归。

1、第一点利用泰勒展开本质上上是去模拟逼近函数,二阶展开可以进一步拟合精度,二阶信息可以描述梯度变化方向是如何变化的。

2、第二点为了xgboost的可扩展性,使xgboost能够【自定义loss function】,只要损失函数二阶可导就可套用推导结果,即可分类也可回归。

XGBoost官网上有说,当目标函数是 MSE时,展开是一阶项(残差)+二阶项的形式,而其它目标函数,如 logistic loss
的展开式就没有这样的形式。为了能有个统一的形式,所以采用泰勒展开来得到二阶项,这样就能把 MSE推导的那套直接复用到其它自定义损失函数上。简短来说,就是为了统一损失函数求导的形式以支持自定义损失函数

至于为什幺要在形式上与 MSE统一?是因为 MSE是最普遍且常用的损失函数,而且求导最容易,求导后的形式也十分简单。所以理论上只要损失函数形式与 MSE统一了,那就只用推导 MSE就好了。

Xgboost相对于GBDT的不同

1、GBDT是机器学习方法,xgboost是该算法的工程实现

2、在使用CART作为基分类器时,XGBoost显式地加入正则化项来控制模型的复杂度,有利于防止过拟合,提高模型的泛化能力

3、GBDT在模型训练时只采用了代价函数的一阶导数信息,XGBoost进行二阶展开,可以同时采用一阶二阶导数

4、传统GBDT采用CART作为基分类器,XGBoost支持多种类型分类器,比如线性分类器

5、GBDT会采用全部的数据,XGBoost支持下采样,同时设置了缺失值的处理方式,通过左右两轮遍历办证稀疏值处于左右子树

6、分裂算法,线性排列后进行扫描特征,确定节点的增益损失大小,以确定最好的分割点。

 

2、过拟合的解决方案

重新清洗样本,增加样本数量进行样本集扩充,最简单淳朴的方法,在项目中对图片数据进行平移翻转、扩充等各种方法将数据集扩充

降低模型复杂度,引入L2正则化系数,利用early stopping,减少迭代次数,

在树模型中可以进行剪枝等相关操作,在数据层面也可以进一步减少特征项,降低拟合的复杂度

3、处理数据不均衡

可以进行数据集的扩充,对大类样本欠采样,小类样本进行过采样(基于聚类的过采样策略---SMOTE算法、图片样本扩充),插值等方法,引入新的评价指标,不单单使用P,R值,利用F1值,ROC曲线进行描述拟合,也可以进一步更新损失函数,比如在医学图像分割中提出的dice函数,iou交并比其实就是小样本占比比较小的一种策略

同时改变训练策略,可以引入RF等集成学习的策略,选择小类样本和相同数目的大类样本并行跑小模型最后集成学习

4、卷积中cnn的感受野?为什么用多个小卷积核代替大卷积核

2*3*3的感知野相当于5*5,但是每个卷积核后边都会接relu函数,这样的话可以引入更多的非线性,相当于引入更多的正则化项

同时小尺寸的卷积核所需要调参的数目也不大尺寸卷积核要少。

1*1卷积:https://zhuanlan.zhihu.com/p/40050371

1、1*1卷积用来降维,调整网络深度,使网络结构更紧凑,同时需要调节的参数也会减小,增加非线性

2、实现跨通道的交互和信息整合(改变channel数)

inception+ResNet

 inception不用我们选择,而是把4个选项给神经网络,让它自由选择,自己选择最合适的解决方案

蓝色卷积块的作用就是为了让网络根据需要灵活的控制数据的depth,GoogLeNet利用1×1的卷积降维后,得到了更为紧凑的网络结构,虽然总共有22层,但是参数数量却只是8层的AlexNet的十二分之一

Inception模块采用不同尺寸的卷积核,可以不同时考虑区域和通道的问题

常见的卷积网络类型:

1、AlexNet:双GPU运行,Relu为激活函数,LRN局部归一化,Droupot随机化乘以系数p,在池化过程中z>s

2、VGGNet:卷积核3*3,最大池化 2*2 ,1*1的卷积在于线性变化

两个3*3卷积核串联相当于5*5,同理3个3*3串联相当于7*7

3、GoogleNet:同一层中卷积核大小不同,可以进行不同尺度的特征融合

 

5、双向LSTM优势

LSTM的基本网络结构:https://www.jianshu.com/p/9dc9f41f0b29

遗忘门+输入门+输出门

 

 遗忘门:

 确定更新信息:

 

 更新细胞状态:

 

 输出信息:

LSTM的核心,使用隐藏状态保存已经通过它的输入信息。

单向LSTM仅保留过去的信息,因为它看到的唯一输入来自过去。

使用双向将以两种方式运行输入,一种从过去到未来,一种从未来到过去,这种方法与单向的不同之处在于,在向后运行的LSTM中,您保留来自 future的信息并且使用两种隐藏状态,您可以在任何时间点保存过去和未来的信息。

(二)GRU循环神经网络的公式及更新

 

 

6、利用awk提取端口

用-F参数项指定列的分隔符。

  • awk -F"[: ]" '{print "协议:"$1,"端口号:"$NF}'

 

关于 awk 脚本,我们需要注意两个关键词 BEGIN 和 END。

  • BEGIN{ 这里面放的是执行前的语句 }
  • END {这里面放的是处理完所有的行后要执行的语句 }
  • {这里面放的是处理每一行时要执行的语句}

7、KNN和K-means的区别?

KNN本质上是有监督学习,数据是带有label的多分类算法,通过选取与样本点相近的k个样本的最多所属类别作为样本点的类别,主要有距离度量,k值选择,分类决策机制几部分构成,常见的分类机制有构建kd树进行划分。

k-means是无监督学习方法,用于聚类的算法,其他聚类方法还有层次聚类、密度聚类等。但是受离群点的影响比较大,需要进行数据归一化处理,同时利用手肘法等确定合理的拐点,找到合适的K值。

KNN

  • 分类算法
  • 监督学习
  • 数据集是带Label的数据
  • 没有明显的训练过程,基于Memory-based learning
  • K值含义 - 对于一个样本X,要给它分类,首先从数据集中,在X附近找离它最近的K个数据点,将它划分为归属于类别最多的一类

K-means

  • 聚类算法
  • 非监督学习
  • 数据集是无Label,杂乱无章的数据
  • 有明显的训练过程
  • K值含义- K是事先设定的数字,将数据集分为K个簇,需要依靠人的先验知识

8、SVM的核函数的作用是什么?解决的根本问题是什么?常见的核函数?

SVM核函数的主要作用是将低维空间中的样本映射到高维空间中,将原来不可分的两类点转换成线性可分的,因为svm本质上是将相似的样本划分到一类,同时在对偶问题的求解中会出现xi*xj的形式,这样引入核函数,将其中xi和xj的形式替换成\Phi(xi)的形式,这样学习是在特征空间上隐式的学习,而不用显式的定义特征空间和映射函数,其中正定核的条件内积大于等于0,从向量空间到内积空间再到希尔伯特空间。

避免了低维空间大量样本做内积的维数灾难,解决的根本问题是非线性不可分问题,SVM本身的思想是间隔最大化,寻找确定分隔边界使得所有间隔最大化。进一步引入对偶问题,对偶问题有拉格朗日函数更好求解,同时自然引入核函数,推广到非线性问题。

知乎专栏https://zhuanlan.zhihu.com/p/93715996

把原问题转换为对偶问题?因为原问题是凸二次规划问题,转换为对偶问题更加高效。为什么求解对偶问题更加高效?因为只用求解alpha系数,而alpha系数只有支持向量才非0,其他全部为0.alpha系数有多少个?样本点的个数

 

在机器学习中常用的核函数,一般有这么几类,也就是LibSVM中自带的这几类:

一般用线性核和高斯核,也就是Linear核与RBF核
需要注意的是需要对数据归一化处理,很多使用者忘了这个小细节
然后一般情况下RBF效果是不会差于Linear,但是时间上RBF会耗费更多
下面是吴恩达的见解:

  1. 如果Feature的数量很大,跟样本数量差不多,这时候选用LR或者是Linear Kernel的SVM
  2. 如果Feature的数量比较小,样本数量一般,不算大也不算小,选用SVM+Gaussian Kernel
  3. 如果Feature的数量比较小,而样本数量很多,需要手工添加一些feature变成第一种情况

工作中,最常用的是Linear核与RBF核。

  1. Linear核:主要用于线性可分的情形。参数少,速度快,对于一般数据,分类效果已经很理想了。
  2. RBF核:主要用于线性不可分的情形。参数多,分类结果非常依赖于参数。有很多人是通过训练数据的交叉验证来寻找合适的参数,不过这个过程比较耗时。我个人的体会是:使用libsvm,默认参数,RBF核比Linear核效果稍差。通过进行大量参数的尝试,一般能找到比linear核更好的效果。

由泰勒公式展开,可以发现高斯核是一种特殊的多项式核函数,即n趋向于无穷时的解,因此高斯核是一种映射到无穷维的核函数,以保证VC维一定可以找到超平面把数据类别很好的分开。

  • SVM应用于多分类和回归问题

多分类可以采用一对一,一对多的方法,构建多个分类器,最后投票决定,libsvm中采用的是一对一法,在任意两个样本之间构建SVM分类器。

支持向量回归SVR,转化为回归问题,即在确定的fx两侧存在一定间隔带,落入间隔带的样本点不计较损失。

增加margin,我们人为定义在margin内部的点我们直接不计算在distance^2里面,仍可以利用松弛变量来减小margin的负面影响

  • SVM存在的问题

1、SVM算法对大规模训练样本难以实施,涉及到大量矩阵运算,引入SMO算法

2、解决多分类问题存在困难

9、为什么梯度的负方向是局部下降最快的方向?

10、sigmoid的反向传播,交叉熵反向传播

源网址:https://www.cnblogs.com/nowgood/p/sigmoidcrossentropy.html

反向传播算法:https://blog.csdn.net/u014313009/article/details/51039334

RNN网络BPTT更新:https://zybuluo.com/hanbingtao/note/541458

 

11、Attention原理

        一般的attention机制在编码阶段对不同时刻的隐藏状态进行加权平均得到背景向量CT,在解码时要调整attention权重关注不同时刻的背景向量C,中间的背景向量ca是不断变化的,等于对每一个词的加权累加,权重系数的计算就是引入softmax函数它将解码器ht-1和编码器0到T时刻的所有状态作为输入来计算不同时刻a的值,本质可以模拟软件系统中的软寻址,哈希表通过构造函数来表征查询值与键值之间的相似性然后再乘以values进行加权求和

12、Embedding

词向量嵌入和word2vec:https://zhuanlan.zhihu.com/p/26306795

Enbedding最广泛的应用是在词嵌入向量领域,核心思想是将向量映射成低维空间上的稠密向量,k维空间的每一维都可以看成一个隐含的主题。

利用网络优化参数(低维表示且自学习参数),在词向量中对应乘以权值矩阵的时候,同时在深度学习模型中每个隐层对应着不同抽象层次的特征。

13、词向量嵌入和word2vec

链接:https://zhuanlan.zhihu.com/p/26306795

看看 Skip-gram 的网络结构了,x 就是上面提到的 one-hot encoder 形式的输入,y 是在这 V 个词上输出的概率,我们希望跟真实的 y 的 one-hot encoder 一样。

 

首先说明一点:隐层的激活函数其实是线性的,相当于没做任何处理(这也是 Word2vec 简化之前语言模型的独到之处),我们要训练这个神经网络,用反向传播算法,本质上是链式求导

当模型训练完后,最后得到的其实是神经网络的权重,比如现在输入一个 x 的 one-hot encoder: [1,0,0,…,0],对应刚说的那个词语『吴彦祖』,则在输入层到隐含层的权重里,只有对应 1 这个位置的权重被激活,这些权重的个数,跟隐含层节点数是一致的,从而这些权重组成一个向量 vx 来表示x,而因为每个词语的 one-hot encoder 里面 1 的位置是不同的,所以,这个向量 vx 就可以用来唯一表示 x。

注意:上面这段话说的就是 Word2vec 的精髓!!

此外,我们刚说了,输出 y 也是用 V 个节点表示的,对应V个词语,所以其实,我们把输出节点置成 [1,0,0,…,0],它也能表示『吴彦祖』这个单词,但是激活的是隐含层到输出层的权重,这些权重的个数,跟隐含层一样,也可以组成一个向量 vy,跟上面提到的 vx 维度一样,并且可以看做是词语『吴彦祖』的另一种词向量。而这两种词向量 vx 和 vy,正是 Mikolov 在论文里所提到的,『输入向量』和『输出向量』(对应输入层的embeding和输出层的embeding矩阵),一般我们用『输入向量』。

词向量的维度(与隐含层节点数一致)一般情况下要远远小于词语总数 V 的大小,所以 Word2vec 本质上是一种降维操作——把词语从 one-hot encoder 形式的表示降维到 Word2vec 形式的表示。

分层softmax函数:赫夫曼树,和树的深度有关,出现频率高的词更靠近根节点

负样本采样:在正确但粗以外进行负采样,随机生成【0,M-1】的int型

14、VC Dimension的公式意义与作用

模型的可学习型,只与数据量与模型复杂度有关----https://wizardforcel.gitbooks.io/ntu-hsuantienlin-ml/content/8.html

VC维

在这张图里,纵轴是错误率(1-精度),横轴是VC维,out-of-sample指的是测试集错误率,越小越好。in-sample-error指的是训练集错误率。

我们可以看出:

  1. VC维跟模型复杂度是正相关的,以至于很多人误解VC维就是模型复杂度,当然这么理解好像也不会有什么不好的后果。
  2. 测试集的错误率一开始很高,随着VC维增大而减小,在dvc∗dvc∗ 达到最小值,然后开始增大。我们就称这个dvcdvc处为这个模型的VC维。
  3. 训练集的错误率一直在减小。

VC维的定义

一个假设空间H的VC dimension,是这个H最多能够shatter掉的点的数量,记为dvc(H)。

  1. 假设空间可以看作模型的复杂度。
  2. shatter翻译成打散,指的是不管数据的分布如何,H都要把它区分开。
  3. “这个H最多能够shatter掉的点的数指的是无论数据的分布如何”,这句话翻译成人话是,不管数据是怎样分布的,H最多能区分多少个数据。我们可以想像,越是复杂的H能够区分的数据点就越多,VC维也就越大。

VC维的大小:与学习算法A无关,与输入变量X的分布也无关,与我们求解的目标函数f 无关。它只与模型假设空间有关。

工业实践中通过引入正则对模型复杂度(VC维)进行控制,平衡这两个问题的矛盾。

VC Dimension就是某假设集H能够shatter的最多inputs的个数,即最大完全正确的分类能力。(注意,只要存在一种分布的inputs能够正确分类也满足)。

shatter的英文意思是“粉碎”,也就是说对于inputs的所有情况都能列举出来。例如对N个输入,如果能够将种情况都列出来,则称该N个输入能够被假设集H shatter。

根据之前break point的定义:假设集不能被shatter任何分布类型的inputs的最少个数。则VC Dimension等于break point的个数减一。

这里写图片描述

这里写图片描述

15、数据异常值的检测方法

首先从统计学意义上,观察均方差,3\delta原则,落在3\delta之外的应该是属于异常离群点;

箱型图,四分位数的上下两侧存在异常值予以剔除,计算第一第四分位数

密度聚类,DBSCAN,存在核心点和边界点,不属于任何团簇的点属于噪声点的范畴。

孤立森林,孤立数是孤立数据点所需的拆分数,异常值与非异常点相比具有更低的孤立数。因此,如果数据点的孤立数低于阈值,则将数据点定义为异常值。

##python直接可以调用
clf = IsolationForest(max_samples=100, random_state=42)

16、 置信度与置信区间

置信区间是我们所计算出的变量存在的范围,置信水平就是我们对于这个数值存在于我们计算出的这个范围的可信程度。
举例来讲,有95%的把握,真正的数值在我们所计算的范围里。
在这里,95%是置信水平,而计算出的范围,就是置信区间。
如果置信度为95%, 则抽取100个样本来估计总体的均值,由100个样本所构造的100个区间中,约有95个区间包含总体均值。

17、K-means的K的确定方法:

基于距离度量和在更新过程中用到梯度更新的模型都需要进行模型归一化和离群点处理等预处理操作。

其中合理选择K值的方法包括:

  1. 根据数据先验知识人为确定K值大小
  2. 基于变化拐点确定----手肘法+Gap Static统计优化函数
  3. 核函数高维映射,在新的特征空间进行聚类
  4. 基于距离度量:引入平均轮廓系数
  5. 基于层次聚类,迭代结束
  • 常见的聚类方法有:k均值、K-means++、层次聚类、密度聚类、GMM(高斯混合)、SMO(自映射神经网络,保持拓扑结构不变)

18、PCA与LDA

PCA是一种线性、非监督、全局的降维方法,对应最大方差投影与最小回归误差。

最大化投影方差就是让数据在主轴上投影的方差最大,即找到一个投影方向,使得各变量在w的投影方差尽可能大。

而且投影存在内积形式,对应协方差矩阵的前n个特征值和特征向量。将n维样本映射到d维实现降维去噪。

PCA最小平方误差,其目标是求解一个线性函数使得对应直线能够更好地拟合样本集合。本质上和最大方差理论是一致的。

LDA是一种有监督的降维方法,最大化类间散度,最小化类内散度,但是存在一些强假设:要求类内数据服从高斯分布且各个类的协方差相等,主要但仍然可以压制噪声。

对应矩阵是SW-1SB最大的特征值,投影方向就是这个特征值对应的特征向量。类内散度矩阵,类间散度矩阵,全局散度矩阵。

19、SVM与LR的区别联系

  • Linear SVM和LR都是线性分类器,但LR可以给出对应类别的输出概率

  • 目标函数来看,区别在于逻辑回归采用的是logistical loss,svm采用的是hinge loss

  • Linear SVM不直接依赖数据分布,分类平面不受一类点影响;LR则受所有数据点的影响,如果数据不同类别strongly unbalance一般需要先对数据做balancing。线性SVM主要依赖于支持向量的作用

  • Linear SVM依赖数据表达的距离测度,所以需要对数据先做normalization归一化;LR其影响不大,只是为了在梯度更新的过程中防止陷入局部最优解而归一化。

  • Linear SVM依赖penalty的系数,实验中需要做validation,数据集规模Kernel SVM 在大规模数据集的情况下基本不实用,但是如果数据集本身比较小而且维度高的的话一般 SVM 表现更好。

  • Linear SVM和LR的performance都会收到outlier的影响,其敏感程度而言,SVM 的优点在于,通过忽略已经分类正确的点,最后训练出来的模型更加稳健,对 outlier 不敏感

20、LR model的推导过程:

LR Model 专场https://www.jianshu.com/p/dce9f1af7bc9

逻辑回归本质上是线性回归,只是在特征到结果的映射中加入了一层逻辑函数g(z),即先把特征线性求和,然后使用函数g(z)作为假设函数来预测。g(z)可以将连续值映射到0 和1。g(z)为sigmoid function.

sigmoid function 的导数如下:

逻辑回归用来分类0/1 问题,也就是预测结果属于0 或者1 的二值分类问题。这里假设了二值满足伯努利分布,也就是

其也可以写成如下的形式:

对于训练数据集,特征数据x={x1, x2, … , xm}和对应的分类标签y={y1, y2, … , ym},假设m个样本是相互独立的,那么,极大似然函数为:

log似然为:

如何使其最大呢?与线性回归类似,我们使用梯度上升的方法(求最小使用梯度下降),那么


如果只用一个训练样例(x,y),采用随机梯度上升规则,那么随机梯度上升更新规则为:

损失函数:

LR加正则化项:

  • 实际应用时,由于我们数据的维度可能非常高,L1正则化因为能产生稀疏解,使用的更为广泛一些。
  • LR model也可以加l2正则项,和svm类似,加l2正则项可以用核方便处理,方便解决不可分问题

LR解决线性不可分问题:

(1)利用特殊核函数,对特征进行变换:把低维空间转换到高维空间,而在低维空间不可分的数据,到高维空间中线性可分的几率会高一些。
(2)扩展LR算法,提出FM算法。

LR model 用于特征组合:

把特征离散化,然后做组合特征,可以实现一定程度的非线性

在LR中,我们可以通过在基本线性回归模型的基础上引入交叉项,来实现非线性分类,如下:

但是这种直接在交叉项xixj的前面加上交叉项系数wij的方式在稀疏数据的情况下存在一个很大的缺陷,即在对于观察样本中未出现交互的特征分量,不能对相应的参数进行估计。
即,在数据稀疏性普遍存在的实际应用场景中,二次项参数的训练是很困难的。其原因是,每个参数 wij的训练需要大量xi和 xj都非零的样本;由于样本数据本来就比较稀疏,满足xi 和 xj都非零”的样本将会非常少。训练样本的不足,很容易导致参数 wij 不准确,最终将严重影响模型的性能。

为什么LR可以用来做CTR预估

1. LR是线性模型,具有很好的可解释性,分布式计算迭代速度快。
2. LR可以很好的利用正则化解决稀疏性问题,尤其特征维数非常大,大到千亿级别。。
3. LR可以输出概率,天然适合Ranking.

4. 离散特征比较好,LR也可以做特征选择
逻辑回归与线性回归

都是一种广义线性模型(generalized linear model)。逻辑回归假设因变量 y 服从伯努利分布,而线性回归假设因变量 y 服从高斯分布。 因此与线性回归有很多相同之处,去除Sigmoid映射函数的话,逻辑回归算法就是一个线性回归。可以说,逻辑回归是以线性回归为理论支持的,但是逻辑回归通过Sigmoid函数引入了非线性因素,因此可以轻松处理0/1分类问题

LR满足伯努利分布,而伯努利分布可以转化为指数分布,只要类条件概率满足指数分布的,其后验都可以写成sigmoid函数的形式

21、朴素贝叶斯思考:

朴素贝叶斯:https://zhuanlan.zhihu.com/p/107725697

避免陷入局部最优解:

1、学习率调整:重新把已经调整的很小的学习率数值放大,强行逼迫优化算法跳出此刻找到的鞍点或者极值点

2、以多组不同参数值初始化多个神经网络,按标准方法训练后,取其中误差最小的解作为最终参数,这相当于从多个不同的初始化点开始搜索,从而可能寻找全局最优。

3、使用模拟退化技术,模拟退火在每一步都以一定的概率接受比当前解更差的结果,从而有助于“跳出”局部极小。在每步迭代过程中,接受“次优解”的概率随着时间的推移而逐渐降低,从而保证算法的稳定。

 

22、时间序列预测:

https://zhuanlan.zhihu.com/p/50741970

1、视频数据的二八效应和长尾原则,利用优酷这些大平台电视剧的播放收益都交给制片方,但是像抖音快手这样的短视频app提供的优质内容都比较分散,但是最终的蚂蚁视频聚合起来,播放量就会特别大,包括蚂蚁金服,其实长尾原则更能体现平台的重要性和网站的相对优势地位。

如何处理:对数变化,box-cox变化,因为数据足够多的时候倾向于正态分布,因为本身公司的数据源是足够多的,但由中心极限定理可知是不用处理的取对数是为了使数据尽量服从正态分布,其次是为了避免模型构建后出现异方差问题

2、趋势部分经过预处理(取对数和差分平稳的方法),再次通过ARIMA模型进行建模仿真,最后预测数据由趋势部分的建模结果累加周期部分。

ARIMA模型的思想就是从历史的数据中学习到随时间变化的模式,学到了就用这个规律去预测未来。

ARIMA(p,d,q)模型,其中 d 是差分的阶数,用来得到平稳序列:

AR:当前值只是过去值的加权求和。

MA:过去的白噪音的移动平均。

ARMA:AR和MA的综合。

 

23、熵和交叉熵

https://www.zhihu.com/people/ju-zhen-li-lun-he-ji-suan-fang-fa

香农提出了熵的定义:无损编码事件信息的最小平均编码长度。如果熵比较大(即平均编码长度较长),意味着这一信息有较多的可能状态,相应的每个状态的可能性比较低;因此每当来了一个新的信息,我们很难对其作出准确预测,即有着比较大的混乱程度/不确定性/不可预测性。

上文中已知一个离散变量 i 的概率分布P(i),熵的公式可以表示为:

在熵的公式中,对于离散变量和连续变量,我们都是计算了 负的可能性的对数 的期望,代表了该事件理论上的平均最小编码长度,所以熵的公式也可表示如下,公式中的x~P代表我们使用概率分布P来计算期望,熵又可以简写为H:

交叉熵利用观测到的假设分布去预估拟合真实分布,因此给出了观测和真实分布之间的差距
 

在二分类模型中,标签只有是和否两种;这时,可以使用二分类交叉熵作为损失函数。假设数据集中只有猫和狗的照片,则交叉熵公式中只包含两种可能性:

又因为:

所以交叉熵可以表示为:

使用如下定义:

二分类的交叉熵可以写作如下形式,看起来就熟悉多了。

 

24、GDBT比xgboost的优点在哪里?(反向思考)

xgboost引入L2正则化,在叶子结点的打分函数上会输出L2的平滑项。更多的一般是xgboost的优点,没有免费的午餐,没有一种模型是绝对意义上的优势,gbdt因为只利用一阶导数,而xgboost需要二阶展开,计算二阶海森矩阵的收敛过程,如果目标损失函数在一阶导对收敛的速度远远高于二阶导的情况下,那么在计算二阶导带来的增益远远不够支付额外计算海森矩阵带来的开销的话,可以选择一阶残差拟合网络GBDT。

同时一般的优势在于GBDT对于硬件的要求也会低一些,收敛和训练速度更快一些,不需要预排序和block的存储情况。

(二)XGBOOST正则项里包含了树的叶子节点个数、叶子节点权重的 范式。正则项降低了模型的方差,使学习出来的模型更加简单,有助于防止过拟合

这个公式形式上跟ID3算法、CART算法是一致的,都是用分裂后的某种值减去分裂前的某种值,从而得到增益。为了限制树的生长,我们可以加入阈值,当增益大于阈值时才让节点分裂,上式中的gamma即阈值,它是正则项里叶子节点数T的系数,所以xgboost在优化目标函数的同时相当于做了预剪枝。另外,上式中还有一个系数lambda,是正则项里leaf score的L2模平方的系数,对leaf score做了平滑,也起到了防止过拟合的作用,这个是传统GBDT里不具备的特性。

GBDT还有一个缺点是不能利用mini_batch的方式进行训练,这样的话需要将所有数据进行全部加载,对内存的要求过高。

 

25、gbm与xgboost有哪些可以融合的点可以考虑?

LightGBM使用的是histogram算法,基本思想是先把连续的浮点特征值离散化成k个整数,同时构造一个宽度为k的直方图。在遍历数据的时候,根据离散化后的值作为索引在直方图中累积统计量,当遍历一次数据后,直方图累积了需要的统计量,然后根据直方图的离散值,遍历寻找最优的分割点;

优点在于决策树生长策略上:leaf-wise生长策略、histogram 做差加速、直接支持类别特征(一vs多)

特征并行的主要思想是在不同机器在不同的特征集合上分别寻找最优的分割点,然后在机器间同步最优的分割点。

数据并行则是让不同的机器先在本地构造直方图,然后进行全局的合并,最后在合并的直方图上面寻找最优分割点。

 

模型融合:Lightgbm在特征和数据尺度上都有并行的机制存在,同时有特征直方图的构建以及深度扩展和父节点做差策略的存在,可以保证树的快速分裂,但是在构建直方图的时候在特征尺度上会损失一定的精度,因此在前期特征量很大的时候可以选择gbm模型预测,而后对特征进行筛选后在后面模型中选择xgb进行贪心算法的分类。

同时对于跨模型的重复特征应用也是在stacking模型融合时可以改进的一个点。

 

26、CART回归树与缺点反思

CART是后剪枝,损失函数是带正则化的对数似然函数,后剪枝的a对应正则化过程,也有控制树的深度和过拟合的机制在的

分类树采用基尼指数,回归树采用均方差来计算,分类和回归任务不同,一个是离散值,一个是连续值

1)无论是ID3, C4.5还是CART,在做特征选择的时候都是选择最优的一个特征来做分类决策,但是大多数,分类决策不应该是由某一个特征决定的,而是应该由一组特征决定的。这样决策得到的决策树更加准确。这个决策树叫做多变量决策树(multi-variate decision tree)。在选择最优特征的时候,多变量决策树不是选择某一个最优特征,而是选择最优的一个特征线性组合来做决策。这个算法的代表是OC1,这里不多介绍。

2)如果样本发生一点点的改动,就会导致树结构的剧烈改变。这个可以通过集成学习里面的随机森林之类的方法解决。 

泛化能力强也是选择决策树作为基分类器的一个重要原因。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值