文章目录
- 特征工程
- 为什么要归一化
- 类别型特征编码
- 如何处理高维组合特征
- 常见距离度量方式有哪些?
- 文本表示模型有什么?
- 图像数据不足时的处理方法
- 缺失值如何处理?
- 模型评估
- 有哪些常见的评价指标
- 准确率的局限性
- RMSE指标居高不下的原因(95%的时间区间表现很好)
- 谈谈ROC曲线
- ROC和P-R比有何特点?
- 为什么AUC可以不受正负样本比例影响
- 哪些场景要用余弦相似度而不是欧氏距离,为何?
- 离线测试很充分,为何还要A/B测试
- 如何进行A/B测试
- 模型评估过程,有哪些主要的验证方法
- 模型优化
- 损失函数有哪些
- sigmoid优缺点:
- 超参数有哪些调优方法
- 损失优化方法
- 类别不平衡
- 哪些方法解决类别不平衡问题
- 欠采样
- 过采样
- 代价敏感学习
- 不平衡学习的评价方法
- 如何选择方法
- 生成判别模型
- 简述区别
- 常见的算法哪些是判别/生成模型
- 逻辑回归LR
- 损失公式推导
- 为什么逻辑回归采用似然函数,而不是平方损失函数?
- 缺点
- LR和SVM的联系与区别
- 并行化怎么做,有几种并行化方式,读过哪些开源的实现
- SVM
- 垂线距离推导
- 拉格朗日量
- 对偶
- SVM初始问题变换
- SVM对偶问题
- 线性不可分怎么办
- 过拟合
- 过拟合的原因和解决方法
- 什么是正则化?简述一下范数的意义是?
- L1,L2正则化的原理和区别?为什么L1正则化会产生稀疏解而L2正则化会产生平滑解?
- L1和L2除了正则化防止过拟合还有什么作用
- L1正则(lasso回归)不是连续可导的,那么还能用梯度下降么,如果不能的话如何优化求解
- Ridge和Lasso的实现,他们的区别是什么?分别是如何求解的?
- Dropout的原理 (为什么训练时有dropout测试时没有dropout,这样会发生scale的偏移吗)
- 决策树
- 决策树有哪几种?
- ID3算法存在的问题
- 决策树出现过拟合的原因及其解决办法?
- 简单解释一下预剪枝和后剪枝,以及剪枝过程中可以参考的参数有哪些?
- PCA
- 为什么要算协方差矩阵呢?
- PCA算法两种实现方法
- svd和特征分解的区别
- LDA
- LDA和PCA的区别
- LDA原理
- 贝叶斯分类器
- 问几个概率知识
- 朴素贝叶斯有什么假设
- 朴素贝叶斯与LR的区别
- 朴素贝叶斯的优缺点
- 隐马尔可夫HMM
- EM算法
- 极大似然估计是什么
- 随机森林
- RF算法的优缺点
- 提升树(Boosting Tree)
- 在每一轮如何改变训练数据的权值或概率分布?
- 如何将弱分类器组合成一个强分类器?
- 提升树与GBDT之间的关系?
- 梯度提升(Gradient Boosting)
- 梯度提升和提升树的区别和联系
- 梯度提升与梯度下降的区别和联系是什么?
- 梯度提升和GBDT的区别和联系?
- 梯度提升原理推导
- 梯度提升算法包含哪些算法?
- GBDT
- gbdt中的树是回归树还是分类树?
- 简述gbdt 的算法的流程
- gbdt 如何选择特征 ?
- gbdt 如何用于分类?
- gbdt的效果相比于传统的LR,SVM效果为什么好一些 ?
- gbdt的参数有哪些,如何调参 ?
- gbdt的优缺点 ?GBDT优缺点
- RF和GBDT的区别
- 比较LR和GBDT,说说什么情景下GBDT不如LR
- 与传统的Boost的区别是
- GBDT的正则化
- GBDT与AdaBoost的区别与联系?
- gbdt二分类的负梯度怎么算
- XGBoost
- 简单介绍一下XGBoost
- XGBoost与GBDT有什么不同
- XGBoost为什么使用泰勒二阶展开
- XGBoost为什么可以并行训练
- XGBoost为什么快
- XGBoost防止过拟合的方法
- XGBoost如何处理缺失值
- XGBoost中的一棵树的停止生长条件
- XGBoost如何处理不平衡数据
- XGBoost中如何对树进行剪枝
- XGBoost如何选择最佳分裂点?
- XGBoost如何评价特征的重要性
- XGBooost参数调优的一般步骤
- XGBoost模型如果过拟合了怎么解决
- 为什么XGBoost相比某些模型对缺失值不敏感
- LightGBM
- XGBoost的缺点
- XGBoost和LightGBM的区别
- CatBoost
- 与XGBoost、LightGBM相比,CatBoost的创新点是什么
特征工程
为什么要归一化
归一化可以提高收敛速度,提高收敛的精度
归一化:最大值、均值
标准化:Z-score
离散化:分段,等频等距
类别型特征编码
- 序号编码
适合有大小关系的 - 独热编码
- 使用稀疏向量节省空间
- 配合特征选择来降低维度
- 二进制编码
本质是利用二进制进行哈希映射
如何处理高维组合特征
将用户和物品分别用k维的低维向量表示。
mn —> mk + n*k
(其实就是推荐中的矩阵分解)
常见距离度量方式有哪些?
文本表示模型有什么?
- 词袋模型,忽略词的顺序,权重是tf-idf
- n-gram模型,连续出现的单词组成词组。优点在于它包含了前N-1个词所能提供的全部信息,这些词对于当前词的出现具有很强的约束力,然而它的缺点是需要相当规模的训练文本来确定模型的参数。当N很大时,模型的参数空间过大。
- 主题模型:能够计算出每篇文章的主题分布
- 词嵌入模型:word2vec将词映射成K维的向量。有两种网络结构,分别是CBOW(上下文预测一个词)和Skip-gram(一个词预测上下文)。损失函数一般用交叉熵
图像数据不足时的处理方法
- 一定程度内的随机旋转、平移、缩放、裁剪、填充、左右翻转
- 对图像中的像素加噪声扰动,比如高斯白噪声
- 颜色变换
- 改变图像的亮度、清晰度、对比度等
- 生成对抗模型
缺失值如何处理?
删除:
填补:离散的用众数、连续的取平均数
模型评估
有哪些常见的评价指标
(1)错误率(Error rate)和精度(Accuracy)
(2)查准率(准确率-Precision)、查全率(召回率-Recall)
(3)P-R曲线、平衡点和F1衡量
(4)ROC、AUC
前三类指标的详细介绍
ROC、AUC详细介绍
准确率的局限性
accuracy=correct/total
缺点:当样本比例非常不均衡时,占比大的类别会成为影响准确率的最主要因素。当负样本只有1%,即使全部判为负也可以实现99%的准确率。
RMSE指标居高不下的原因(95%的时间区间表现很好)
离群点是很可能的原因。事实上流量预估问题中,噪声是很容易出现的(刚上映的热播剧,突发事件)
- 过滤离群点
- 更改评价指标:平均绝对百分比误差MAPE(归一化)
谈谈ROC曲线
roc曲线经常作为评估二分类最重要的指标之一
roc曲线的横坐标是假阳性率:FP/N
纵坐标是真阳性率: TP/P
AUC就是ROC曲线的面积,越大越好
ROC和P-R比有何特点?
当正负样本分布发生变化时,ROC曲线形状基本不变,PR会发生剧烈变化。
ROC曲线不局限于特定数据集,广泛应用于排序、推荐、广告领域。
如果研究者更希望看到特定数据集的表现,可选用PR
为什么AUC可以不受正负样本比例影响
这个问题的本质原因,在于横轴FPR只关注负样本,与正样本无关;纵轴TPR只关注正样本,与负样本无关。所以横纵轴都不受正负样本比例影响,积分当然也不受其影响。
哪些场景要用余弦相似度而不是欧氏距离,为何?
在文本、图像、视频等领域,对象的特征维度往往很高,适合余弦,欧式距离的数值受维度的影响。
比如用户观看行为A(1,0),B(0,1)就要用余弦,而分析用户活跃度时以登陆次数和平均时长作为特征时,A(1,10),B(10,100)就要用欧氏距离。
离线测试很充分,为何还要A/B测试
- 离线评估无法完全消除模型过拟合的影响
- 无法完全还原线上的工程环境
- 某些商业指标无法在离线计算。比如离线是roc、pr曲线,线上会考虑ctr、留存时长、pv访问量等变化
如何进行A/B测试
主要手段是用户分桶,分为实验组和对照组,分桶要注意样本的独立性和采样方式的无偏性,userid需要是随机数。
模型评估过程,有哪些主要的验证方法
- Holdout方法:样本7-3分,7训练,3验证。缺点是最后算出来的指标与原始分组有很大关系,随机性太大。
- 交叉检验:k折交叉验证k经常取10;留一验证(开销太大了,很少使用)
- 自助法:样本规模小的时候,还要从中划分测试集会使得训练集更少,自助法可以解决该问题。n次有放回的采样,最终将没有抽出的样本作为验证集。(当样本数很大时,有大约1/e的样本从未被选择过)
模型优化
损失函数有哪些
- sgd
- 动量(Momentum)
- AdaGrad
- RMSProp
- Adam优化器
结合AdaGrad和RMSProp两种优化算法的优点。对梯度的一阶矩估计(First Moment Estimation,即梯度的均值)和二阶矩估计(Second Moment Estimation,即梯度的未中心化的方差)进行综合考虑,计算出更新步长。
由于m0初始化为0,会导致mt偏向于0,尤其在训练初期阶段。所以,此处需要对梯度均值mt进行偏差纠正,降低偏差对训练初期的影响
sigmoid优缺点:
- 优点:
数据压缩能力,将数据规约在[0,1]之间
导数计算方便 - 缺点:
存在梯度消失问题,当x稍大的情况就接近于一条水平线
zigzag问题,非0中心化,在神经网络算法等情况下,造成反向传播时权重的全正全负的情况。
超参数有哪些调优方法
- 网格搜索
- 随机搜索
- 贝叶斯优化算法
损失优化方法
问题:
- 如何选择合适的learning_rate。自始至终保持同样的学习率显然是不太合适的,开始学习参数的时候,距离最优解比较远,需要一个较大的学习率能够快速的逼近最优解。当参数接近最优解时,继续保持最初的学习率,容易越过最优点,在最优点附近震荡。
- 如何对参数选择合适的学习率。对每个参数都保持的同样的学习率也是很不合理的。有些参数更新频繁,那么学习率可以适当小一点。有些参数更新缓慢,那么学习率就应该大一点。
类别不平衡
细节可以参考
哪些方法解决类别不平衡问题
- 欠采样
- 过采样
- 代价敏感学习
- 不均衡学习的评价方法
欠采样
直接对训练集中多数类样本进行“欠采样”
- 随机欠采样方法
会造成一些信息缺失,即将多数类样本删除有可能会导致分类器丢失有关多数类的重要信息 - 欠采样代表性算法-EasyEnsemble
(1)从多数类中有放回的随机采样n次,每次选取与少数类数目相近的样本个数,那么可以得到n个样本集合记作。
(2)然后,将每一个多数类样本的子集与少数类样本合并并训练出一个模型,可以得到n个模型。
(3)最终将这些模型组合形成一个集成学习系统,最终的模型结果是这n个模型的平均值。 - 欠采样代表性算法-BalanceCascade
BalanceCascade算法基于Adaboost,将Adaboost作为基分类器,其核心思路是:
(1)在每一轮训练时都使用多数类与少数类数量相等的训练集,训练出一个Adaboost基分类器。
(2)然后使用该分类器对全体多数类进行预测,通过控制分类阈值来控制假正例率(False Positive Rate),将所有判断正确的类删除。
(3)最后,进入下一轮迭代中,继续降低多数类数量。
过采样
对训练集里的少数类进行“过采样”(oversampling),即增加一些少数类样本使得正、反例数目接近,然后再进行学习
- 随机过采样方法
模型训练复杂度加大,容易造成模型的过拟合问题 - 过采样代表性算法-SMOTE
(1).对于少数类中的每一个样本,以欧氏距离为标准计算它到少数类样本集中所有样本的距离,得到其k近邻。
(2).根据样本不平衡比例设置一个采样比例以确定采样倍率N,对于每一个少数类样本,从其k近邻中随机选择若干个样本,假设选择的是。
(3).对于每一个随机选出来的近邻,分别与按照如下公式构建新的样本。
代价敏感学习
采样算法从数据层面解决不平衡数据的学习问题;在算法层面上解决不平衡数据学习的方法主要是基于代价敏感学习算法
- 代价矩阵
为了权衡不同类型错误所造成的不同损失,可为错误赋予“非均等代价”
代价敏感学习方法的核心要素是代价矩阵
- 代价敏感学习方法
基于以上代价敏感矩阵的分析,代价敏感学习方法主要有以下三种实现方式
(1)从学习模型出发,对某一具体学习方法的改造,使之能适应不平衡数据下的学习,研究者们针对不同的学习模型如感知机、支持向量机、决策树、神经网络等分别提出了其代价敏感的版本。以代价敏感的决策树为例,可以从三个方面对其进行改造以适应不平衡数据的学习,这三个方面分别是决策阈值的选择方面、分裂标准的选择方面、剪枝方面,这三个方面都可以将代价矩阵引入
(2).从贝叶斯风险理论出发,把代价敏感学习看成是分类结果的一种后处理,按照传统方法学习到一个模型,以实现损失最小为目标对结果进行调整,优化公式如下所示。此方法的优点在于它可以不依赖所用的具体分类器,但是缺点也很明显,它要求分类器输出值为概率。
(3)从预处理的角度出发,将代价用于权重调整,使得分类器满足代价敏感的特性,下面讲解一种基于Adaboost的权重更新策略AdaCost算法
AdaCost算法修改了Adaboost算法的权重更新策略,其基本思想是对代价高的误分类样本大大地提高其权重,而对于代价高的正确分类样本适当地降低其权重,使其权重降低相对较小。总体思想是代价高样本权重增加得大降低的慢
不平衡学习的评价方法
- F1度量
- ROC曲线和AUC面积
ROC曲线和AUC面积可以很好的评价不平衡数据的模型表现 - G-Mean
如何选择方法
(1)在正负样本都非常少的情况下,应该采用数据合成的方式,例如:SMOTE算法
(2)在正负样本都足够多且比例不是特别悬殊的情况下,应该考虑采样的方法或者是加权的方法。
生成判别模型
简述区别
判别式模型和生成式模型都是使后验概率最大化,判别式是直接对后验概率建模,而生成式模型通过贝叶斯定理这一“桥梁”使问题转化为求联合概率
常见的算法哪些是判别/生成模型
- 判别模型:
- 逻辑回归
- SVM
- CART树
- 神经网络
- 高斯过程
- 条件随机场CRF
- 生成模型
- 朴素贝叶斯
- K近邻
- 隐马尔可夫模型
- LDA主题模型
逻辑回归LR
损失公式推导
为什么逻辑回归采用似然函数,而不是平方损失函数?
这个式子的更新速度只和xi,yi相关。和sigmoid函数本身的梯度无关,这样更新的速度是可以自始至终都比较的稳定。至于为什么不用平方损失函数,使用平方损失函数的话梯度更新的速度和sigmod函数本身的梯度是很相关的。sigmod函数在它在定义域内的梯度都不大于0.25。这样训练会非常的慢
缺点
- 准确率并不是很高。因为形式非常的简单(非常类似线性模型),很难去拟合数据的真实分布。
- 很难处理数据不平衡的问题。举个例子:如果我们对于一个正负样本非常不平衡的问题比如正负样本比 10000:1.我们把所有样本都预测为正也能使损失函数的值比较小。但是作为一个分类器,它对正负样本的区分能力不会很好。
- 处理非线性数据较麻烦。逻辑回归在不引入其他方法的情况下,只能处理线性可分的数据,或者进一步说,处理二分类的问题 。
- 逻辑回归本身无法筛选特征。有时候,我们会用gbdt来筛选特征,然后再上逻辑回归
LR和SVM的联系与区别
联系:
1、LR和SVM都可以处理分类问题,且一般都用于处理线性二分类问题(在改进的情况下可以处理多分类问题)
2、两个方法都可以增加不同的正则化项,如l1、l2等等。所以在很多实验中,两种算法的结果是很接近的。
区别:
1、LR是参数模型,SVM是非参数模型。
2、从目标函数来看,区别在于逻辑回归采用的是logistical loss,SVM采用的是hinge loss,这两个损失函数的目的都是增加对分类影响较大的数据点的权重,减少与分类关系较小的数据点的权重。
3、支持向量机只考虑局部的边界线附近的点,而逻辑回归考虑全局(远离的点对边界线的确定也起作用)
4、SVM的损失函数就自带正则。
5、logic 能做的 svm能做,但可能在准确率上有问题,svm能做的logic有的做不了。
并行化怎么做,有几种并行化方式,读过哪些开源的实现
将M个样本的标签构成一个M维的标签向量,M个N维特征向量构成一个M*N的样本矩阵,如图3所示。其中特征矩阵每一行为一个特征向量(M行),列为特征维度(N列)
SVM
SVM1
垂线距离推导
拉格朗日量
最优规划大体分两种,无约束规划和约束规划 ,拉格朗日量可以将“约束”转换成“无约束”
对偶
- 弱对偶
- 在实际问题中,如果有以下三个额外条件,我们有强对偶等式
(1)原始问题的目标函数是凸函数 (convex)
(2)原始问题有解 (feasible solution)
(3)线性限制条件 (linear constraints)
SVM初始问题变换
关系式 y ( i ) ( w T x ( i ) + b ) > 0 y ( i ) ( w T x ( i ) + b ) > 0 y ( i ) ( w T x ( i ) + b ) > 0 y(i)(wTx(i)+b)>0y(i)(wTx(i)+b)>0 y(i)(w^Tx(i) + b) > 0 y(i)(wTx(i)+b)>0y(i)(wTx(i)+b)>0y(i)(wTx(i)+b)>0y(i)(wTx(i)+b)>0 永远成立。
在 m 点中,离超平面 h 最近点的距离,也就是间隔
在 SVM 问题中,我们不但希望要最大化 margin,还希望每个点都有分类正确,因为我们要解决下面优化问题
目标函数是个二次凸函数,非常适合做优化;但是限制条件里面有 min 出现,给优化问题造成了难度。因此我们将这一个带 min 的限制条件转换成 m 个“更松”的限制条件,如下
最终要解决的问题是:
SVM对偶问题
hard-margin SVM 的对偶问题
根据附录1的详细推导,我们得到标准化 hard-margin SVM 的对偶问题
原始问题是通过求 b 和 w 来最小化目标函数,而对偶问题是通过求 α 来最小化目标函数,其矩阵形式为
此问题也是一个二次规划问题,虽然可以用 KKT 手动解出,但通常还是利用软件里面自带的函数去解
附录一:
要从 x 空间转换成 z 空间,就必须要从计算 xTx’ 到计算 zTz’
定义K(x, x’) = zTz’ 为核函数
巧妙定义函数可以非常容易计算出来
线性不可分怎么办
过拟合
过拟合是方差大,欠拟合是偏差大
过拟合的原因和解决方法
-
产生过拟合原因:
参数太多,模型复杂度高
样本中噪音数据较大,模型学习到了噪音中的特征
对于决策树模型。对决策树的生长没有合理的限制和修建
对于神经网络模型。权值学习迭代次数足够多(overtraining),拟合了训练数据中的噪声和训练样例中没有代表性的特征。 -
解决方案:
降低模型复杂度
增大训练集,训练集增加之后就能学习到更多具有代表性的特征
增加正则项,减少参数,进一步降低模型复杂度
对于神经网络,采用dropout
对于决策树,采用earlystopping,模型对训练数据集迭代收敛之前停止,防止过拟合
采用ensemble。集成学习可以有效的减轻过拟合。bagging通过平均多个模型的结果,来降低模型的方差。boosting不仅可以减小偏差,还可以减小方差。
什么是正则化?简述一下范数的意义是?
正则化就是结构风险最小化策略的实现,是在经验风险最小化的情况下加入一个正则化项或者罚项。
范数是一种用来度量某个向量空间(或矩阵)中的每个向量的长度或大小的手段。
L1,L2正则化的原理和区别?为什么L1正则化会产生稀疏解而L2正则化会产生平滑解?
正则化是结构风险最小化策略的实现,L1和L2正则化属于正则化手段中的两种实现方式,L1正则化是在损失函数中加入 参数向量中各个元素的绝对值之和作为损失函数的惩罚项的,L2正则化是在损失函数中加入 参数向量中各个元素的平方,求和,然后再求平方根作为损失函数的惩罚项的。这就是二者的原理与区别。
L1正则化代表的约束条件的多维空间是超立方体和坐标轴存在很多“角”交点,目标函数大部分时候会在“角”的地方和约束条件相交,所以L1正则化容易产生稀疏的参数向量,而L2正则化是一个超球体,因为没有“角”交点,所以第一次相交的地方出现在具有稀疏性的位置的概率就变得非常小了,所以L2正则化容易产生平滑的参数向量。
L1就是按绝对值函数的“坡”下降的,而L2是按二次函数的“坡”下降。所以实际上在0附近根据其梯度,L1的下降速度比L2的下降速度要快
L1和L2除了正则化防止过拟合还有什么作用
防止过拟合的具体表现:在不显著增大偏差的的同时,显著减小模型的方差
L1正则化除了防止过拟合还可以作为特征筛选的方法,使得对模型不是太重要的特征的权重系数趋于0,那么我们就可以根据具体情况来对特征进行删除和重选择,从而起到提高泛化性能以及节约内存空间,提升运行效率的作用。
L1正则(lasso回归)不是连续可导的,那么还能用梯度下降么,如果不能的话如何优化求解
由于lasso回归的损失函数是不可导的,所以梯度下降算法将不再有效,下面利用坐标轴下降法进行求解。
坐标轴下降法和梯度下降法具有同样的思想,都是沿着某个方向不断迭代,但是梯度下降法是沿着当前点的负梯度方向进行参数更新,而坐标轴下降法是沿着坐标轴的方向
-
坐标轴下降法进行参数更新时,每次总是固定另外m-1个值,求另外一个的局部最优值,这样也避免了Lasso回归的损失函数不可导的问题。
-
坐标轴下降法每轮迭代都需要O(mn)的计算。(和梯度下降算法相同)
Ridge和Lasso的实现,他们的区别是什么?分别是如何求解的?
Ridge=线性回归+L2正则,有闭合解;Lasso=线性回归+L1正则,无闭合解,可用坐标梯度下降求解
Dropout的原理 (为什么训练时有dropout测试时没有dropout,这样会发生scale的偏移吗)
不会,因为训练时dropout机制会把dropout_rate = p的输出乘以1/(1-p)
决策树
决策树有哪几种?
决策树算法,无论是哪种,其目的都是为了让模型的不确定性降低的越快越好,基于其评价指标的不同,主要是ID3算法,C4.5算法和CART算法,其中ID3算法的评价指标是信息增益,C4.5算法的评价指标是信息增益率,CART算法的评价指标是基尼系数。
ID3:
C4.5:
CART:
ID3算法存在的问题
会倾向于去选择特征取值比较多的特征作为最优特征。举个比较极端的例子,如果将身份证号作为一个属性,这个属性可以完美划分但是毫无意义
信息增益率的公式如下:
决策树出现过拟合的原因及其解决办法?
原因:
- 在决策树构建的过程中,对决策树的生长没有进行合理的限制(剪枝);
- 样本中有一些噪声数据,没有对噪声数据进行有效的剔除;
- 在构建决策树过程中使用了较多的输出变量,变量较多也容易产生过拟合
解决办法: - 选择合理的参数进行剪枝,可以分为预剪枝和后剪枝,我们一般采用后剪枝的方法;
- 减少特征,计算每一个特征和响应变量的相关性,常见得为皮尔逊相关系数,将相关性较小的变量剔除。当然还有一些其他的方法来进行特征筛选,比如基于决策树的特征筛选,通过正则化的方式来进行特征选取等。
简单解释一下预剪枝和后剪枝,以及剪枝过程中可以参考的参数有哪些?
- 预剪枝:在决策树生成初期就已经设置了决策树的参数,决策树构建过程中,满足参数条件就提前停止决策树的生成。
- 后剪枝:后剪枝是一种全局的优化方法,它是在决策树完全建立之后再返回去对决策树进行剪枝。
- 参数:树的高度、叶子节点的数目、最大叶子节点数、限制不纯度。
PCA
为什么要算协方差矩阵呢?
这时就要想起我们之前的目的:在降维后的每一维度上,方差最大。而方差最大,则容易想到的就是协方差矩阵,去中心化后,协方差矩阵的对角线上的值正好就是各个数据维度的方差
PCA算法两种实现方法
svd和特征分解的区别
LDA
LDA和PCA的区别
若使用PCA将数据点投影至一维空间上时,PCA会选择2轴,这使得原本很容易区分的两簇点被揉杂在一起变得无法区分;而这时若选择1轴将会得 到很好的区分结果
- PCA是无监督线性降维方法,LDA是有监督的线性降维算法
- 不同于PCA方差最大化理论,LDA算法的思想是将数据投影到低维空间之后,使得同一类数据尽可能的紧凑,不同类的数据尽可能分散
LDA原理
LDA原理
降维之后的维数最多为类别数-1。所以当数据维度很高,但是类别数少的时候,算法并不适用
贝叶斯分类器
问几个概率知识
- 先验概率:是指根据以往经验和分析得到的概率
举个例子:如果我们对西瓜的色泽、根蒂和纹理等特征一无所知,按照常理来说,西瓜是好瓜的概率是60%。那么这个概率P(好瓜)就被称为先验概率。 - 后验概率:事情已经发生,要求这件事情发生的原因是由某个因素引起的可能性的大小
后验概率类似于条件概率。 - 全概率:
比如: - 贝叶斯定理:
朴素贝叶斯有什么假设
采用了“属性条件独立性假设”:对已知类别,假设所有属性相互独立。换言之,假设每个属性独立地对分类结果发生影响。
朴素贝叶斯与LR的区别
- 朴素贝叶斯是生成模型,根据已有样本进行贝叶斯估计学习出先验概率P(Y)和条件概率P(X|Y),进而求出联合分布概率P(XY),最后利用贝叶斯定理求解P(Y|X), 而LR是判别模型,根据极大化对数似然函数直接求出条件概率P(Y|X);
- 朴素贝叶斯是基于很强的条件独立假设(在已知分类Y的条件下,各个特征变量取值是相互独立的),而LR则对此没有要求;
- 朴素贝叶斯适用于数据集少的情景,而LR适用于大规模数据集
朴素贝叶斯的优缺点
优点:对小规模的数据表现很好,适合多分类任务,适合增量式训练。
缺点:对输入数据的表达形式很敏感(离散、连续,值极大极小之类的)。
隐马尔可夫HMM
用来描述一个含有隐含未知参数的马尔可夫过程。其难点是从可观察的参数中确定该过程的隐含参数
HMM
可见状态链/隐含状态链
预测过程比较简单,就是利用维特比算法。我们先以分词为例说明维特比要做的事情。给定一个观测的序列如“北京信息科技大学”,利用维特比算法,系统可以求出一个最佳的状态序列比如是“BEBEBEBE”。
EM算法
EM(Expectation-Maximum)算法也称期望最大化算法,常被用来学习高斯混合模型(Gaussian mixture model,简称GMM)的参数;隐式马尔科夫算法(HMM)、LDA主题模型的变分推断等等
极大似然估计是什么
我们已知的条件有两个:样本服从的分布模型、随机抽取的样本。我们需要求解模型的参数。根据已知条件,通过极大似然估计,求出未知参数。总的来说:极大似然估计就是用来估计模型参数的统计学方法
多数情况下,我们是根据已知条件来推算结果,而极大似然估计是已知结果,寻求使该结果出现的可能性最大的条件,以此作为估计值
随机森林
RF算法的优缺点
优点:1、在数据集上表现良好,相对于其他算法有较大的优势(训练速度、预测准确度);2、能够处理很高维的数据,并且不用特征选择,而且在训练完后,给出特征的重要性;3、容易做成并行化方法。
缺点:在噪声较大的分类或者回归问题上会过拟合。
提升树(Boosting Tree)
流程和实际例子
在每一轮如何改变训练数据的权值或概率分布?
AdaBoost的做法是,提高那些被前一轮弱分类器错误分类样本的权值,而降低那些被正确分类样本的权值。这样一来,那些没有得到正确分类的数据,由于其权值的加大而受到后一轮的弱分类器的更大关注。于是,分类问题被一系列的弱分类器“分而治之”。
如何将弱分类器组合成一个强分类器?
弱分类器的组合,AdaBoost采取加权多数表决的方法。具体地,加大分类误差率小的弱分类器的权值,使其在表决中起较大的作用,减小分类误差率大的弱分类器的权值,使其在表决中起较小的作用
提升树与GBDT之间的关系?
提升树模型每一次的提升都是靠上次的预测结果与训练数据中label值的差值作为新的训练数据进行重新训练,由于原始的回归树指定了平方损失函数所以可以直接计算残差,而梯度提升决策树(Gradient Boosting Decision Tree, GDBT)针对的是一般损失函数,所以采用负梯度来近似求解残差,将残差计算替换成了损失函数的梯度方向,将上一次的预测结果带入梯度中求出本轮的训练数据。这两种模型就是在生成新的训练数据时采用了不同的方法
梯度提升(Gradient Boosting)
梯度提升和提升树的区别和联系
提升树利用加法模型与前向分歩算法实现学习的优化过程。当损失函数是平方误差损失函数和指数损失函数时,每一步优化是很简单的。但对一般损失函数而言,往往每一步优化并不那么容易。针对这一问题,Freidman提出了梯度提升(gradient boosting)算法。它的思想借鉴于梯度下降法,其基本原理是根据当前模型损失函数的负梯度信息作为提升树算法中残差的近似值,拟合一个梯度提升模型
梯度提升与梯度下降的区别和联系是什么?
两者都是在每一轮迭代中,利用损失函数相对于模型的负梯度方向的信息来对当前模型进行更新,只不过在梯度下降中,模型是以参数化形式表示,从而模型的更新等价于参数的更新。而在梯度提升中,模型并不需要进行参数化表示,而是直接定义在函数空间中,从而大大扩展了可以使用的模型种类。
梯度提升和GBDT的区别和联系?
- 采用决策树作为弱分类器的Gradient Boosting算法被称为GBDT,有时又被称为MART(Multiple Additive Regression Tree)。GBDT中使用的决策树通常为CART。
- GBDT使用梯度提升(Gradient Boosting)作为训练方法。
梯度提升原理推导
推导
梯度提升算法包含哪些算法?
Gradient Boosting是Boosting中的一大类算法,其中包括:GBDT(Gradient Boosting Decision Tree)、XGBoost(eXtreme Gradient Boosting)、LightGBM (Light Gradient Boosting Machine)和CatBoost(Categorical Boosting)等
GBDT
gbdt实际例子
gbdt中的树是回归树还是分类树?
回归树
这里面的核心是因为GBDT 每轮的训练是在上一轮的训练的残差基础之上进行训练的。
这里的残差就是当前模型的负梯度值 。这个要求每轮迭代的时候,弱分类器的输出的结果相减是有意义的。残差相减是有意义的。而类别结果相减是无意义的,因此需要数值结果进行相减,所以使用CART 回归树。
当CART是分类树时,采用GINI值作为节点分裂的依据;当CART是回归树时,采用样本的最小方差作为节点分裂的依据
CART
简述gbdt 的算法的流程
gbdt实际例子
GBDT的核心就在于,每一棵树学的是之前所有树结论和的残差,这个残差就是一个加预测值后能得真实值的累加量
比如A的真实年龄是18岁,但第一棵树的预测年龄是12岁,差了6岁,即残差为6岁。那么在第二棵树里我们把A的年龄设为6岁去学习,如果第二棵树真的能把A分到6岁的叶子节点,那累加两棵树的结论就是A的真实年龄;如果第二棵树的结论是5岁,则A仍然存在1岁的残差,第三棵树里A的年龄就变成1岁,继续学。
gbdt通过多轮迭代,每轮迭代产生一个弱分类器,每个分类器在上一轮分类器的残差基础上进行训练。
对弱分类器的要求一般是足够简单,并且是低方差和高偏差的。因为训练的过程是通过降低偏差来不断提高最终分类器的精度。
具体到损失函数本身的选择也就是L的选择,有平方损失函数,0-1损失函数,对数损失函数等等。如果我们选择平方损失函数,那么这个差值其实就是我们平常所说的残差。
GBDT每轮迭代的时候,都去拟合损失函数在当前模型下的负梯度。
这样每轮训练的时候都能够让损失函数尽可能快的减小,尽快的收敛达到局部最优解或者全局最优解。
gbdt 如何选择特征 ?
CART TREE 生成的过程其实就是一个选择特征的过程。假设我们目前总共有 M 个特征。第一步我们需要从中选择出一个特征 j,做为二叉树的第一个节点。然后对特征 j 的值选择一个切分点 m. 一个 样本的特征j的值如果小于m,则分为一类,如果大于m,则分为另外一类。如此便构建了CART 树的一个节点。其他节点的生成过程和这个是一样的
gbdt 如何用于分类?
具体到分类这个任务上面来,我们假设样本 X 总共有 K类。来了一个样本 x,我们需要使用GBDT来判断 x 属于样本的哪一类。
第一步 我们在训练的时候,是针对样本 X 每个可能的类都训练一个分类回归树。举例说明,目前样本有三类,也就是 K = 3。样本 x 属于 第二类。那么针对该样本 x 的分类结果,其实我们可以用一个 三维向量 [0,1,0] 来表示。0表示样本不属于该类,1表示样本属于该类。由于样本已经属于第二类了,所以第二类对应的向量维度为1,其他位置为0。
针对样本有 三类的情况,我们实质上是在每轮的训练的时候是同时训练三颗树。第一颗树针对样本x的第一类,输入为(x,0)。第二颗树输入针对 样本x 的第二类,输入为(x,1)。第三颗树针对样本x 的第三类,输入为(x,0)
在这里每颗树的训练过程其实就是就是我们之前已经提到过的CATR TREE 的生成过程。在此处我们参照之前的生成树的程序 即可以就解出三颗树,以及三颗树对x 类别的预测值f1(x),f2(x),f3(x)。那么在此类训练中,我们仿照多分类的逻辑回归 ,使用softmax 来产生概率,则属于类别 1 的概率
并且我们我们可以针对类别1 求出 残差y11(x)=0−p1(x);类别2 求出残差y22(x)=1−p2(x);类别3 求出残差y33(x)=0−p3(x).
然后开始第二轮训练 针对第一类 输入为(x,y11(x)), 针对第二类输入为(x,y22(x)), 针对 第三类输入为 (x,y33(x)).继续训练出三颗树。一直迭代M轮。每轮构建 3颗树。
当训练完毕以后,新来一个样本 x1 ,我们需要预测该样本的类别的时候,便可以有这三个式子产生三个值,f1(x),f2(x),f3(x)。样本属于 某个类别c的概率为
gbdt的效果相比于传统的LR,SVM效果为什么好一些 ?
GBDT基于树模型,继承了树模型的优点 :对异常点鲁棒、不相关的特征干扰性低(LR需要加正则)、可以很好地处理缺失值、受噪音的干扰小
gbdt的参数有哪些,如何调参 ?
1、首先使用默认的参数,进行数据拟合;
2、从步长(learning rate)和迭代次数(n_estimators)入手;一般来说,开始选择一个较小的步长来网格搜索最好的迭代次数。这里,可以将步长初始值设置为0.1。对于迭代次数进行网格搜索;
3、接下来对决策树的参数进行寻优
4、首先我们对决策树最大深度max_depth和内部节点再划分所需最小样本数min_samples_split进行网格搜索。【min_samples_split暂时不能一起定下来,因为这个还和决策树其他的参数存在关联】
5、接着再对内部节点再划分所需最小样本数min_samples_split和叶子节点最少样本数min_samples_leaf一起调参;做到这里,min_samples_split要做两次网格寻优,一次是树的最大深度max_depth,一次是叶子节点最少样本数min_samples_leaf。
【具体观察min_samples_split的值是否落在边界上,如果是可以进一步寻优】
6、继续对最大特征数max_features进行网格搜索。做完这一步可以看看寻找出的最优参数组合给出的分类器的效果。
7、可以进一步考虑对子采样的比例进行网格搜索,得到subsample的寻优参数
8、回归到第2步调整设定的步长(learning rate)和迭代次数(n_estimators),注意两者的乘积保持不变,这里可以分析得到:通过减小步长可以提高泛化能力,但是步长设定过小,也会导致拟合效果反而变差,也就是说,步长不能设置的过小。
如何调gbdt
gbdt的优缺点 ?GBDT优缺点
A:优点
可以灵活处理各种类型的数据,包括连续值和离散值。
在相对少的调参时间情况下,预测的准备率也可以比较高。这个是相对SVM来说的。
使用一些健壮的损失函数,对异常值的鲁棒性非常强。比如 Huber损失函数和Quantile损失函数。
缺点:由于弱学习器之间存在依赖关系,难以并行训练数据。不过可以通过自采样的SGBT来达到部分并行。
RF和GBDT的区别
相同点:
都是由多棵树组成,最终的结果都是由多棵树一起决定。
不同点:
-
集成学习:RF属于bagging思想,而GBDT是boosting思想
-
偏差-方差权衡:RF不断的降低模型的方差,而GBDT不断的降低模型的偏差
-
训练样本:RF每次迭代的样本是从全部训练集中有放回抽样形成的,而GBDT每次使用全部样本
-
并行性:RF的树可以并行生成,而GBDT只能顺序生成(需要等上一棵树完全生成)
-
最终结果:RF最终是多棵树进行多数表决(回归问题是取平均),而GBDT是加权融合
-
数据敏感性:RF对异常值不敏感,而GBDT对异常值比较敏感
-
泛化能力:RF不易过拟合,而GBDT容易过拟合
比较LR和GBDT,说说什么情景下GBDT不如LR
先说说LR和GBDT的区别:
- LR是线性模型,可解释性强,很容易并行化,但学习能力有限,需要大量的人工特征工程
- GBDT是非线性模型,具有天然的特征组合优势,特征表达能力强,但是树与树之间无法并行训练,而且树模型很容易过拟合;
举例:
假设一个二分类问题,label为0和1,特征有100维,如果有1w个样本,但其中只要10个正样本1,而这些样本的特征 f1的值为全为1,而其余9990条样本的f1特征都为0(在高维稀疏的情况下这种情况很常见)。