基本概念
- 生成模型和判别模型
- 参数模型和非参数模型
- 有几种梯度下降算法
- 什么情况下会出现过拟合
- 如何解决过拟合
l1/l2/dropout/增加数据量/bagging/boosting - 不变动模型和参数,只针对数据,如何减少过拟合
- 什么情况下会出现梯度爆炸/消失
- 如何解决梯度爆炸/消失
- 泰勒展开公式
- L1和L2正则的区别,分别在什么情况下使用
- 为什么L1正则能产生稀疏性
- L1不可导时候改如何处理
近端梯度法、坐标下降法 - 什么是凸优化问题,凸优化有什么优点
- 有哪些凸优的学习器
- 什么是K-fold cross Validation
- 为什么需要train,validation和test三个部分
- 样本不均衡的时候有什么解决方案
1)从数据的角度出发,主要方法为采样,分为欠采样和过采样
2)从算法的角度出发,考虑不同误分类情况代价的差异性对算法进行优化,主要是基于代价敏感学习算法(Cost-Sensitive Learning);还可以将不平衡数据集的问题考虑为一分类(One Class Learning)或者异常检测(Novelty Detection)问题。 - 有监督和无监督的区别
- 什么是极大似然
1)写似然公式(一般是概率值连乘,因为实际情况下,各个特征并不确保一定独立,因此这个概率公式是似然公式)
2)求log(连乘的log会变成连加)
3)求导
4)另导数为0求最优解 - 为什么极大似然的时候可以相乘
- 什么是最小二乘
1)找到拟合函数(线性/曲线都行,但需要拟合的参数是一次项),这里以二次项为例
y ′ = θ 0 + θ 1 x + θ 2 x 2 y' = \theta_0 + \theta_1 x + \theta_2 x^2 y′=θ0+θ1x+θ2x2
2)计算误差(平方误差)
e = y − y ′ e = y - y' e=y−y′
Q = ( y − ( θ 0 + θ 1 x + θ 2 x 2 ) ) 2 Q = (y - (\theta_0 + \theta_1 x + \theta_2 x^2))^2 Q=(y−(θ0+θ1x+θ2x2))2
3)最小化误差(对 θ \theta θ求导,置为0,求解) - 最小二乘和梯度下降的区别
1)最小二乘法跟梯度下降法都是通过求导来求损失函数的最小值
2)最小二乘前者采用暴力的解方程组方式;梯度下降采用步进迭代的方式,一步一步的逼近最优解,实际应用中,大多问题是不能直接解方程求得最优解的,所以梯度下降法应用广泛。
在
3)在特征数量较大的时候,梯度下降可以较好适用,然而最小二乘运算代价较大,时间复杂度为 O ( n 3 ) O(n^3) O(n3),通常来说n小于10000时可以接受
4)梯度下降可以应用于所有凸优化方程(保证目标函数存在一阶连续偏导),但是最小二乘只能应用于线性回归 - 逻辑回归和SVM的区别
- 参数越小模型越简单吗?为什么
越是复杂的模型,越是尝试对所有样本进行拟合,包括异常点。这就会造成在较小的区间中产生较大的波动,这个较大的波动也会反映在这个区间的导数比较大。只有越大的参数才可能产生较大的导数。因此参数越小,模型就越简单。 - 实现参数的稀疏有什么好处
因为参数的稀疏,在一定程度上实现了特征的选择。一般而言,大部分特征对模型是没有贡献的。这些没有用的特征虽然可以减少训练集上的误差,但是对测试集的样本,反而会产生干扰。稀疏参数的引入,可以将那些无用的特征的权重置为0. - 什么是卡方检测
- 有哪些特征选择方法
- 如果f1已经趋于平稳,如何在保持f1稳定的前提下提高precision,降低recall
- 怎么同时处理离散数据和连续数据
- 怎么处理onehot等操作之后维度过高的数据
- 什么是方差
- 什么是协方差
评估指标
- AUC 的计算方法及实现公式
- 当样本不均衡的时候,AUC 会有影响吗
不会 - 分类问题有哪些评价指标
- 回归问题有哪些评价指标
1) 均方根误差 - 准确率的计算公式
- 召回率的计算公式
- 精确度的计算公式
- F1 score的计算公式
- 为什么减小方差有效
数据降维
- PCA的优点
仅仅需要以方差衡量信息量,不受数据集以外的因素影响。第二、各主成分之间正交,可消除原始数据成分间的相互影响的因素。第三、计算方法简单,主要运算是特征值分解,易于实现。 - PCA的缺点
第一、提取出的各个特征维度的含义具有一定的模糊性,不如原始样本特征的解释性强。第二、PCA会消除一些类信息,但是方差小的非主成分也可能含有对样本差异的重要信息,因降维丢弃可能对后续数据处理有影响。 - PCA和LDA的区别
无监督/有监督 - LDA的优点
1)在降维过程中可以使用类别的先验知识经验,而像PCA这样的无监督学习则无法使用类别先验知识。
2)LDA在样本分类信息依赖均值而不是方差的时候,比PCA之类的算法较优。 - LDA的缺点
1)LDA不适合对非高斯分布样本进行降维,PCA也有这个问题。
2)LDA降维最多降到类别数k-1的维数,如果我们降维的维度大于k-1,则不能使用LDA。当然目前有一些LDA的进化版算法可以绕过这个问题。
3)LDA在样本分类信息依赖方差而不是均值的时候,降维效果不好。
4)LDA可能过度拟合数据。
FM
线性回归
- 线性回归的两种损失函数
K-Means
- K-means的初始点选择
【方法1】选择批次距离尽可能远的K个点:首先随机选择一个点作为第一个初始类簇中心点,然后选择距离该点最远的那个点作为第二个初始类簇中心点,然后再选择距离前两个点的最近距离最大的点作为第三个初始类簇的中心点,以此类推,直至选出K个初始类簇中心点。
【方法2】选用层次聚类或者Canopy算法进行初始聚类,然后利用这些类簇的中心点作为KMeans算法初始类簇中心点 - K-means的K值选择
- K-means和DBSCAN的区别
- K-means假设数据服从什么分布
- K-means的缺点,如何改善
SVM
- SMV的优化函数
- 为什么优化问题中间隔γ可以取1
- 偏离margin较近的错分样本和偏离margin较远的错分样本损失是否一样
- 什么是hinge loss
- 如何处理线性不可分的数据
- 什么是OneClass SVM
- 什么是决策平面
- 什么是支持向量
- 什么是硬间隔/软间隔
- KKT条件是什么
- 为什么能用KKT条件
- SMO算法
- 什么是拉格朗日对偶问题
- 为什么能用对偶条件
- 如何选择需要更新的 α \alpha α
- 有哪些经典的核函数
决策树
- 决策树的分裂方式是什么,根据什么变量来决定分裂变量
- 有哪些树模型
CLS/ID3/C4.5/CART - ID3是二叉树还是多叉树
ID3只能处理离散型变量,离散特征(离散数量>2)时是多叉树 - C4.5是二叉树还是多叉树
C4.5可以处理离散型/连续型变量,离散特征(离散数量>2)时是多叉树,连续特征时是二叉树 - 信息增益的计算
- 什么是自信息量
- 什么是信息熵
- 信息熵的性质有哪些
- 什么是条件熵
- 怎么对决策树进行预剪枝
- 怎么堆决策树进行后剪枝
- 什么是基尼系数
- 回归树的分裂标准
集成学习
基本概念
- bagging和boosting的区别
- | bagging | boosting |
---|---|---|
运行方式 | 并行 | 串行 |
异常值 | 不敏感 | 敏感 |
结果 | 表决决定 | 累加决定 |
分类器权值 | 一致 | 不一致 |
- GBDT/Adaboost/RF哪个决策树depth较深
bagging较深,boosting有样本权重,所以不必太深(Adaboost<GBDT<RF) - 什么是easy-ensemble
bagging
- 随机森林有哪些随机量
对训练样本进行有放回抽样;再决策树的村联过程中引入了随机属性选择(先随机选择包含k个属性的子集,再选择最优属性) - 什么是isolation forest
- 随机森林分裂时特征如何选择
boosting
Adaboost
- Adaboost的4种算法
- boosting总体可以概括为
前向分布+加法模型
GBDT
- Adaboost和GBDT的区别
- GBDT的并发机制
- GBDT的分裂依据
- GBDT和boosting tree的区别
- GBDT需要为样本设置权重吗
不需要
xgboost
- GBDT和xgboost的区别
- xgboost的目标函数
O b j ( t ) = γ T + ∑ j = 1 T ( w j G j + 1 2 w j 2 ( λ + H j ) ) Obj^{(t)}=\gamma T + \sum_{j=1}^{T}(w_jG_j + \frac{1}{2}w_j^2(\lambda + H_j)) Obj(t)=γT+j=1∑T(wjGj+21wj2(λ+Hj))
γ \gamma γ, λ \lambda λ: 超参数,为正则项的惩罚系数
T T T: 回归树叶子节点数量
w i w_i wi: 回归树叶子节点值(需要优化的参数), i i i表示第 i i i个叶子节点
G i G_i Gi: 在第 i i i个叶子节点中所有样本损失函数的一阶偏导值 ,其中每个样本的一阶偏导 g i = ∂ L ( y i , y i ′ ) ∂ y i ′ ∣ y i ′ = y i ( t − 1 ) ′ g_i=\frac{\partial L(y_i, y_i')}{\partial y_i'}|y_i'={y_i^{(t-1)}}' gi=∂yi′∂L(yi,yi′)∣yi′=yi(t−1)′
H i H_i Hi: 在第 i i i个叶子节点中所有样本损失函数的二阶偏导值 ,其中每个样本的二阶偏导 h i = ∂ L ( y i , y i ′ ) ∂ 2 y i ′ ∣ y i ′ = y i ( t − 1 ) ′ h_i=\frac{\partial L(y_i, y_i')}{\partial^2 y_i'}|y_i'={y_i^{(t-1)}}' hi=∂2yi′∂L(yi,yi′)∣yi′=yi(t−1)′
由于obj是凸函数( λ + H j > 0 \lambda + H_j > 0 λ+Hj>0),因此 w j w_j wj 在 = − b 2 a =-\frac{b}{2a} =−2ab 时obj取最小值,有 w j w_j wj 的更新公式为
w j ∗ = − G j H j + λ w_j^* = -\frac{G_j}{H_j + \lambda} wj∗=−Hj+λGj - xgboost的并发机制
xgboost最耗时的地方在于:针对特征值对样本进行排序操作
在进行了预排序之后,可以在寻找最优分裂节点的时候,在特征层面实现并行,即依赖于预排序存储的block进行线性递推。 - xgboost的分裂节点方式
1)精确贪心算法
节点划分标准:每次划分一个节点,选取信息增益最高的分裂方式进行分裂
假设分裂前节点的样本一阶/二阶偏导值为 G G G, H H H,分裂后左叶子节点为 G L G_L GL, H L H_L HL,右叶子节点为 G R G_R GR, H R H_R HR,有 G = G L + G R G = G_L + G_R G=GL+GR, H = H L + H R H = H_L + H_R H=HL+HR
分裂前的目标函数的最小值(带入 w j ∗ w_j^* wj∗)为 o b j 前 = γ − 1 2 G 2 H + λ obj_前=\gamma - \frac{1}{2}\frac{G^2}{H+\lambda} obj前=γ−21H+λG2
分裂后两个叶子节点的目标函数最小值为 o b j 后 = 2 γ − 1 2 ( G L 2 H L + λ + G R 2 H R + λ ) ) obj_后=2\gamma - \frac{1}{2}(\frac{G_L^2}{H_L+\lambda} + \frac{G_R^2}{H_R+\lambda})) obj后=2γ−21(HL+λGL2+HR+λGR2))
信息增益为 g a i n = o b j 后 − o b j 前 = − γ + 1 2 ( G L 2 H L + λ + G R 2 H R + λ − ( G L + G R ) 2 H L + H R + λ ) gain = obj_后 - obj_前 = -\gamma + \frac{1}{2}(\frac{G_L^2}{H_L+\lambda} + \frac{G_R^2}{H_R+\lambda} - \frac{(G_L+G_R)^2}{H_L+H_R+\lambda}) gain=obj后−obj前=−γ+21(HL+λGL2+HR+λGR2−HL+HR+λ(GL+GR)2)
2)列采样
列采样的目的:减少特征维度,有两种列采样方式,分别是按树随机和按层随机。
按树随机:在构建回归树之前,通过随机采样的方式抽取这棵树可以选择的特征,之后所有的子树都只能使用这些特征
按层随机:在每次分裂前,通过随机采样的方式抽取这次分裂可以选择的特征,之后每次分裂都重新进行一次随机选择
3)分桶
分桶的目的:减少特征值的选择可能性,一般使用 h i h_i hi代表样本权值进行加权分位法,有全局策略和局部策略两种分桶方式
加权分位法:以 h i h_i hi代表样本权值,对所有待分类样本进行归一化操作,由于希望每个桶内的数据尽量均衡,通过逼近桶宽限制 ϵ \epsilon ϵ 对所有样本进行划分
全局策略:在最开始的时候对所有特征值进行分桶操作,并记录边界值(容易提前结束划分,需要增多采样个数)
局部策略:每次节点分裂的时候都进行分位点计算(耗时) - xgboost对缺失值敏感吗
不敏感 - xgboost为什么对缺失值不敏感(xgboost如何处理缺失值)
1)训练过程中:xgboost将当前特征值缺失的所有样本看作一个整体,统一放入左/右子树进行信息增益计算。
2)测试过程中:如果训练过程中进行过该特征的信息增益计算,则按照训练计算的增益情况放置对应的左/右子树,反之则默认归入左子树。 - xgboost为什么要用梯度拟合而不直接拟合残差
因为训练目标是使得目标函数最小化,而不是让预测值更接近原始值(导致过拟合等问题),只有使用均方误差作为损失函数且不引入正则项时,负梯度刚好是残差,在 y − y ′ y-y' y−y′时取得最小值。
在前向分布时候使用梯度拟合可以扩展到更复杂的损失函数,且通过正则项一定程度上防止过拟合 - xgboost的预排序作用
在分裂前,对所有样本按照每个样本的特征值进行排序,将排序结果以列存储(特征值+索引值)的方式进行重新存储于block中,由此减少每次分裂过程中的排序操作,即用空间换时间 - 为什么xgboost要用二阶泰勒展开
1)精准性:相对于GBDT的一阶泰勒展开,XGBoost采用二阶泰勒展开,可以更为精准的逼近真实的损失函数。
2)可扩展性:损失函数支持自定义,只需要新的损失函数二阶可导 - 为什么xgboost要引入正则项
相当于预剪枝,防止参数过多导致过拟合 - 为什么xgboost要进行缓存优化
因为block对样本重新排序之后,访问样本的顺序变得不连续,导致缓存命中率降低 - 什么是xgboost的缓存优化
为每个线程根据预排序的样本分配一个连续的buffer用于存储样本的 g i g_i gi和 h i h_i hi,这样只要在构建buffer的时候进行一次非连续访问即可 - xgboost为了加快运行速度进行了哪些优化操作
1)分块并行(预排序):训练前每个特征按照特征值排序并存储为Block结构,后面查找特征分割点时重复使用,并且支持并行查找每个特征的分割点。
2)候选分位点:每个特征采用常数个分位点作为候选分割点。
3)缓存命中优化:使用缓存预取的方法,对每个线程分配一个连续的buffer,读取每个block中样本的梯度信息并存入连续的Buffer中。
4)Block处理优化:Block预先放入内存,Block按列进行解压缩,将Block划分到不同硬盘来提高吞吐。 - xgboost为了防止过拟合进行了哪些操作
1)目标函数添加正则项:叶子节点个数+叶子节点权重的L2正则化
2)列抽样:训练的时候只用一部分特征(不考虑剩余的Block块即可)
3)子采样:每轮计算可以不使用全部样本,使得算法更加保守
4)shrinkage:学习率/步长,为了给后面的训练留出更多的学习空间 - xgboost每棵树停止生长的条件
1)当新引入一次分裂所带来的增益 G a i n < ϵ Gain<\epsilon Gain<ϵ 时,放弃当前的分裂
2)当树达到最大深度时,停止建树,防止过拟合现象
3)当引入一次分裂后,如果一个叶子结点包含的样本数量太少则放弃分裂 - xgboost如何处理不均衡数据
1)采用AUC评估模型的性能,可以通过scale_pos_weight来平衡正样本和负样本的权重,代码中执行 w = w × s c a l e _ p o s _ w e i g h t w = w \times scale\_pos\_weight w=w×scale_pos_weight
s c a l e _ p o s _ w e i g h t = 负 样 本 数 量 正 样 本 数 量 scale\_pos\_weight=\frac{负样本数量}{正样本数量} scale_pos_weight=正样本数量负样本数量
2)在意概率(预测得分的合理性),不能重新平衡数据集(会破坏数据的真实分布),应该设置max_delta_step为一个有限数字来帮助收敛(基模型为LR时有效)
3)通过上采样,下采样,SMOTE算法或者自定义损失函数的方式解决正负样本不平衡的问题。 - xgboost如何评价特征重要性
1)该特征在所有树中被用作分割样本的特征的总次数。
2)该特征在其出现过的所有树中产生的平均增益
3)该特征在其出现过的所有树中的平均覆盖范围
(覆盖范围是指一个特征用作分割点后,其影响的样本数量,即有多少样本经过该特征分割到两个子结点) - xgboost的常用参数
max_depth 树深
min_child_weight 叶子节点包含的最小样本数,由于一般使用均方根误差,所以也可以表示为 h i h_i hi
γ \gamma γ 惩罚系数超参
α \alpha α L1正则化系数
λ \lambda λ L2正则化系数
subsample 对训练样本的采样比例
cosample_bytree 列采样的采样比例
scale_pos_weight 正负样本数量比例(负样本/正样本)
min_split_loss 最小化分损失 - xgboost如何调参
max_depth check from range(3, 10, 2)
min_child_weight check from range(1, 6, 2)
min_split_loss check from range(0.1, 0.5, 0.1)
subsample, cosample_bytree check from range(0.6, 0.9, 0.1)
shrinkage 0.01-0.1 - xbgoost的缺点
level-wise建树方式对当前层的所有叶子节点一视同仁,有些叶子节点分裂收益非常小,对结果没影响,但还是要分裂,加重了计算代价。
预排序方法空间消耗比较大,不仅要保存特征值,也要保存特征的排序索引,同时时间消耗也大,在遍历每个分裂点时都要计算分裂增益(不过这个缺点可以被近似算法所克服)
逻辑回归
- 逻辑回归的缺点
- 逻辑回归的目标函数
- 针对逻辑回归的目标函数如何求最优解
- 为什么要用对数似然,不用square loss或者absolute loss
为了得到凸函数 - 逻辑回归使用平方损失会不会形成凸函数?
不会
贝叶斯
- 贝叶斯公式
- 条件概率公式
- 全概率公式
- 朴素贝叶斯的前提要求
- 朴素贝叶斯的计算过程
- 朴素贝叶斯和贝叶斯有什么区别
- HMM的维特比算法
- CRF的本质
GMM
- E-step的目的
- M-step的目的