1-1 简述解决一个机器学习问题时,你的流程是怎样的?
1-2 损失函数是什么,如何定义合理的损失函数?
1-3 回归模型和分类模型常用损失函数有哪些?各有什么优缺点
1-4 什么是结构误差和经验误差?训练模型的时候如何判断已经达到最优?
1-5 模型的“泛化”能力是指?如何提升模型泛化能力?
1-6 如何选择合适的模型评估指标?AUC、精准度、召回率、F1值都是什么?如何计算?有什么优缺点?
1-7 什么是混淆矩阵?
1-8 ROC曲线如何绘制?相比P-R曲线有什么特点?
1-9 如何评判模型是过拟合还是欠拟合?遇到过拟合或欠拟合时,你是如何解决?
1-10 你是如何针对应用场景选择合适的模型?
1-11 如何选择模型中的超参数?有什么方法,并说说其优劣点
1-12 误差分析是什么?你是如何进行误差分析?
1-13 你是如何理解模型的偏差和方差?什么样的情况是高偏差,什么情况是高方差?
1-14 出现高偏差或者高方差的时候你有什么优化策略?
1-15 奥卡姆剃刀定律是什么?对机器学习模型优化有何启发?举例说明
1-16 线性模型和非线性模型的区别?哪些模型是线性模型,哪些模型是非线性模型?
1-17 生成式模型和判别式模型的区别?哪些模型是生成式模型,哪些模型是判别式模型?
2-1-1 你是怎样理解“特征”?
2-1-2 给定场景和问题,你如何设计特征?(特征工程方法论)
2-1-3 开发特征时候做如何做数据探索,怎样选择有用的特征?
2-1-4 你是如何做数据清洗的?举例说明
2-1-5 如何发现数据中的异常值,你是如何处理?
2-1-6 缺失值如何处理?
2-1-7 对于数值类型数据,你会怎样处理?为什么要做归一化?归一化有哪些方法?离散些方法,离散化和归一化有哪些优缺点?
2-1-8 标准化和归一化异同?
2-1-9 你是如何处理CTR类特征?
2-1-10 讲解贝叶斯平滑原理?以及如何训练得到平滑参数
2-1-11 类别型数据你是如何处理的?比如游戏品类,地域,设备
2-1-12 序号编码、one-hot编码、二进制编码都是什么?适合怎样的类别型数据?
2-1-13 时间类型数据你的处理方法是什么?原因?
2-1-14 你怎样理解组合特征?举个例子,并说明它和单特征有啥区别
2-1-15 如何处理高维组合特征?比如用户ID和内容ID?
2-1-16 如何理解笛卡尔积、外积、内积?
2-1-17 文本数据你会如何处理?
2-1-18 文本特征表示有哪些模型?他们的优缺点都是什么?
2-1-19 讲解TFF原理,它有什么优点和缺点?针对它的缺点,你有什么优化思路?
2-1-20 N-gram算法是什么?有什么优缺点?
2-1-21 讲解一下word2vec工作原理?损失函数是什么?
2-1-22 讲解一下LDA模型原理和训练过程?
2-1-23 Word2vec和LDA两个模型有什么区别和联系?
2-1-24 Skin-gram和cbow有何异同?
2-1-25 图像数据如何处理?有哪些常用的图像特征提取方法
2-1-26 你是怎样做特征选择的?卡方检验、信息值(IV)、VOE都是如何计算?
2-1-27 计算特征之间的相关性方法有哪些?有什么优缺点
基础算法原理和推导
KNN
2-2-1 Knn建模流程是怎样的?
2-2-2 Knn优缺点是什么?
2-2-3 Knn适合什么样的场景和数据类型?
2-2-4 常用的距离衡量公式都有哪些?具体说明它们的计算流程,以及使用场景?
2-2-5 超参数K值过大或者过小对结果有什么影响,你是如何选择K值?
2-2-6 介绍一下Kd树?如何建树,以及如何搜索最近节点?
·
支持向量机
2-3-1 简单讲解SVM模型原理?
2-3-2 SVM为什么会对缺失值敏感?实际应用时候你是如何处理?
2-3-3 SVM为什么可以分类非线性问题?
2-3-4 常用的核函数有哪些?你是如何选择不同的核函数的?
2-3-5 RBF核函数一定线性可分么?为什么
2-3-6 SVM属于线性模型还是非线性模型?为什么?
2-3-7 训练误差为0的SVM分类器一定存在吗?说明原因?
朴素贝叶斯模型
2-4-1 讲解贝叶斯定理?
2-4-2 什么是条件概率、边缘概率、联合概率?
2-4-3 后验概率最大化的含义是什么?
2-4-4 朴素贝叶斯模型如何学习的?训练过程是怎样?
2-4-5 你如何理解生成模型和判别模型?
2-4-6 朴素贝叶斯模型“朴素”体现在哪里?存在什么问题?有哪些优化方向?
2-4-7 什么是贝叶斯网络?它能解决什么问题?
2-4-8 为什么说朴素贝叶斯也是线性模型而不是非线性模型呢?
线性回归
2-5-1 线性回归的基本思想是?
2-5-2 什么是“广义线性模型”?
2-5-3 线性回归常用的损失函数有哪些?优化算法有哪些?
2-5-4 线性回归适用什么类型的问题?有哪些优缺点?
2-5-5 请用最小二乘法推倒参数更新公式?
逻辑回归
2-6-1 逻辑回归相比于线性回归有什么异同?
2-6-2 逻辑回归和广义线性模型有何关系?
2-6-3 逻辑回归如何处理多标签分类?
2-6-4 为什么逻辑回归需要进行归一化或者取对数?
2-6-5 为什么逻辑回归把特征离散化之后效果会提升?
2-6-6 类别不平衡问题你是如何处理的?什么是过采样,什么是欠采样?举例
2-6-7 讲解L1和L2正则,它们都有什么作用,解释为什么L1比L2更容易产生稀疏解;对于存在线性相关的一组特征,L1正则如何选择特征?
2-6-8 使用交叉熵作为损失函数,梯度下降作为优化方法,推倒参数更新公式
2-6-9 代码写出训练函数
FM模型
2-7-1 FM模型与逻辑回归相比有什么优缺点?
2-7-2 为什么FM模型计算复杂度时O(kn)?
2-7-3 介绍FFM场感知分解机器(Field-aware Factorization Machine),说说与FM异同?
2-7-4 使用FM进行模型训练时候,有哪些核心参数对模型效果影响大?
2-7-5 如何从神经网络的视角看待FM模型?
决策树
2-8-1 讲解完成的决策树的建树过程
2-8-2 你是如何理解熵?从数学原理上解释熵公式可以作为信息不确定性的度量?
2-8-3 联合熵、条件熵、KL散度、信息增益、信息增益比、gini系数都是什么?如何计算?
2-8-4 常用的决策树有哪些?ID3、C4.5、CART有啥异同?
2-8-5 决策树如何防止过拟合?前剪枝和后剪枝过程是怎样的?剪枝条件都是什么
随机森林(RF)
GBDT
2-10-1 梯度提升和梯度下降有什么区别和联系?
2-10-2 你是如何理解Boosting和Bagging?他们有什么异同?
2-10-3 讲解GBDT的训练过程?
2-10-4 你觉得GBDT训练过程中哪些环节可以平行提升训练效率?
2-10-5 GBDT的优点和局限性有哪些?
2-10-6 GBDT是否对异常值敏感,为什么?
2-10-7 如何防止GBDT过拟合?
2-10-8 在训练过程中哪些参数对模型效果影响比较大?这些参数造成影响是什么?
k-means
2-11-1 简述kmeans建模过程?
2-11-2 Kmeans损失函数是如何定义?
2-11-3 你是如何选择初始类族的中心点?
2-11-4 如何提升kmeans效率?
2-11-5 常用的距离衡量方法有哪些?他们都适用什么类型问题?
2-11-6 Kmeans对异常值是否敏感?为什么?
2-11-7 如何评估聚类效果?
2-11-8 超参数类的个数k如何选取?
2-11-9 Kmeans有哪些优缺点?是否有了解过改进的模型,举例说明?
2-11-10 试试证明kmeans算法的收敛性
2-11-11 除了kmeans聚类算法之外,你还了解哪些聚类算法?简要说明原理
PCA降维
2-12-1 为什么要对数据进行降维?它能解决什么问题?
2-12-2 你是如何理解维度灾难?
2-12-3 PCA主成分分析思想是什么?
2-12-4 如何定义主成分?
2-12-5 如何设计目标函数使得降维达到提取主成分的目的?
2-12-6 PCA有哪些局限性?如何优化
2-12-7 线性判别分析和主成分分析在原理上有何异同?在目标函数上有何区别和联系?
3、 深度学习
DNN
3-1-1 描述一下神经网络?推倒反向传播公式?
3-1-2 讲解一下dropout原理?
3-1-3 梯度消失和梯度膨胀的原因是什么?有什么方法可以缓解?
3-1-4 什么时候该用浅层神经网络,什么时候该选择深层网络
3-1-5 Sigmoid、Relu、Tanh激活函数都有哪些优缺点?
3-1-6 写出常用激活函数的导数
3-1-7 训练模型的时候,是否可以把网络参数全部初始化为0?为什么
3-1-8 Batchsize大小会如何影响收敛速度?
CNN
3-2-1 简述CNN的工作原理?
3-2-2 卷积核是什么?选择大卷积核和小卷积核有什么影响?
3-2-3 你在实际应用中如何设计卷积核?
3-2-4 为什么CNN具有平移不变性?
3-2-5 Pooling操作是什么?有几种?作用是什么?
3-2-6 为什么CNN需要pooling操作?
3-2-7 什么是batchnormalization?它的原理是什么?在CNN中如何使用?
3-2-8 卷积操作的本质特性包括稀疏交互和参数共享,具体解释这两种特性以其作用?
3-2-9 你是如何理解fine-tune?有什么技巧
RNN
3-3-1 简述RNN模型原理,说说RNN适合解决什么类型问题?为什么
3-3-2 RNN和DNN有何异同?
3-3-3 RNN为什么有记忆功能?
3-3-4 长短期记忆网络LSTM是如何实现长短期记忆功能的?
3-3-5 长短期记忆网络LSTM各模块都使用什么激活函数,可以使用其他激活函数么?
3-3-6 GRU和LSTM有何异同
3-3-7 什么是Seq2Seq模型?该模型能解决什么类型问题?
3-3-8 注意力机制是什么?Seq2Seq模型引入注意力机制主要解决什么问题?
4、 基础工具
Spark
4-1-1 什么是宽依赖,什么是窄依赖?哪些算子是宽依赖,哪些是窄依赖?
4-1-2 Transformation和action算子有什么区别?举例说明
4-1-3 讲解sparkshuffle原理和特性?shuffle write 和 huffleread过程做些什么?
4-1-4 哪些spark算子会有shuffle?
4-1-5 讲解sparkschedule(任务调度)?
4-1-6 Sparkstage是如何划分的?
4-1-7 Sparkcache一定能提升计算性能么?说明原因?
4-1-8 Cache和persist有什么区别和联系?
4-1-9 RDD是弹性数据集,“弹性”体现在哪里呢?你觉得RDD有哪些缺陷?
4-1-10 当GC时间占比很大可能的原因有哪些?对应的优化方法是?
4-1-11 park中repartition和coalesce异同?coalesce什么时候效果更高,为什么
4-1-12 Groupbykey和reducebykey哪个性能更高,为什么?
4-1-13 你是如何理解caseclass的?
4-1-14 Scala里trait有什么功能,与class有何异同?什么时候用trait什么时候用class
4-1-15 Scala 语法中to 和 until有啥区别
4-1-16 讲解Scala伴生对象和伴生类
Xgboost
4-2-1 你选择使用xgboost的原因是什么?
4-2-2 Xgboost和GBDT有什么异同?
4-2-3 为什么xgboost训练会那么快,主要优化点事什么?
4-2-4 Xgboost是如何处理缺失值的?
4-2-5 Xgboost和lightGBM有哪些异同?
4-2-6 Xgboost为什么要使用泰勒展开式,解决什么问题?
4-2-7 Xgboost是如何寻找最优特征的?
Tensorflow
4-3-1 使用tensorflow实现逻辑回归,并介绍其计算图
4-3-2 sparse_softmax_cross_entropy_with_logits和softmax_cross_entropy_with_logits有何异同?
4-3-3 使用tensorflow过程中,常见调试哪些参数?举例说明
4-3-4 Tensorflow梯度更新是同步还是异步,有什么好处?
4-3-5 讲解一下TFRecords
4-3-6 tensorflow如何使用如何实现超大文件训练?
4-3-7 如何读取或者加载图片数据?
5、推荐系统
5-1-1 你是如何选择正负样本?如何处理样本不均衡的情况?
5-1-2 如何设计推荐场景的特征体系?举例说明
5-1-3 你是如何建立用户模型来理解用户,获取用户兴趣的?
5-1-4 你是如何选择适合该场景的推荐模型?讲讲你的思考过程
5-1-5 你是如何理解当前流行的召回->粗排->精排的推荐架构?这种架构有什么优缺点?什么场景适用使用,什么场景不适合?
5-1-6 如何解决热度穿透的问题?(因为item热度非常高,导致ctr类特征主导排序,缺少个性化的情况)
5-1-7 用户冷启动你是如何处理的?
5-1-8 新内容你是如何处理的?
5-1-9 你们使用的召回算法有哪些?如何能保证足够的召回率?
5-1-10 实时数据和离线数据如何融合?工程上是怎样实现?如何避免实时数据置信度不高带来的偏差问题?
5-1-11 你们是如何平衡不同优化目标的问题?比如:时长、互动等
5-1-12 不同类型内容推荐时候,如何平衡不同类型内容,比如图文、视频;或者不同分类
5-1-13 如何保证线上线下数据一致性?工程上是如何实现?
5-1-14 离线训练效果好,但是上线效果不明显或在变差可能是什么问题?如何解决?
5-1-15 在实际业务中,出现badcase,你是如何快速反查问题的?举例说明
5-1-16 使用ctr预估的方式来做精排,会不会出现相似内容大量聚集?原因是什么?你是如何解决的?
5-1-17 你了解有多少种相关推荐算法?各有什么优缺点
5-1-18 深度学习可以应用到推荐问题上解决哪些问题?为什么比传统机器学习要好?
二、数学相关
6、 概率论和统计学
7、 最优化问题
7-1-1 什么是梯度?
7-1-2 梯度下降找到的一定是下降最快的方法?
7-1-3 牛顿法和梯度法有什么区别?
7-1-4 什么是拟牛顿法?
7-1-5 讲解什么是拉格朗日乘子法、对偶问题、kkt条件?
7-1-6 是否所有的优化问题都可以转化为对偶问题?
7-1-7 讲解SMO(SequentialMinimalOptimization)算法基本思想?
7-1-8 为什么深度学习不用二阶优化?
7-1-9 讲解SGD,ftrl、Adagrad,Adadelta,Adam,Adamax,Nadam优化算法以及他们的联系和优缺点
7-1-10 为什么batch size大,训练速度快or为什么mini-batch比SGD快?
7-1-11 为什么不把batch size设得特别大
1-1 简述解决一个机器学习问题时,你的流程是怎样的?
1-2 损失函数是什么,如何定义合理的损失函数?
机器 学习模型关于单个样本的预测值与真实值的差称为损失。用于计算损失的函数称为损失函数。损失函数是 f ( x ) f(x) f(x)和 y y y的非负实值函数函数。
1-3 回归模型和分类模型常用损失函数有哪些?各有什么优缺点
回归模型常用的损失函数有:
0-1损失函数:
L ( f ( x ) , y ) = { 1 , y ≠ f ( x ) 0 , y = f ( x ) L(f(x),y) = \begin{cases} 1, & y \neq f(x) \\ 0, & y = f(x) \end{cases} L(f(x),y)={1,0,y=f(x)y=f(x)
绝对损失函数:异常点多的情况下鲁棒性好;但不方便求导
L ( f ( x ) , y ) = ∣ f ( x ) − y ∣ L(f(x), y) = |f(x)-y| L(f(x),y)=∣f(x)−y∣
平方损失函数:求导方便,能够用梯度下降法优化;对异常值敏感
L ( f ( x ) , y ) = ( f ( x ) − y ) 2 L(f(x),y) = (f(x)-y)^2 L(f(x),y)=(f(x)−y)2
对数损失函数/对数似然损失函数:
L ( P ( Y ∣ X ) , Y ) = − l o g P ( Y ∣ X ) L(P(Y|X),Y) = -{\rm log} P(Y|X) L(P(Y∣X),Y)=−logP(Y∣X)
Huber 损失函数:结合了绝对损失函数和平方损失函数的优点;缺点是需要调整超参数 δ \delta δ
L H u b e r ( f , y ) = { ( f − y ) 2 ∣ f − y ∣ ≤ δ 2 δ ∣ f − y ∣ − δ 2 ∣ f − y ∣ > δ L_{Huber}(f, y) = \begin{cases} (f-y)^2 & |f-y| \leq \delta \\ 2 \delta |f-y| - \delta^2 & |f-y| > \delta \end{cases} LHuber(f,y)={(f−y)22δ∣f−y∣−δ2∣f−y∣≤δ∣f−y∣>δ
Log-Cosh 损失函数:具有Huber的所有优点,同时二阶处处可微(牛顿法要求二阶可微)
L ( f , y ) = log cosh ( f − y ) L(f,y) = \log \cosh(f-y) L(f,y)=logcosh(f−y)
经验风险(经验损失):模型 f ( X ) f(X) f(X)关于训练数据集的平均损失
R e m p ( f ) = 1 N ∑ i = 1 N L ( y i , f ( x i ) ) R_{\rm emp}(f) = \frac{1}{N} \sum_{i=1}^N L(y_i,f(x_i)) Remp(f)=N1i=1∑NL(yi,f(xi))
结构风险:是在经验风险上加上表示模型复杂度的正则化项
R s r m ( f ) = 1 N ∑ i = 1 N L ( y i , f ( x i ) ) + λ J ( f ) R_{\rm srm}(f) = \frac{1}{N} \sum_{i=1}^{N}L(y_i,f(x_i))+\lambda J(f) Rsrm(f)=N1i=1∑NL(yi,f(xi))+λJ(f)
经验风险最小化的策略认为,经验风险最小的模型是最优的模型。
结构风险最小化是为了防止过拟合而提出的,结构风险最小化等价于正则化。结构风险最小化的策略认为结构风险最小的模型是最优的模型。
通常将模型对未知数据的预测能力称为泛化能力(generalization ability)。现实中采用最多的方法是通过测试误差来评价学习方法的泛化能力。
TP:将正类预测为正类数
FN:将正类预测为负类数
FP:将负类预测为正类数
TN:将负类预测为负类数
KaTeX parse error: Expected '{', got '\textcolor' at position 1: \̲t̲e̲x̲t̲c̲o̲l̲o̲r̲{##df0030}{#1}
Accuracy(准确率):分类正确的样本占总样本个数的比例
A c c u r a c y = n c o r r e c t n t o t a l Accuracy = \frac{n_{correct}}{n_{total}} Accuracy=ntotalncorrect
Precision(精确率):分类正确的正样本个数占分类器判定为正样本的样本个数的比例
P r e c i s i o n = T P T P + F P Precision = \frac{TP}{TP+FP} Precision=TP+FPTP
Recall(召回率):分类正确的正样本数占真正的正样本个数的比例
R e c a l l = T P T P + F N Recall = \frac{TP}{TP+FN} Recall=TP+FNTP
F1-score:precision和recall的调和平均值;当精确率和召回率都高时,F1值也会高
F 1 = 2 × p r e c i s i o n × r e c a l l p r e c i s i o n + r e c a l l {\rm F1} = \frac{2 \times precision \times recall}{precision + recall} F1=precision+recall2×precision×recall
在排序问题中,通常没有一个确定的阈值把得到的结果直接判定为正样本或负样本,而是采用Top N返回结果的Precision和Recall值来衡量排序模型的性能。即认为模型返回的Top N结果就是模型判定的正样本,计算前N个位置的Precision@N和Recall@N。为了综合评估一个排序模型的好坏,不仅要看模型在不同Top N下的Precision@N和Recall@N,而且最好画出模型的P-R曲线。P-R曲线的横轴是Recall,纵轴是Precision。
ROC:横坐标为假阳性率(False Positive Rate,FPR);纵坐标为真阳性率(True Positive Rate,TPR)
F P R = F P N T P R = T P P FPR = \frac{FP}{N} \\ TPR = \frac{TP}{P} FPR=NFPTPR=PTP
其中P是真实的正样本的数量,N是真实的负样本的数量,TP是P个正样本中被分类器预测为正样本的个数,FP是N个负样本中被预测为正样本的个数。
【如何绘制ROC曲线】通过不断移动分类器的“截断点”来生成曲线上的一组关键点。在二分类问题中,模型输出一般是预测样本为正例的概率,在输出最终的正例负例之前,我们需要制定一个阈值。大于该阈值的样本判定为正例,小于该阈值的样本判定为负例。通过动态调整截断点,绘制每个截断点对应位置,再连接所有点得到最终的ROC曲线。
AUC:ROC曲线下的面积大小。计算AUC值只要沿着ROC横轴做积分就可以。AUC取值一般在0.5~1之间。AUC越大,分类性能越好。AUC表示预测的正例排在负例前面的概率。
指标想表达的含义,简单来说其实就是随机抽出一对样本(一个正样本,一个负样本),然后用训练得到的分类器来对这两个样本进行预测,预测得到正样本的概率大于负样本概率的概率
AUC为0.5表明对正例和负例没有区分能力,对于不论真实类别是1还是0,分类器预测为1的概率是相等的。
我们希望分类器达到的效果:对于真实类别为1的样本,分类器预测为1的概率(TPR)要大于真实类别为0而预测类别为1的概率(FPR),即y>x
AUC的计算方法同时考虑了分类器对于正例和负例的分类能力,在样本不平衡的情况下,依然能够对分类器作出合理的评价。
思路:1.首先对预测值进行排序,排序的方式用了python自带的函数sorted,详见注释。
2.对所有样本按照预测值从小到大标记rank,rank其实就是index+1,index是排序后的sorted_pred数组中的索引
3.将所有正样本的rank相加,遇到预测值相等的情况,不管样本的正负性,对rank要取平均值再相加
4.将rank相加的和减去正样本排在正样本之后的情况,再除以总的组合数,得到auc
KaTeX parse error: Expected '{', got '\textcolor' at position 1: \̲t̲e̲x̲t̲c̲o̲l̲o̲r̲{##df0030}{#1}
RMSE:计算预测值和实际值的平均误差
R M S E = ∑ i = 1 n ( y i − y ^ i ) 2 n {\rm RMSE} = \sqrt{\frac{\sum_{i=1}^n (y_i-\hat{y}_i)^2}{n}} RMSE=n∑i=1n(yi−y^i)2
1-7 什么是混淆矩阵?
混淆矩阵,又称误差矩阵,就是分别统计分类模型归错类,归对类的观测值个数,然后把结果放在一个表里展示出来。这个表就是混淆矩阵。
混淆矩阵是ROC曲线绘制的基础,同时它也是衡量分类型模型准确度中最基本,最直观,计算最简单的方法。
混淆矩阵 | 预测结果 | 预测结果 |
---|---|---|
真实情况 | 反例 | 正例 |
反例 | TN(真反例) | FP(假正例) |
正例 | FN(假反例) | TP(真正例) |
TN:True Negative,被判定为负样本,事实上也是负样本
FP:False Positive,被判定为正样本,但事实上是负样本
FN:False Negative,被判定为负样本,但事实上是正样本
TP:True Positive,被判定为正样本,事实上也是正样本
1-8 ROC曲线如何绘制?相比P-R曲线有什么特点?
ROC曲线的纵轴为TPR,横轴为FPR,曲线上每个点对应一个TPR和FPR。通过调整模型阈值可以得到一个个点,从而将各个点连起来即可得到ROC曲线。
一般情况下,PR曲线易受样本数量的影响,样本数量不均衡情况下PR曲线会有明显变化,故一般使用ROC曲线。
1-9 如何评判模型是过拟合还是欠拟合?遇到过拟合或欠拟合时,你是如何解决?
过拟合是指学习时选择的模型所包含的参数过多,以至出现这一模型对已知数据预测得很好,但对未知数据预测得很差的现象。
当训练集效果差,欠拟合(如accuracy<0.8);训练集效果好,测试集效果差,过拟合
欠拟合解决方法:
过拟合解决方法:
超参搜索算法一般包括的要素(1)目标函数(2)搜索范围,上限和下限缺点(3)其他参数,如搜索步长。
查找搜索范围内所有的点来确定最优值;实际应用中先用较大搜索范围和较大步长,寻找全局最优值可能位置;然后逐步缩小搜索范围和搜索步长,寻找更精确位置。
不再测试上界和下界之间的所有值,而是在搜索范围中随机选取样本点。如果样本点集足够大,通过随机搜索也能大概率找到全局最优解或其近似。
对目标函数形状进行学习,找到使目标函数向全局最优值提升的参数。
优点
缺点
1-12 误差分析是什么?你是如何进行误差分析?
误差诊断:通过训练误差和测试误差来分析模型是否存在高方差、高偏差。
上述分析的前提是:训练集、测试集的数据来自于同一个分布,且最优误差较小。否则讨论更复杂。
1-13 你是如何理解模型的偏差和方差?什么样的情况是高偏差,什么情况是高方差?
高偏差对应于模型的欠拟合:模型过于简单,以至于未能很好的学习训练集,从而使得训练误差过高。
此时模型预测的方差较小,表示预测较稳定。但是模型预测的偏差会较大,表示预测不准确。
高方差对应于模型的过拟合:模型过于复杂,以至于将训练集的细节都学到,将训练集的一些细节当做普遍的规律,从而使得测试集误差与训练集误差相距甚远。
1-14 出现高偏差或者高方差的时候你有什么优化策略?
1-15 奥卡姆剃刀定律是什么?对机器学习模型优化有何启发?举例说明
奥卡姆剃刀定律:若有多个假设与观察一致,则选最简单的那个
奥卡姆剃刀原理应用于模型选择时变为以下想法:在所有可能选择的模型中,能够很好地解释已知数据并且十分简单才是最好的,也就是应该选择的模型。
从贝叶斯估计的角度来看,正则化项对应于模型的先验概率。可以假设复杂的模型有较小的先验概率,简单的模型有较大的先验概率。
非概率模型可以分为线性模型和非线性模型。如果函数 y = f ( x ) y=f(x) y=f(x) 或 z = g ( x ) z = g(x) z=g(x) 是线性函数,则称模型是线性模型,否则成模型为非线性模型。
线性模型:感知机、线性支持向量机、k近邻、k均值、潜在语义分析
非线性模型:核函数支持向量机、AdaBoost,神经网络
监督学习方法分为生成方法(generative approach)和判别方法(discriminative approach)。所学习到的模型分别称为生成模型和判别模型。监督学习的模型一般形式为决策函数: Y = f ( X ) Y = f(X) Y=f(X) 或者条件概率分布 P ( Y ∣ X ) P(Y|X) P(Y∣X)。
生成方法由数据学习联合概率分布 P ( X , Y ) P(X,Y) P(X,Y),然后求出条件概率分布 P ( Y ∣ X ) P(Y|X) P(Y∣X)作为预测模型:
P ( Y ∣ X ) = P ( X , Y ) P ( X ) P(Y|X) = \frac{P(X,Y)}{P(X)} P(Y∣X)=P(X)P(X,Y)
之所以成为生成方法,是因为模型表示了给定输入 X X X 产生输出 Y Y Y的生成关系。
典型的生成模型:朴素贝叶斯法、隐马尔可夫模型。
判别方法由数据直接学习决策函数 f ( X ) f(X) f(X) 或者条件概率分布 P ( X , Y ) P(X,Y) P(X,Y)作为预测的模型,关心的是对给定的输入 X X X,应该预测什么样的输出 Y Y Y。
典型的判别模型:k近邻、感知机、决策树、逻辑斯蒂回归、最大熵模型、支持向量机、提升方法、条件随机场。
概率模型与非概率模型的区别在于模型的内在结构。概率模型一定可以表示为联合概率分布的形式,其中的变量表示输入、输出、因变量甚至参数。而针对非概率模型则不一定存在这样的联合概率分布。
统计学习的模型可以分为概率模型(probabilistic model)和非概率模型(non-probabilistic model)或者确定性模型(deterministic model)。在监督学习中,概率模型取条件概率分布形式 p ( y ∣ x ) p(y|x) p(y∣x),非概率模型取函数形式 y = f ( x ) y=f(x) y=f(x),其中 x x x是输入, y y y是输出。在无监督学习中,概率模型取条件概率分布形式 p ( z ∣ x ) p(z|x) p(z∣x)或 p ( x ∣ z ) p(x|z) p(x∣z),其中 x x x是输入, z z z是输出。在监督学习中,概率模型是生成模型,非概率模型是判别模型。
概率模型:决策树、朴素贝叶斯、隐马尔可夫模型、条件随机场、概率潜在语义分析、潜在狄利克雷分布、高斯混合模型
非概率模型:感知机、支持向量机、k近邻、AdaBoost、k均值、潜在语义分析、神经网络
逻辑斯蒂回归即可看做概率模型,又可看做非概率模型。
统计学习模型又可以分为参数化模型(parametric model)和非参数化模型(non-parametric model)。参数化模型假设模型参数的维度固定,模型可以由有限维参数完全刻画;非参数模型假设模型参数的维度不固定或者说无穷大,随着训练数据量的增加而不断增大。
参数化模型:感知机、朴素贝叶斯、逻辑斯蒂回归、k均值、高斯混合模型
非参数化模型:决策树、支持向量机、AdaBoost、k近邻、潜在语义分析、概率潜在语义分析、潜在狄利克雷分配
2-1-7 对于数值类型数据,你会怎样处理?为什么要做归一化?归一化有哪些方法?离散化方法,离散化和归一化有哪些优缺点?
数值型特征
为了消除数据特征之间的量纲影响,我们需要对特征进行归一化处理,使得不同指标之间具有可比性。以梯度下降过程为例,如果不做归一化,在学习速率相同的情况下,大量纲变量的更新速度会大于小量纲,需要较多迭代才能找到最优解。如果将其归一化到相同的数值区间后,更新速度变得更为一致,容易更快地通过梯度下降找到最优解。
常用的归一化方法
(1)线性函数归一化(Min-Max Scaling)
对原始数据进行线性变化,使结果映射到[0,1]范围,实现对原始数据的等比缩放。
X n o r m = X − X m i n X m a x − X m i n X_{norm} = \frac{X-X_{min}}{X_{max}-X_{min}} Xnorm=Xmax−XminX−Xmin
适用于有固定取值范围的数据,如图像数据[0,255];不适用于有异常值的数据,例如有异常大的数值,其他数据会被压缩到很小的数值。
(2)零均值归一化(Z-score Normalization)
将原始数据映射到均值为0、标准差为1的分布上。假设原始特征的均值为 μ \mu μ,方差为 σ \sigma σ ,那么归一化公式定义为
z = x − μ σ z = \frac{x-\mu}{\sigma} z=σx−μ
哪些机器学习算法不需要做归一化处理?
概率模型不需要归一化,因为它们不关心变量的值,而是关心变量的分布和变量之间的条件概率,如决策树、RF。而像Adaboost、GBDT、XGBoost、SVM、LR、KNN、KMeans之类的最优化问题就需要归一化。
离散化
分桶
2-1-8 标准化和正则化异同?
简单来说,标准化是依照特征矩阵的列处理数据,其通过求z-score/min-max scaling的方法,将样本的特征值转换到同一量纲下。
正则化是依照特征矩阵的行处理数据,其目的在于样本向量在点乘运算或其他核函数计算相似性时,拥有统一的标准,也就是说都转化为“单位向量”。
2-1-9 你是如何处理CTR类特征?
2-1-10 讲解贝叶斯平滑原理?以及如何训练得到平滑参数
2-1-11 类别型数据你是如何处理的?比如游戏品类,地域,设备
one-hot编码
2-1-12 序号编码、one-hot编码、二进制编码都是什么?适合怎样的类别型数据?
序号编码
用于类别间具有大小关系的数据,例如成绩“高>中>低”,分别编码为3、2、1
one-hot编码
One-Hot Encoding
采用N
位状态位来对N
个可能的取值进行编码,每个取值都由独立的状态位来表示,并且在任意时刻只有其中的一位有效。
用于类别间不具有大小关系的特征,比如血型
二进制编码
先用序号编码给每个类别赋予一个类别ID,然后将ID对应的二进制编码作为结果,最终得到0/1特征向量,且维数少于one-hot编码,节省了存储空间。
2-1-13 时间类型数据你的处理方法是什么?原因?
2-1-14 你怎样理解组合特征?举个例子,并说明它和单特征有啥区别
2-1-15 如何处理高维组合特征?比如用户ID和内容ID?
2-1-16 如何理解笛卡尔积、外积、内积?
笛卡尔积
笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尓积(Cartesian product),又称直积,表示为X×Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员 。
例如,A={a,b}, B={0,1,2},则
A×B={(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}
内积inner product
or点积dot product
a ⋅ b = ∑ i = 1 n a i b i = a 1 b 1 + a 2 b 2 + ⋯ + a n b n \mathbf{a} \cdot \mathbf{b}=\sum_{i=1}^{n} a_{i} b_{i}=a_{1} b_{1}+a_{2} b_{2}+\cdots+a_{n} b_{n} a⋅b=∑i=1naibi=a1b1+a2b2+⋯+anbn
外积outer product
给定两个向量 u = ( u 1 , u 2 , … , u m ) \mathbf{u}=\left(u_{1}, u_{2}, \ldots, u_{m}\right) u=(u1,u2,…,um)和 v = ( v 1 , v 2 , … , v n ) \mathbf{v}=\left(v_{1}, v_{2}, \dots, v_{n}\right) v=(v1,v2,…,vn)
它们的外积 u ⊗ v \mathbf{u} \otimes \mathbf{v} u⊗v 定义为 m x n的矩阵
u ⊗ v = A = [ u 1 v 1 u 1 v 2 … u 1 v n u 2 v 1 u 2 v 2 … u 2 v n ⋮ ⋮ ⋱ ⋮ u m v 1 u m v 2 … u m v n ] \mathbf{u} \otimes \mathbf{v}=\mathbf{A}=\left[\begin{array}{cccc}{u_{1} v_{1}} & {u_{1} v_{2}} & {\ldots} & {u_{1} v_{n}} \\ {u_{2} v_{1}} & {u_{2} v_{2}} & {\ldots} & {u_{2} v_{n}} \\ {\vdots} & {\vdots} & {\ddots} & {\vdots} \\ {u_{m} v_{1}} & {u_{m} v_{2}} & {\ldots} & {u_{m} v_{n}}\end{array}\right] u⊗v=A=⎣⎢⎢⎢⎡u1v1u2v1⋮umv1u1v2u2v2⋮umv2……⋱…u1vnu2vn⋮umvn⎦⎥⎥⎥⎤
或者用index表示为 ( u ⊗ v ) i j = u i v j (\mathbf{u} \otimes \mathbf{v})_{i j}=u_{i} v_{j} (u⊗v)ij=uivj
内积为外积矩阵的迹
以下是矩阵的运算
哈达玛积Hadamard product
(又称作逐元素积))
A ∘ B = [ a 1 , 1 b 1 , 1 a 1 , 2 b 1 , 2 ⋯ a 1 , n b 1 , n a 2 , 1 b 2 , 1 a 2 , 2 b 2 , 2 ⋯ a 2 , n b 2 , n ⋮ ⋮ ⋱ ⋮ a m , 1 b m , 1 a m , 2 b m , 2 ⋯ a m , n 1 b m , n ] \mathbf{A} \circ \mathbf{B}=\left[\begin{array}{cccc}{a_{1,1} b_{1,1}} & {a_{1,2} b_{1,2}} & {\cdots} & {a_{1, n} b_{1, n}} \\ {a_{2,1} b_{2,1}} & {a_{2,2} b_{2,2}} & {\cdots} & {a_{2, n} b_{2, n}} \\ {\vdots} & {\vdots} & {\ddots} & {\vdots} \\ {a_{m, 1} b_{m, 1}} & {a_{m, 2} b_{m, 2}} & {\cdots} & {a_{m, n_{1}} b_{m, n}}\end{array}\right] A∘B=⎣⎢⎢⎢⎡a1,1b1,1a2,1b2,1⋮am,1bm,1a1,2b1,2a2,2b2,2⋮am,2bm,2⋯⋯⋱⋯a1,nb1,na2,nb2,n⋮am,n1bm,n⎦⎥⎥⎥⎤
2-1-17 文本数据你会如何处理?
2-1-18 文本特征表示有哪些模型?他们的优缺点都是什么?
词袋模型(Bag of Words):每篇文章看成一袋子词,并忽略每个词出现的顺序。每篇文章可以表示成一个长向量,向量中的每一位代表一个单词,该维对应的权重则反映这个词在原文章中的重要程度,常用TF-IDF来计算权重。
缺点:无法识别出两个不同的词或者词组具有相同的主题。
TF-IDF
N-gram模型:将连续出现的n个词(n<=N)组成的词组也作为一个单独的特征放到向量表示中。
缺点:无法识别出两个不同的词或者词组具有相同的主题。
主题模型(Topic Model):是一种特殊的概率图模型
词嵌入模型(Word Embedding):将词向量化;核心思想是将每个词映射到低维空间(K=50~300维)上的一个稠密向量。K维空间的每一维也可以看作一个隐含的主题
T F − I D F ( t , d ) = T F ( t , d ) × I D F ( t ) {\rm TF-IDF}(t,d) = {\rm TF}(t,d) \times {\rm IDF}(t) TF−IDF(t,d)=TF(t,d)×IDF(t)
其中 T F ( t , d ) {\rm TF}(t,d) TF(t,d) 为单词t在文档d中出现的频率, I D F ( t ) {\rm IDF}(t) IDF(t) 是逆文档频率,用来衡量单词t对表达语义所起的重要性
I D F ( t ) = l o g 文 章 总 数 包 含 单 词 t 的 文 章 总 数 + 1 {\rm IDF}(t) = {\rm log} \frac{文章总数}{包含单词t的文章总数+1} IDF(t)=log包含单词t的文章总数+1文章总数
优点:
2-1-20 N-gram算法是什么?有什么优缺点?
2-1-21 讲解一下word2vec工作原理?损失函数是什么?
定义中心词预测上下文 p ( w t + j ∣ w t ) p\left(w_{t+j} | w_{t}\right) p(wt+j∣wt)
负采样
[ ]
2-1-22 讲解一下LDA模型原理和训练过程?
2-1-23 Word2vec和LDA两个模型有什么区别和联系?
2-1-24 Skin-gram和cbow有何异同?
不同点:skip-gram使用中心词预测上下文;CBOW用上下文预测中心词
相同点:都是根据word共现的频率建模word的相似度
2-1-25 图像数据如何处理?有哪些常用的图像特征提取方法
2-1-26 你是怎样做特征选择的?卡方检验、信息值(IV)、VOE都是如何计算?
从给定的特征集合中选出相关特征子集的过程称作特征选择feature selection
。
进行特征选择的原因:
首先,在现实任务中经常会遇到维数灾难问题,这是由于属性过多造成的。如果能从中选择出重要的特征,使得后续学习过程仅仅需要在一部分特征上构建模型,则维数灾难问题会大大减轻。
从这个意义上讲,特征选择与降维技术有相似的动机。事实上它们是处理高维数据的两大主流技术。
其次,去除不相关特征往往会降低学习任务的难度。
要想从初始的特征集合中选取一个包含了所有重要信息的特征子集,如果没有任何领域知识作为先验假设,则只能遍历所有可能的特征组合。
这在计算上是不可行的,因为这样会遭遇组合爆炸,特征数量稍多就无法进行。
一个可选的方案是:
常见的特征选择方法大致可分为三类:过滤式filter
、包裹式wrapper
、嵌入式embedding
。
过滤式选择
过滤式方法先对数据集进行特征选择,然后再训练学习器,特征选择过程与后续学习器无关。
这相当于先用特征选择过程对初始特征进行过滤,再用过滤后的特征来训练模型。
包裹式选择
嵌入式选择
嵌入式特征选择是将特征选择与学习器训练过程融为一体,两者在同一个优化过程中完成的。即学习器训练过程中自动进行了特征选择。
以线性回归模型为例。引入 L 1 L_1 L1 范数(lasso回归)除了降低过拟合风险之外,还有一个好处:它求得的 w → \overrightarrow{\mathbf{w}} w 会有较多的分量为零。即:它更容易获得稀疏解。
于是基于 L 1 L_1 L1 正则化的学习方法就是一种嵌入式特征选择方法,其特征选择过程与学习器训练过程融为一体,二者同时完成。
w → \overrightarrow{\mathrm{w}} w取得稀疏解意味着初始的d个特征中仅有对应着 w → \overrightarrow{\mathrm{w}} w的非零分量的特征才会出现在最终模型中。 L 1 L_1 L1 正则化问题的求解可以用近端梯度下降Proximal Gradient Descent:PGD
算法求解。
2-1-27 计算特征之间的相关性方法有哪些?有什么优缺点
(1)根据给定的距离度量,在训练集 T T T 中找出与 x x x 最邻近的 k k k个点,涵盖这 k k k 个点的邻域记作 N k ( x ) N_k(x) Nk(x);
(2)在 N k ( x ) N_k(x) Nk(x)中根据分类决策规则(如多数表决)决定 x x x 的类别 y y y:
y = arg max c j ∑ x i ∈ N k ( x ) I ( y i = c j ) , i = 1 , 2 , ⋯ , N i j = 1 , 2 , ⋯ , K y=\arg \max _{c_{j}} \sum_{x_{i} \in N_{k}(x)} I\left(y_{i}=c_{j}\right), \quad i=1,2, \cdots, N_{i} \quad j=1,2, \cdots, K y=argcjmaxxi∈Nk(x)∑I(yi=cj),i=1,2,⋯,Nij=1,2,⋯,K
在上式中, I I I为指示函数,即当 y i = c j y_{i}=c_{j} yi=cj时为1,否则为0
knn优点:
理论成熟,思想简单,既可以用来做分类又可以做回归
KNN是一种在线技术,新数据可以直接加入数据集而不必进行重新训练
可用于非线性分类(数据集不要求线性可分)
和朴素贝叶斯之类的算法比,对数据没有假设,准确度高,对异常点不敏感
knn缺点:
2-2-3 Knn适合什么样的场景和数据类型?
通常最近邻分类器使用于特征与目标类之间的关系为比较复杂的数字类型,或者说二者关系难以理解,但是相似类间特征总是相似。
数据要求归一化,统一各个特征的量纲。
2-2-4 常用的距离衡量公式都有哪些?具体说明它们的计算流程,以及使用场景?
特征空间 X \mathcal X X 是n维实数向量空间 R n \mathbf{R}^n Rn , x i , x j ∈ X , x i = ( x i ( 1 ) , x i ( 2 ) , ⋯ x i ( n ) ) , x j = ( x j ( 1 ) , x j ( 2 ) , ⋯ , x j ( n ) ) x_i,x_j\in \mathcal{X}, x_i = (x_i^{(1)}, x_i^{(2)},\cdots x_i^{(n)} ), x_j = (x_j^{(1)}, x_j^{(2)}, \cdots, x_j^{(n)}) xi,xj∈X,xi=(xi(1),xi(2),⋯xi(n)),xj=(xj(1),xj(2),⋯,xj(n)) 。则 x i , x j x_i,x_j xi,xj的 L p L_p Lp距离(闵可夫斯基距离)定义为
L p ( x i , x j ) = ( ∑ l = 1 n ∣ x i ( l ) − x j ( l ) ∣ ) 1 p L_p(x_i, x_j) = (\sum_{l=1}^n |x_i^{(l)}-x_j^{(l)}|)^{\frac{1}{p}} Lp(xi,xj)=(l=1∑n∣xi(l)−xj(l)∣)p1
这里 $p \geq 1 $。
1.欧式距离
当 p = 2 p=2 p=2时,称为欧氏距离,强调数值上的绝对误差
是严格定义的距离,满足正定性、对称性、三角不等式
L 2 ( x i , x j ) = ( ∑ l = 1 n ∣ x i ( l ) − x j ( l ) ∣ ) 1 p L_2(x_i, x_j) = (\sum_{l=1}^n |x_i^{(l)}-x_j^{(l)}|)^{\frac{1}{p}} L2(xi,xj)=(l=1∑n∣xi(l)−xj(l)∣)p1
2.曼哈顿距离(p=1)
L 1 ( x i , x j ) = ∑ l = 1 n ∣ x i ( l ) − x j ( l ) ∣ L_1(x_i, x_j) = \sum_{l=1}^n |x_i^{(l)}-x_j^{(l)}| L1(xi,xj)=l=1∑n∣xi(l)−xj(l)∣
3.切比雪夫距离( p = ∞ p = \infty p=∞),各个坐标距离数值差的绝对值的最大值
L ∞ ( x i , x j ) = max l ∣ x i ( l ) − x j ( l ) ∣ L_{\infty}(x_i, x_j) = \mathop{\max}_{l} \ |x_i^{(l)}-x_j^{(l)}| L∞(xi,xj)=maxl ∣xi(l)−xj(l)∣
4.马氏距离
考虑各个分量(特征)之间的相关性并与各个分量的尺度无关。给定一个样本集合 X X X, X = ( x i j ) m × n X=(x_{ij})_{m\times n} X=(xij)m×n,其协方差矩阵记为 S S S。样本 x i x_i xi与样本 x j x_j xj之间的马氏距离 d i j d_{ij} dij定义为
d i j = [ ( x i − x j ) T S − 1 ( x i − x j ) ] 1 2 d_{ij} = [(x_i - x_j)^TS^{-1}(x_i - x_j)]^{\frac{1}{2}} dij=[(xi−xj)TS−1(xi−xj)]21
当 S S S为单位矩阵时,即样本数据的各个分量互相独立且各个分量的方差为1时,马氏距离就是欧氏距离。
汉明距离
两个等长字符串之间的汉明距离是两个字符串对应位置的不同字符的个数
1011101 与 1001001 之间的汉明距离是 2。
2143896 与 2233796 之间的汉明距离是 3。
“toned” 与 “roses” 之间的汉明距离是 3。
5.相关系数(correlation coefficient)
相关系数的绝对值越接近1,表示样本越相似;越接近0,表示样本越不相似。
x i x_i xi与 x j x_j xj之间的相关系数定义为
r i j = ∑ k = 1 m ( x k i − x ‾ i ) ( x k j − x ‾ j ) [ ∑ k = 1 m ( x k i − x ‾ i ) 2 ∑ k = 1 m ( x k j − x ‾ j ) 2 ] 1 2 r_{ij} = \frac{\sum_{k=1}^{m}\left(x_{k i}-\overline{x}_{i}\right)\left(x_{k j}-\overline{x}_{j}\right)}{\left[\sum_{k=1}^{m}\left(x_{k i}-\overline{x}_{i}\right)^{2} \sum_{k=1}^{m}\left(x_{k j}-\overline{x}_{j}\right)^{2}\right]^{\frac{1}{2}}} rij=[∑k=1m(xki−xi)2∑k=1m(xkj−xj)2]21∑k=1m(xki−xi)(xkj−xj)
x ‾ i = 1 m ∑ k = 1 m x k i , x ‾ j = 1 m ∑ k = 1 m x k j \overline{x}_{i}=\frac{1}{m} \sum_{k=1}^{m} x_{k i}, \quad \overline{x}_{j}=\frac{1}{m} \sum_{k=1}^{m} x_{k j} xi=m1k=1∑mxki,xj=m1k=1∑mxkj
4.余弦相似度
强调方向上的相对误差
不是严格定义的距离,满足正定性、对称性,不满足三角不等式
c o s ( A , B ) = A ⋅ B ∣ ∣ A ∣ ∣ 2 ∣ ∣ B ∣ ∣ 2 cos(A,B) = \frac{A \cdot B}{||A||_2 ||B||_2} cos(A,B)=∣∣A∣∣2∣∣B∣∣2A⋅B
5.KL散度
计算两个分布的差异性
不是严格定义的距离,满足正定性,不满足对称性、三角不等式
使用场景
欧氏距离:适用于向量各分量的度量标准统一的情况;当某些特征比其他特征取值大很多时,精确度会变差,很多特征值为0,即稀疏矩阵,结果不准,数据点的分布是某个圆心的半径,用欧式距离就不能比较了。
曼哈顿距离:适用于计算类似街区距离这样的实际问题。异常值对分类结果影响比欧式距离小。量纲不同时使用曼哈顿距离比欧式距离好。
总结
用距离度量相似度时,距离越小样本越相似;用相关系数时,相关系数越大样本越相似。
如果选择较小的K值,就相当于用较小的领域中的训练实例进行预测,“学习”近似误差会减小,只有与输入实例较近或相似的训练实例才会对预测结果起作用,与此同时带来的问题是“学习”的估计误差会增大,换句话说,K值的减小就意味着整体模型变得复杂,容易发生过拟合;
如果选择较大的K值,就相当于用较大领域中的训练实例进行预测,其优点是可以减少学习的估计误差,但缺点是学习的近似误差会增大。这时候,与输入实例较远(不相似的)训练实例也会对预测器作用,使预测发生错误,且K值的增大就意味着整体的模型变得简单。
K=N,则完全不足取,因为此时无论输入实例是什么,都只是简单的预测它属于在训练实例中最多的累,模型过于简单,忽略了训练实例中大量有用信息。
在实际应用中,K值一般取一个比较小的数值,例如采用交叉验证法(简单来说,就是一部分样本做训练集,一部分做测试集)来选择最优的K值。
2-2-6 介绍一下Kd树?如何建树,以及如何搜索最近节点?
kd树是一种对k维空间中的实例点进行存储,以便对其进行快速检索的树形数据结构。kd树是二叉树,表示对k维空间的一个划分。构造kd树相当于不断地用垂直于坐标轴的超平面将k维空间切分,构成一系列的k维超矩形区域。kd树的每个节点对应于一个k维超矩形区域。
构造平衡kd树过程:
输入:k维空间数据集 T = { x 1 , x 2 , ⋯ , x N } T=\left\{x_{1}, x_{2}, \cdots, x_{N}\right\} T={x1,x2,⋯,xN},其中 x i = ( x i ( 1 ) , x i ( 2 ) , ⋯ , x i ( k ) ) T , i = 1 , 2 , ⋯ , N i x_{i}=\left(x_{i}^{(1)}, x_{i}^{(2)}, \cdots, x_{i}^{(k)}\right)^{\mathrm{T}}, \quad i=1,2, \cdots, N_{\mathrm{i}} xi=(xi(1),xi(2),⋯,xi(k))T,i=1,2,⋯,Ni
输出:kd树
(1)开始:构造根节点,根节点对应于包含T的k维空间的超矩形区域
选择 $x^{(1)} $ 为坐标轴,以T中所有实例的 $x^{(1)} $ 坐标的中位数为切分点,将根节点对应的超矩形区域且分为两个子区域。切分由通过切分点并与坐标轴 x ( 1 ) x^{(1)} x(1)垂直的超平面实现。
由根节点生成深度为1的左、右子节点:左子节点对应坐标 x ( 1 ) x^{(1)} x(1)小于切分点的子区域,右子节点对应于坐标 x ( 1 ) x^{(1)} x(1) 大于切分点的子区域。
将落在切分超平面上的实例点保存在根节点。
(2)重复:对深度为 j j j 的节点,选择 x ( l ) x^{(l)} x(l) 为切分的坐标轴, l = j ( m o d k ) + 1 l = j({\rm mod}\ k) + 1 l=j(mod k)+1,以该节点的区域中所有实例的 x ( l ) x^{(l)} x(l) 坐标的中位数为切分点,将该节点对应的超矩形区域切分为两个子区域。切分由通过切分点并与坐标轴 x ( l ) x^{(l)} x(l)垂直的超平面实现。
由该节点生成深度为 j + 1 j+1 j+1 的左、右子节点:左子节点对应坐标 x ( l ) x^{(l)} x(l)小于切分点的子区域,右子节点对应坐标 x ( l ) x^{(l)} x(l)大于切分点的子区域。
将落在切分超平面上的实例点保存在根节点。
(3)直到两个子区域没有实例存在时停止,从而形成kd树的区域划分
算法:用kd树的最近邻搜索
输入:已构造的kd树:目标点 x x x;
输出: x x x的最近邻
(1)在kd树中找出包含目标点 x x x的叶节点:从根节点出发,递归地向下访问kd树。若目标点 x x x当前维的坐标小于切分点的坐标,则移动到左子节点,否则移动到右子节点。直到子节点为叶节点为止。
(2)以此叶节点为“当前最近点”。
(3)递归地向上回退,在每个节点进行以下操作:
(a)如果该节点保存的实例点比当前最近点距离目标点更近,则以该实例点作为“当前最近点”
(b)当前最近点一定存在于该节点一个子节点对应的区域。检查该子节点的父节点的另一子节点(兄弟节点)对应区域是否有更近的点。具体地,检查另一子节点对应的区域是否与以目标点为球心、以目标点与“当前最近点”间的距离为半径的超球体相交。
如果相交,可能在另一个子节点对应的区域内存在距目标点更近的点,移动到另一个子节点。接着递归地进行最近邻搜索;
如果不相交,向上回退
(4)当回退到根节点时,搜索结束。最后的“当前最近点”即为 x x x的最近邻点。
如果实例点是随机分布的,kd树搜索的平均计算复杂度是 O ( l o g N ) O({\rm log} N) O(logN),这里 N N N 是训练实例数。**kd树更适用与训练实例数远大于空间维数时的k近邻搜索。**当空间维数接近训练实例数时,它的效率会迅速下降,几乎接近线性扫描。
hinge loss + kernel method
2-3-1 简单讲解SVM模型原理?
支持向量机是是一种二类分类模型,它的基本模型是是定义在特征空间的间隔最大的线性分类器,间隔最大,间隔最大使它有别于感知机;支持向量机还包括核技巧,这使它成为实质上的非线性分类器。支持向量机的学习策略是间隔最大化,可形式化为求解凸二次规划的问题,也等价于正则化的合页损失函数最小化问题。
线性可分支持向量机:当训练数据线性可分,通过硬间隔最大化,学习一个线性的分类器
线性支持向量机:当训练数据近似线性可分,通过软间隔最大化,学习一个线性的分类器
非线性支持向量机:当训练数据线性不可分,通过使用核技巧及软间隔最大化,学习非线性分类器
2-3-2 SVM为什么会对缺失值敏感?实际应用时候你是如何处理?
涉及到距离度量(distance measurement)时,如计算两个点之间的距离,缺失数据就变得比较重要。如果缺失值处理不当就会导致效果很差,如SVM,KNN。
常用的缺失值处理方法:
(1)把数值型变量(numerical variables)中的缺失值用其所对应的类别中(class)的中位数(median)替换。把描述型变量(categorical variables)缺失的部分用所对应类别中出现最多的数值替代(most frequent non-missing value)。【快速简单但效果差】(平均数、中位数、众数、插值等)
(2)将缺失值当成新的数值,NaN
(3)忽略该项数据(当缺失少时)
2-3-3 SVM为什么可以分类非线性问题?
原输入空间是一个非线性可分问题,能用一个超曲面将正负例正确分开;
通过核技巧的非线性映射,将输入空间的超曲面转化为特征空间的超平面,原空间的非线性可分问题就变成了新空间的的线性可分问题。低维映射到高维。
在核函数 K ( x , z ) K(x,z) K(x,z) 给定的条件下,可以利用解线性分类问题的方法求解非线性分类问题的支持向量机。学习是隐式地在特征空间进行的,在学习和预测中只定义核函数 K ( x , z ) K(x,z) K(x,z),而不需要显式地定义特征空间和映射函数 ϕ \phi ϕ,这样的技巧成为核技巧。通常直接计算 K ( x , z ) K(x,z) K(x,z)比较容易,而通过 ϕ ( x ) \phi(x) ϕ(x)和 ϕ ( z ) \phi(z) ϕ(z)计算 K ( x , z ) K(x,z) K(x,z)并不容易。
对于给定核 K ( x , z ) K(x,z) K(x,z),特征空间和映射函数的取法并不唯一。
2-3-4 常用的核函数有哪些?你是如何选择不同的核函数的?
核函数定义:设 X \mathcal{X} X是输入空间,又设 H \mathcal{H} H为特征空间,如果存在一个从 X \mathcal{X} X到 H \mathcal{H} H的映射
ϕ ( x ) : X → H \phi(x) : \mathcal{X} \rightarrow \mathcal{H} ϕ(x):X→H
使得对所有 x , z ∈ X x, z \in \mathcal{X} x,z∈X,函数 K ( x , z ) K(x, z) K(x,z)满足条件
K ( x , z ) = ϕ ( x ) ⋅ ϕ ( z ) K(x, z)=\phi(x) \cdot \phi(z) K(x,z)=ϕ(x)⋅ϕ(z)
则称 K ( x , z ) K(x, z) K(x,z)为核函数, ϕ ( x ) \phi(x) ϕ(x)为映射函数,式中 ϕ ( x ) ⋅ ϕ ( z ) \phi(x) \cdot \phi(z) ϕ(x)⋅ϕ(z) 为 ϕ ( x ) 为\phi(x) 为ϕ(x)和 ϕ ( z ) \phi(z) ϕ(z)的内积
线性核函数
K ( x , z ) = x ⋅ z K(x,z) = x\cdot z K(x,z)=x⋅z
主要用于线性可分的情况。可以看到特征空间到输入空间的维度是一样的,其参数少速度快,对于线性可分数据,其分类效果很理想,因此我们通常首先尝试用线性核函数来做分类,看看效果如何,如果不行再换别的。
多项式核函数(polynomial kernel function)
K ( x , z ) = ( x ⋅ z + 1 ) p K(x, z)=(x \cdot z+1)^{p} K(x,z)=(x⋅z+1)p
对应的支持向量机是一个p次多项式分类器。分类决策函数为
f ( x ) = sign ( ∑ i = 1 N s a i ∗ y i ( x i ⋅ x + 1 ) p + b ∗ ) f(x)=\operatorname{sign}\left(\sum_{i=1}^{N_{s}} a_{i}^{*} y_{i}\left(x_{i} \cdot x+1\right)^{p}+b^{*}\right) f(x)=sign(i=1∑Nsai∗yi(xi⋅x+1)p+b∗)
多项式核函数可以实现将低维的输入空间映射到高维的特征空间,但是多项式核函数的参数多,当多项式的阶数比较高的时候,核矩阵的元素值将趋于无穷大或者无穷小,计算复杂度会大到无法计算。
高斯核函数(Gaussian kernel function)
K ( x , z ) = e x p ( − 1 2 ∣ ∣ x − z ∣ ∣ 2 ) = ϕ ( x ) ⋅ ϕ ( z ) K(x,z) = exp(-\frac{1}{2} \ ||x - z ||_2 ) = \phi(x) \cdot \phi(z) K(x,z)=exp(−21 ∣∣x−z∣∣2)=ϕ(x)⋅ϕ(z)
对应的支持向量机是高斯径向基函数(radial basis function)分类器,分类决策函数为
f ( x ) = sign ( ∑ i = 1 N s a i ∗ y i exp ( − ∥ x − x i ∥ 2 2 σ 2 ) + b ∗ ) f(x)=\operatorname{sign}\left(\sum_{i=1}^{N_{s}} a_{i}^{*} y_{i} \exp \left(-\frac{\|x-x_i\|^{2}}{2 \sigma^{2}}\right)+b^{*}\right) f(x)=sign(i=1∑Nsai∗yiexp(−2σ2∥x−xi∥2)+b∗)
高斯径向基函数是一种局部性强的核函数,其可以将一个样本映射到一个更高维的空间内,该核函数是应用最广的一个,无论大样本还是小样本都有比较好的性能,而且其相对于多项式核函数参数要少,因此大多数情况下在不知道用什么核函数的时候,优先使用高斯核函数。
Sigmod核函数
K ( x , z ) = tanh ( η x ⋅ z + θ ) K\left(x, z\right)=\tanh \left(\eta \ x \cdot z +\theta\right) K(x,z)=tanh(η x⋅z+θ)
总结
2-3-5 RBF核函数一定线性可分么?为什么
根据Cover定理,从低维度映射到高维度后,线性可分的可能性比较大。
而RBF核函数将原始空间映射到无穷维的特征空间,基本线性可分(也有线性不可分的情况,如加入噪声:同一样本不同标签)。如果忽略噪声,同时允许一定限度的误差,可以说升到足够高的维度,几乎所有数据集都是线性可分了。
同时,维度特别高,几乎一定线性可分,也以为这模型特别复杂,几乎一定会碰到过拟合问题。
2-3-6 SVM属于线性模型还是非线性模型?为什么?
基本模型是一个线性分类器;而通过使用核函数可以学习非线性支持向量机
2-3-7 训练误差为0的SVM分类器一定存在吗?说明原因?
对于训练一个不加入松弛变量的SVM模型时,一定存在。百面p55
对于加入松弛变量的SVM的训练误差不一定能达到0
2-3-8 当用支持向量机进行分类时,支持向量越多越好还是越少越好
结论:在n维特征空间中,线性SVM一般会产生n+1个支持向量(不考虑退化情况)
通常的SVM的使用会伴随着核技巧(kernel),这用于将低维空间映射到一个更高维的空间,使得原本不线性可分的数据点变得在高维空间中线性可分。虽然这种映射是隐式的,我们通常并不知道映射到的空间是什么样子。但是根据之前的结论,我们可以认为如果训练出来的SVM有d+1个支持向量,这个kernel在这个任务里就讲原来的数据映射到了一个d维的空间中,并使得其线性可分。
更高的维度通常意味着更高的模型复杂度,所以支持向量越多,表示着训练得到的模型越复杂。根据泛化理论,这意味着更有过拟合的风险。
如果在性能一致的情况下,更少的支持向量可能是更好的。但是这一点其实不绝对,因为泛化理论仅仅是误差的上界,实际的泛化情况的决定因素比较复杂,也可能取决于kernel的性质。所以还是自己做cross validation比较好。
2-3-9 多类分类问题
某些算法原生的支持多分类,如:决策树、最近邻算法等。但是有些算法只能求解二分类问题,如:支持向量机。
对于只能求解二分类问题的算法,一旦遇到问题是多类别的,那么可以将多分类问题拆解成二分类任务求解。
即:
多分类问题有三种拆解方式:
一对其余(One-vs-rest:OvR
) 。
一对一(one-vs-one:OvO
) 。
多对多(many-vs-many:MvM
) 。
2-4-1 讲解贝叶斯定理?
P ( B i ∣ A ) = P ( B i ) P ( A ∣ B i ) ∑ j = 1 n P ( B j ) P ( A ∣ B j ) P\left(B_{i} | A\right)=\frac{P\left(B_{i}\right) P\left(A | B_{i}\right)}{\sum_{j=1}^{n} P\left(B_{j}\right) P\left(A | B_{j}\right)} P(Bi∣A)=∑j=1nP(Bj)P(A∣Bj)P(Bi)P(A∣Bi)
2-4-2 什么是条件概率、边缘概率、联合概率?
条件概率:条件概率表示在条件 Y = b Y=b Y=b成立的情况下, X = a X=a X=a的概率,记作 P ( X = a ∣ Y = b ) P(X=a|Y=b) P(X=a∣Y=b)或 P ( a ∣ b ) P(a|b) P(a∣b)。它具有如下性质: “在条件Y=b下X的条件分布”也是一种“X的概率分布”,因此穷举X的可取值之后,所有这些值对应的概率之和为1 即:
∑ a P ( X = a ∣ Y = b ) = 1 \sum_{a} P(X=a | Y=b)=1 a∑P(X=a∣Y=b)=1
边缘概率:仅与单个随机变量有关的概率称为边缘概率,如 P ( X = a ) P(X=a) P(X=a) 或 P ( Y = b ) P(Y=b) P(Y=b)
联合概率:联合概率指的是包含多个条件且所有条件同时成立的概率,记作 P ( X = a , Y = b ) P(X=a,Y=b) P(X=a,Y=b)或 P ( a , b ) P(a,b) P(a,b)
联合概率、边缘概率与条件概率的关系:
P ( X = a ∣ Y = b ) = P ( X = a , Y = b ) P ( Y = b ) P(X=a | Y=b)=\frac{P(X=a, Y=b)}{P(Y=b)} P(X=a∣Y=b)=P(Y=b)P(X=a,Y=b)
2-4-3 后验概率最大化的含义是什么?
朴素贝叶斯法将实例分到后验概率最大的类中。后验概率最大化这等价于期望风险最小化。
假设选择0-1损失函数:
L ( Y , f ( X ) ) = { 1 , Y ≠ f ( X ) 0 , Y = f ( X ) L(Y, f(X))=\left\{\begin{array}{ll}{1,} & {Y \neq f(X)} \\ {0,} & {Y=f(X)}\end{array}\right. L(Y,f(X))={1,0,Y=f(X)Y=f(X)
其中 f ( X ) f(X) f(X)是分类决策函数。这是期望风险函数为
R cap ( f ) = E [ L ( Y , f ( X ) ) ] R_{\operatorname{cap}}(f)=E[L(Y, f(X))] Rcap(f)=E[L(Y,f(X))]
期望是对联合分布 P ( X , Y ) P(X,Y) P(X,Y) 取的。由此取条件期望
R e x p ( f ) = E X ∑ k = 1 K [ L ( c k , f ( X ) ) ] P ( c k ∣ X ) R_{\mathrm{exp}}(f)=E_{X} \sum_{k=1}^{K}\left[L\left(c_{k}, f(X)\right)\right] P\left(c_{k} | X\right) Rexp(f)=EXk=1∑K[L(ck,f(X))]P(ck∣X)
为了使期望奉献最小化,只需对 X = x X=x X=x 逐个最小化,由此得到
f ( x ) = arg min y ∈ Y ∑ k = 1 K L ( c k , y ) P ( c k ∣ X = x ) = arg min y ∈ Y ∑ k = 1 K P ( y ≠ c k ∣ X = x ) = arg min y ∈ Y ( 1 − P ( y = c k ∣ X = x ) ) = arg max y ∈ Y P ( y = c k ∣ X = x ) \begin{aligned} f(x) &=\arg \min _{y \in \mathcal{Y}} \sum_{k=1}^{K} L\left(c_{k}, y\right) P\left(c_{k} | X=x\right) \\ &=\arg \min _{y \in \mathcal{Y}} \sum_{k=1}^{K} P\left(y \neq c_{k} | X=x\right) \\ &=\arg \min _{y \in \mathcal{Y}}\left(1-P\left(y=c_{k} | X=x\right)\right) \\ &=\arg \max _{y \in \mathcal{Y}} P\left(y=c_{k} | X=x\right) \end{aligned} f(x)=argy∈Ymink=1∑KL(ck,y)P(ck∣X=x)=argy∈Ymink=1∑KP(y=ck∣X=x)=argy∈Ymin(1−P(y=ck∣X=x))=argy∈YmaxP(y=ck∣X=x)
这样一来,根据期望风险最小化准则就得到了后延概率最大化准则:
f ( x ) = arg max c k P ( c k ∣ X = x ) f(x)=\arg \max _{c_{k}} P\left(c_{k} | X=x\right) f(x)=argckmaxP(ck∣X=x)
即朴素贝叶斯法所采用原理
2-4-4 朴素贝叶斯模型如何学习的?训练过程是怎样?
对于给定的训练数据集,首先基于特征条件独立性假设学习输入输出的联合概率分布;
然后基于此模型,对给定的输入x,利用贝叶斯定理求出后验概率最大的输出y。
训练过程:
(1)计算先验概率及条件概率
P ( Y = c k ) = ∑ i = 1 N I ( y i = c k ) N , k = 1 , 2 , ⋯ , K P ( X ( j ) = a j l ∣ Y = c k ) = ∑ i = 1 N I ( x i ( j ) = a j , y i = c k ) ∑ i = 1 N I ( y i = c k ) j = 1 , 2 , ⋯ , n ; l = 1 , 2 , ⋯ , S j ; k = 1 , 2 , ⋯ , K \begin{array}{l}{P\left(Y=c_{k}\right)=\frac{\sum_{i=1}^{N} I\left(y_{i}=c_{k}\right)}{N}, \quad k=1,2, \cdots, K} \\ {P\left(X^{(j)}=a_{j l} | Y=c_{k}\right)=\frac{\sum_{i=1}^{N} I\left(x_{i}^{(j)}=a_{j}, y_{i}=c_{k}\right)}{\sum_{i=1}^{N} I\left(y_{i}=c_{k}\right)}} \\ {j=1,2, \cdots, n ; \quad l=1,2, \cdots, S_{j} ; \quad k=1,2, \cdots, K}\end{array} P(Y=ck)=N∑i=1NI(yi=ck),k=1,2,⋯,KP(X(j)=ajl∣Y=ck)=∑i=1NI(yi=ck)∑i=1NI(xi(j)=aj,yi=ck)j=1,2,⋯,n;l=1,2,⋯,Sj;k=1,2,⋯,K
(2)对于给定实例 x = ( x ( 1 ) , x ( 2 ) , ⋯ , x ( n ) ) T x=\left(x^{(1)}, x^{(2)}, \cdots, x^{(n)}\right)^{\mathrm{T}} x=(x(1),x(2),⋯,x(n))T,计算
P ( Y = c k ) ∏ i = 1 n P ( X ( j ) = x ( j ) ∣ Y = c k ) , k = 1 , 2 , ⋯ , K P\left(Y=c_{k}\right) \prod_{i=1}^{n} P\left(X^{(j)}=x^{(j)} | Y=c_{k}\right), \quad k=1,2, \cdots, K P(Y=ck)i=1∏nP(X(j)=x(j)∣Y=ck),k=1,2,⋯,K
(3)确定实例x的类(最大后验概率)
y = arg max c k P ( Y = c k ) ∏ j P ( X ( j ) = x ( j ) ∣ Y = c k ) y = \arg\max_{c_k}\ P(Y=c_k)\prod_{j}P(X^{(j)}=x^{(j)}|Y=c_k) y=argckmax P(Y=ck)j∏P(X(j)=x(j)∣Y=ck)
2-4-5 你如何理解生成模型和判别模型?
生成方法由数据学习联合概率分布 P ( X , Y ) P(X,Y) P(X,Y),然后求出条件概率分布 P ( Y ∣ X ) P(Y|X) P(Y∣X)作为预测模型:
P ( Y ∣ X ) = P ( X , Y ) P ( X ) P(Y|X) = \frac{P(X,Y)}{P(X)} P(Y∣X)=P(X)P(X,Y)
之所以成为生成方法,是因为模型表示了给定输入 X X X 产生输出 Y Y Y的生成关系。
典型的生成模型:朴素贝叶斯法、隐马尔可夫模型。
判别方法由数据直接学习决策函数 f ( X ) f(X) f(X) 或者条件概率分布 P ( X , Y ) P(X,Y) P(X,Y)作为预测的模型,关心的是对给定的输入 X X X,应该预测什么样的输出 Y Y Y。
典型的判别模型:k近邻、感知机、决策树、逻辑斯蒂回归、最大熵模型、支持向量机、提升方法、条件随机场。
2-4-6 朴素贝叶斯模型“朴素”体现在哪里?存在什么问题?有哪些优化方向?
"朴素"体现在朴素贝叶斯模型对条件概率分布作了条件独立性假设,这是一个较强的假设。
P ( X = x ∣ Y = c k ) = P ( X ( 1 ) = x ( 1 ) , ⋯ , X ( n ) = x ( n ) ∣ Y = c k ) = ∏ j = 1 n P ( X ( j ) = x ( j ) ∣ Y = c k ) \begin{aligned} P(X&=x | Y=c_{k} )=P\left(X^{(1)}=x^{(1)}, \cdots, X^{(n)}=x^{(n)} | Y=c_{k}\right) \\ &=\prod_{j=1}^{n} P\left(X^{(j)}=x^{(j)} | Y=c_{k}\right) \end{aligned} P(X=x∣Y=ck)=P(X(1)=x(1),⋯,X(n)=x(n)∣Y=ck)=j=1∏nP(X(j)=x(j)∣Y=ck)
存在问题:当特征分布不满足条件独立性假设时,分类的性能不高
优化方法:贝叶斯网络
2-4-7 什么是贝叶斯网络?它能解决什么问题?
朴素贝叶斯法假设输入变量都是条件独立的,如果假设他们之间存在概率依存关系,模型就被成了贝叶斯网络。
贝叶斯网络也称为“信念网”,借助有向无环图来刻画属性之间的依赖关系,并使用条件概率表来描述属性的联合概率分布。贝叶斯网结构有效地表达了属性的条件独立性。
具体来说,一个贝叶斯网B由结构G和参数 θ \theta θ 表示,即 B = < G , θ > B =
给定父节点集,贝叶斯网假设每个属性与它的非后裔属性独立,于是将属性的联合概率分布定义为
P B ( x 1 , x 2 , … , x d ) = ∏ i = 1 d P B ( x i ∣ π i ) = ∏ i = 1 d θ x i ∣ π i 以 上 图 为 例 , 联 合 概 率 分 布 定 义 为 P_{B}\left(x_{1}, x_{2}, \ldots, x_{d}\right)=\prod_{i=1}^{d} P_{B}\left(x_{i} | \pi_{i}\right)=\prod_{i=1}^{d} \theta_{x_{i} | \pi_{i}}以上图为例,联合概率分布定义为 PB(x1,x2,…,xd)=i=1∏dPB(xi∣πi)=i=1∏dθxi∣πi以上图为例,联合概率分布定义为
P ( x 1 , x 2 , x 3 , x 4 , x 5 ) = P ( x 1 ) P ( x 2 ) P ( x 3 ∣ x 1 ) P ( x 4 ∣ x 1 , x 2 ) P ( x 5 ∣ x 2 ) P\left(x_{1}, x_{2}, x_{3}, x_{4}, x_{5}\right)=P\left(x_{1}\right) P\left(x_{2}\right) P\left(x_{3} | x_{1}\right) P\left(x_{4} | x_{1}, x_{2}\right) P\left(x_{5} | x_{2}\right) P(x1,x2,x3,x4,x5)=P(x1)P(x2)P(x3∣x1)P(x4∣x1,x2)P(x5∣x2)
贝叶斯网学习过程
精确求解NP难,所以(1)贪心法:从某个网络结构出发,每次调整一条边,直到评分函数值不再降低(2)给网络结构施加约束条件:如限定为树形结构等。
贝叶斯网推断
理想情况根据贝叶斯网定义的联合概率分布来精确计算后验概率,但这样的精确推断时NP难的。近似推断采用吉布斯采样法,通过随机游走,使马尔可夫链趋于平稳分布。
2-4-8 为什么说朴素贝叶斯也是线性模型而不是非线性模型呢?
线性分类器是通过特征的线性组合来做出分类决定的分类器。本质上,朴素贝叶斯分类器是一种线性分类器。
朴素贝叶斯分类器是建立在属性变量相互独立的基础上,后验概率为判定准则的分类器。不等式1成立,则样例x=[x_1,…,x_n]为正类。否则,样例为负类。
(1)
线性分类器直观地来说,是在高维样本空间中找到一组超平面,将样本空间划分了两个区域。每个区域对应于不同的类别。数学上来说,线性分类器能找到权值向量w,使得判别公式可以写成特征值的线性加权组合。
(2)
如果公式2成立,则样本属于正类;反之,则样本属于负类。
离散特征的朴素贝叶斯分类器
一般离散特征的取值范围有两种,{-1,1}或者{0,1}。这两种取值方式不会影响分析。不妨假设离散特征的取值范围为{-1,1}。下面的不等式成立,样例x=[x_1,…,x_n]为正类。
(3)
对于某个特征x,我们很容易推导出下面的公式
(4)
其中p(x|F)也有类似的结果,从而有
(5)
将公式5带入朴素贝叶斯分类器的公式3,得到下面的公式
(6)
根据公式6,离散特征的朴素贝叶斯分类器判别公式能够写成特征值的加权线性组合。也就是说,离散特征的朴素贝叶斯分类器本质上是线性分类器。
2-4-9 如何解决用极大似然法可能出现所要估计的概率为0的情况?
分子加1,分母加可能情况数
用极大似然法估计可能会出现所要估计的概率值为0的情况。这是会影响到后验概率的计算结果,使分类产生偏差。解决这一问题的方法是采用贝叶斯估计。具体地,条件概率的贝叶斯估计是
P λ ( X ( j ) = a j l ∣ Y = c k ) = ∑ i = 1 N I ( x i ( j ) = a j l , y i = c k ) + λ ∑ i = 1 N I ( y i = c k ) + S j λ P_{\lambda}\left(X^{(j)}=a_{j l} | Y=c_{k}\right)=\frac{\sum_{i=1}^{N} I\left(x_{i}^{(j)}=a_{j l}, y_{i}=c_{k}\right)+\lambda}{\sum_{i=1}^{N} I\left(y_{i}=c_{k}\right)+S_{j} \lambda} Pλ(X(j)=ajl∣Y=ck)=∑i=1NI(yi=ck)+Sjλ∑i=1NI(xi(j)=ajl,yi=ck)+λ
式中 λ ≥ 0 \lambda \geq 0 λ≥0。等价于在随机变量各个取值的频数上赋予一个正数 λ \lambda λ。当 λ = 0 \lambda=0 λ=0时就是极大似然估计。常取 λ = 1 \lambda=1 λ=1,这时称为拉普拉斯平滑(laplacian smoothing)。显然,对任何 l = 1 , 2 , ⋯ , S j , k = 1 , 2 , ⋯ , K l=1,2, \cdots, S_{j}, \quad k=1,2, \cdots, K l=1,2,⋯,Sj,k=1,2,⋯,K 有
P λ ( X ( j ) = a j l ∣ Y = c k ) > 0 ∑ l = 1 s j P ( X ( j ) = a j l ∣ Y = c k ) = 1 \begin{array}{l}{P_{\lambda}\left(X^{(j)}=a_{j l} | Y=c_{k}\right)>0} \\ {\sum_{l=1}^{s_{j}} P\left(X^{(j)}=a_{j l} | Y=c_{k}\right)=1}\end{array} Pλ(X(j)=ajl∣Y=ck)>0∑l=1sjP(X(j)=ajl∣Y=ck)=1
表明上式确实为一种概率分布。同样,先验概率的贝叶斯估计是
P λ ( Y = c k ) = ∑ i = 1 N I ( y i = c k ) + λ N + K λ P_{\lambda}\left(Y=c_{k}\right)=\frac{\sum_{i=1}^{N} I\left(y_{i}=c_{k}\right)+\lambda}{N+K \lambda} Pλ(Y=ck)=N+Kλ∑i=1NI(yi=ck)+λ
2-5-1 线性回归的基本思想是?
2-5-2 什么是“广义线性模型”?
考虑单调可微函数 g ( ⋅ ) g(\cdot) g(⋅),令 g ( y ) = w → T x → + b g(y)=\overrightarrow{\mathbf{w}}^{T} \overrightarrow{\mathbf{x}}+b g(y)=wTx+b,这样得到的模型称作广义线性模型 (generalized linear model
)。其中函数 g ( ⋅ ) g(\cdot) g(⋅) 称作联系函数 (link function
) 。
2-5-3 线性回归常用的损失函数有哪些?优化算法有哪些?
2-5-4 线性回归适用什么类型的问题?有哪些优缺点?
2-5-5 请用最小二乘法推倒参数更新公式?
不同点:
相同点:
联系:
如果把一个事件的几率(odds)定义为该事件发生的概率与不发生概率的比值 p 1 − p \frac{p}{1-p} 1−pp ,那么逻辑回归可以看做是对于"y=1|x"这一事件的对数几率的线性回归
l o g p 1 − p = θ T x , 其 中 p = P ( y = 1 ∣ x ) {\rm log} \frac{p}{1-p} = \theta^{T}x ,其中\ p = P(y=1|x) log1−pp=θTx,其中 p=P(y=1∣x)
可以看做广义线性模型在因变量y服从二元分布时的一个特殊情况。
\frac{1}{\sum_{j=1}^{k} e{\thetaT x}}
\left[
\begin{matrix}
e{\theta_1T x}\
e{\theta_2T x} \
\vdots \
e{\theta_kT x}
\end{matrix}
\right]
\tag{3}
$$
其中 θ 1 , θ 2 … , θ k ∈ R n \theta_1,\theta_2 \dots,\theta_k \in \mathbb{R}^n θ1,θ2…,θk∈Rn
如果存在样本可能属于多个标签的情况时,可以训练k个二分类的逻辑回归分类器。第i个分类器用以区分每个样本是否可以归为第i类。
2-6-4 为什么逻辑回归需要进行归一化或者取对数?
2-6-5 为什么逻辑回归把特征离散化之后效果会提升?
在工业界很少直接将连续值作为逻辑回归模型的特征输入,而是将连续特征离散化为一系列 0/1 的离散特征。
其优势有:
离散化之后得到的稀疏向量,内积乘法运算速度更快,计算结果方便存储。
离散化之后的特征对于异常数据具有很强的鲁棒性。
如:销售额作为特征,当销售额在 [30,100)
之间时,为1,否则为 0。如果未离散化,则一个异常值 10000 会给模型造成很大的干扰。由于其数值较大,它对权重的学习影响较大。
逻辑回归属于广义线性模型,表达能力受限,只能描述线性关系。特征离散化之后,相当于引入了非线性,提升模型的表达能力,增强拟合能力。
假设某个连续特征 j j j ,它离散化为 M M M 个 0/1 特征 j 1 , j 2 , ⋯ , j M j_{1}, j_{2}, \cdots, j_{M} j1,j2,⋯,jM 。则: w j ∗ x j → w j 1 ∗ x j 1 ′ + w j 2 ∗ x j 2 ′ + ⋯ + w j M ∗ x j M ′ w_{j} * x_{j} \rightarrow w_{j_{1}} * x_{j_{1}}^{\prime}+w_{j_{2}} * x_{j_{2}}^{\prime}+\cdots+w_{j_{M}} * x_{j_{M}}^{\prime} wj∗xj→wj1∗xj1′+wj2∗xj2′+⋯+wjM∗xjM′ 。其中 x j 1 ′ , ⋯ , x j μ ′ x_{j_{1}}^{\prime}, \cdots, x_{j_{\mu}}^{\prime} xj1′,⋯,xjμ′ 是离散化之后的新的特征,它们的取值空间都是 { 0 , 1 } \{0,1\} {0,1} 。
上式右侧是一个分段线性映射,其表达能力更强。
离散化之后可以进行特征交叉。假设有连续特征 j j j,离散化为 M M M 个 0/1 特征;连续特征 k k k,离散化为 N N N 个 0/1 特征,则分别进行离散化之后引入了 M + N M+N M+N 个特征。
假设离散化时,并不是独立进行离散化,而是特征 M + N M+N M+N 联合进行离散化,则可以得到 M × N M\times N M×N 个组合特征。这会进一步引入非线性,提高模型表达能力。
离散化之后,模型会更稳定。
如对销售额进行离散化,[30,100)
作为一个区间。当销售额在40左右浮动时,并不会影响它离散化后的特征的值。
但是处于区间连接处的值要小心处理,另外如何划分区间也是需要仔细处理。
特征离散化简化了逻辑回归模型,同时降低模型过拟合的风险。
能够对抗过拟合的原因:经过特征离散化之后,模型不再拟合特征的具体值,而是拟合特征的某个概念。因此能够对抗数据的扰动,更具有鲁棒性。
另外它使得模型要拟合的值大幅度降低,也降低了模型的复杂度。
2-6-6 类别不平衡问题你是如何处理的?什么是过采样,什么是欠采样?举例
这里讨论中,假设正类样本偏少、反类样本偏多。
threshold-moving
。undersampling
。oversampling
。再缩放
假设对样本 x → \overrightarrow{\mathbf{x}} x 进行分类时,预测为正类的概率为 p。常规的做法是将p 与一个阈值,比如 0.5 , 进行比较。 如果 p>0.5 时,就判别该样本为正类。
概率 p 刻画了样本为正类的可能性, 几率 p 1 − p \frac{p}{1-p} 1−pp 刻画了正类可能性与反类可能性的比值。
当存在类别不平衡时,假设 N + N^{+} N+ 表示正类样本数目, N − N^{-} N− 表示反类样本数目,则观测几率是 N + N − \frac{N^{+}}{N^{-}} N−N+。
假设训练集是真实样本总体的无偏采样,因此可以用观测几率代替真实几率。于是只要分类器的预测几率高于观测几率就应该判断为正类。即如果 p 1 − p > N + N − \frac{p}{1-p}>\frac{N^{+}}{N^{-}} 1−pp>N−N+ , 则预测为正类。
通常分类器都是基于概率值来进行预测的,因此需要对其预测值进行调整。在进行预测的时候,令:
p ‾ 1 − p ‾ = p 1 − p × N − N + \frac{\overline{p}}{1-\overline{p}}=\frac{p}{1-p} \times \frac{N^{-}}{N^{+}} 1−pp=1−pp×N+N−
然后再将 p ‾ \overline{p} p 跟阈值比较。这就是类别不平衡学习的一个基本策略:再缩放rescalling 。
再缩放虽然简单,但是由于“训练集是真实样本总体的无偏采样”这个假设往往不成立,所以无法基于训练集观测几率来推断出真实几率。
欠采样(下采样)
欠采样会去除一些反类使得正、反类数目接近。
欠采样若随机抛弃反类,则可能丢失一些重要信息。
常用方法是将反类划分成若干个集合供不同学习器使用,这样对每个学习器来看都是欠采样,但是全局来看并不会丢失重要信息。
过采样(上采样)
过采样会增加一些正类使得正、反类数目接近。
过采样不能简单的对原始正类进行重复采样,否则会导致严重的过拟合。
通常在原始正类之间插值来生成额外的正类。
常见的有以下过采样策略:
SMOTE
方法:对于每个正类样本 x → i + \overrightarrow{\mathbf{x}}_{i}^{+} xi+ ,从它的 k k k 近邻中随机选取一个样本点 x ^ i + \hat{\mathbf{x}}_{i}^{+} x^i+ ,然后根据下式生成一个新的正类样本: x → n e w + = x → i + + ( x ^ i + − x → i + ) × δ \overrightarrow{\mathbf{x}}_{n e w}^{+}=\overrightarrow{\mathbf{x}}_{i}^{+}+\left(\hat{\mathbf{x}}_{i}^{+}-\overrightarrow{\mathbf{x}}_{i}^{+}\right) \times \delta xnew+=xi++(x^i+−xi+)×δ ,其中 δ ∈ [ 0 , 1 ] \delta \in[0,1] δ∈[0,1] 是随机数。(插值方法)该方法有两个问题:
增加了正类样本之间重叠的可能性。
生成了一些没有提供有益信息的样本。
2-6-7 讲解L1和L2正则,它们都有什么作用,解释为什么L1比L2更容易产生稀疏解;对于存在线性相关的一组特征,L1正则如何选择特征?
L1和L2正则,都可以防止过拟合,增强模型的泛化能力;区别在于L1使参数更稀疏,达到特征选取的作用;L2使参数更接近于0
从解空间的形状来看:
L1正则项约束后的解空间是多边形,而L2正则项约束后的解空间是圆形。而多边形的解空间更容易在尖角处与等高线碰撞出稀疏解。
对于存在线性相关的一组特征,L1正则会使得部分参数为0
从函数叠加的观点:
权重衰减(L2正则化的作用)
作用:权重衰减(L2正则化)可以避免模型过拟合问题。
思考:L2正则化项有让w变小的效果,但是为什么w变小可以防止过拟合呢?
原理:(1)从模型的复杂度上解释:更小的权值w,从某种意义上说,表示网络的复杂度更低,对数据的拟合更好(这个法则也叫做奥卡姆剃刀),而在实际应用中,也验证了这一点,L2正则化的效果往往好于未经正则化的效果。(2)从数学方面的解释:过拟合的时候,拟合函数的系数往往非常大,为什么?如下图所示,过拟合,就是拟合函数需要顾忌每一个点,最终形成的拟合函数波动很大。在某些很小的区间里,函数值的变化很剧烈。这就意味着函数在某些小区间里的导数值(绝对值)非常大,由于自变量值可大可小,所以只有系数足够大,才能保证导数值很大。而正则化是通过约束参数的范数使其不要太大,所以可以在一定程度上减少过拟合情况。
2-6-8 使用交叉熵作为损失函数,梯度下降作为优化方法,推倒参数更新公式
似然函数:
L ( w ) = ∏ [ π ( x i ) ] y i [ 1 − π ( x i ) ] 1 − y i L(w)=\prod\left[\pi\left(x_{i}\right)\right]^{y_{i}}\left[1-\pi\left(x_{i}\right)\right]^{1-y_{i}} L(w)=∏[π(xi)]yi[1−π(xi)]1−yi
对数似然函数:
ln L ( w ) = ∑ [ y i ln π ( x i ) + ( 1 − y i ) ln ( 1 − π ( x i ) ) ] = ∑ [ y i ln π ( x i ) 1 − π ( x i ) + ln ( 1 − π ( x i ) ) ] = ∑ [ y i ( w ⋅ x i ) − ln ( 1 + e w ⋅ x i ) ] \begin{aligned} \ln L(w) &=\sum\left[y_{i} \ln \pi\left(x_{i}\right)+\left(1-y_{i}\right) \ln \left(1-\pi\left(x_{i}\right)\right)\right] \\=& \sum\left[y_{i} \ln \frac{\pi\left(x_{i}\right)}{1-\pi\left(x_{i}\right)}+\ln \left(1-\pi\left(x_{i}\right)\right)\right] \\ &=\sum\left[y_{i}\left(w \cdot x_{i}\right)-\ln \left(1+e^{w \cdot x_{i}}\right)\right] \end{aligned} lnL(w)==∑[yilnπ(xi)+(1−yi)ln(1−π(xi))]∑[yiln1−π(xi)π(xi)+ln(1−π(xi))]=∑[yi(w⋅xi)−ln(1+ew⋅xi)]
损失函数:负对数似然函数
J ( W ) = − 1 n ln L ( w ) J(W)=-\frac{1}{n} \ln L(w) J(W)=−n1lnL(w)
使用梯度下降法求解逻辑回归参数估计
求 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f8uNQOUT-1615730909700)(https://www.zhihu.com/equation?tex=J%28W%29)] 梯度: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P15pYKld-1615730909701)(https://www.zhihu.com/equation?tex=g%28w%29)] :
J ( w k ) = − 1 N ln L ( w k ) ⇒ − ln L ( w k ) = − ∑ [ y i ( w k ⋅ x i ) − ln ( 1 + e w k ⋅ x i ) ] \begin{aligned} J\left(w_{k}\right) &=-\frac{1}{N} \ln L\left(w_{k}\right) \Rightarrow-\ln L\left(w_{k}\right) \\=-& \sum\left[y_{i}\left(w_{k} \cdot x_{i}\right)-\ln \left(1+e^{w_{k} \cdot x_{i}})\right]\right.\end{aligned} J(wk)=−=−N1lnL(wk)⇒−lnL(wk)∑[yi(wk⋅xi)−ln(1+ewk⋅xi)]
g ( w k ) = − 1 N ∑ i [ x i ⋅ y i − x i ⋅ e w k ⋅ x i k 1 + e w k ⋅ x i ] = − 1 N ∑ i x i k [ y i − π ( w k ⋅ x i ) ] \begin{aligned} g\left(w_{k}\right) &= -\frac{1}{N}\sum_i\left[x_{i} \cdot y_{i}-\frac{x_{i} \cdot e^{w_{k} \cdot x_{ik}}}{1+e^{w_{k} \cdot x_{i}}}\right] \\ &=-\frac{1}{N}\sum_i x_{ik} \left[ y_{i}-\pi\left(w_{k}\cdot x_{i}\right)\right] \end{aligned} g(wk)=−N1i∑[xi⋅yi−1+ewk⋅xixi⋅ewk⋅xik]=−N1i∑xik[yi−π(wk⋅xi)]
2-7-1 FM模型与逻辑回归相比有什么优缺点?
优点:
缺点:
2-7-2 为什么FM模型计算复杂度时O(kn)?
2-7-3 介绍FFM场感知分解机器(Field-aware Factorization Machine),说说与FM异同?
2-7-4 使用FM进行模型训练时候,有哪些核心参数对模型效果影响大?
2-7-5 如何从神经网络的视角看待FM模型?
自上而下,对样本数据进行树形分类的过程。每个内部节点表示一个特征,叶节点表示一个类别。从顶部根节点开始,所有的样本聚在一起。经过根节点的划分,样本被分到不同的子节点,再根据子节点的特征进一步划分,直至所有样本被归到某一个类别(叶节点)中。
熵(entropy)是表示随机变量不确定性的度量, X X X 是一个取有限个值的离散随机变量,其概率分布为
P ( X = x i ) = p i , i = 1 , 2 , ⋯ , n P(X = x_i) = p_i, \ i=1,2,\cdots,n P(X=xi)=pi, i=1,2,⋯,n
则随机变量 X X X 的熵定义为
H ( X ) = − ∑ i = 1 n p i l o g p i H(X) = -\sum_{i=1}^{n} p_i {\rm log } \ p_i H(X)=−i=1∑npilog pi
熵越大,随机变量的不确定性就越大。
而熵其实表示的是一个系统的平均信息量。自信息量是用来描述某一条信息的大小
I = − l o g p i I = - {\rm log} \ p_i I=−log pi
通常以2为底,单位是bit;含义是用多少位二进制可以表示衡量该信息的大小。而通常我们衡量整个系统的信息量,系统存在多个事件 X = { x 1 , ⋯ , x n } X=\{x_1,\cdots,x_n\} X={x1,⋯,xn} ,每个事件的概率分布 P = { p 1 , ⋯ , p n } P=\{p_1,\cdots,p_n\} P={p1,⋯,pn} ,熵是整个系统的平均信息量 。
联合熵:将一维随机变量分布推广到多维随机变量分布
H ( X , Y ) = − ∑ x , y p ( x , y ) l o g p ( x , y ) H(X,Y) = -\sum\limits_{x,y} p(x,y)\ {\rm log}\ p(x,y) H(X,Y)=−x,y∑p(x,y) log p(x,y)
条件熵:某个特征A对于数据集D的经验条件熵 H ( D ∣ A ) H(D|A) H(D∣A) 为
H ( D ∣ A ) = − ∑ i = 1 n ∣ D i ∣ ∣ D ∣ H ( D i ) = − ∑ i = 1 n ∣ D i ∣ ∣ D ∣ ⟮ ∑ k = 1 K ∣ D i k ∣ ∣ D i ∣ l o g ∣ D i k ∣ ∣ D i ∣ ⟯ H(D|A) = - \sum_{i=1}^{n} \frac{|D_i|}{|D|} H(D_i) \\ = - \sum_{i=1}^{n} \frac{|D_i|}{|D|} \lgroup \sum_{k=1}^{K} \frac{|D_{ik}|}{|D_i|} {\rm log } \frac{|D_{ik}|}{|D_i|} \rgroup H(D∣A)=−i=1∑n∣D∣∣Di∣H(Di)=−i=1∑n∣D∣∣Di∣⟮k=1∑K∣Di∣∣Dik∣log∣Di∣∣Dik∣⟯
信息增益: g ( D , A ) g(D,A) g(D,A) 定义为数据集D的经验熵 H ( D ) H(D) H(D) 与特征A给定条件下D的经验条件熵 H ( D ∣ A ) H(D|A) H(D∣A) 的差
g ( D , A ) = H ( D ) − H ( D ∣ A ) g(D,A) = H(D) - H(D|A) g(D,A)=H(D)−H(D∣A)
信息增益比:特征A对于数据集D 的信息增益比定义为
g R ( D ∣ A ) = g ( D ∣ A ) H A ( D ) g_R(D|A) = \frac{g(D|A)}{H_A(D)} gR(D∣A)=HA(D)g(D∣A)
其中
H A ( D ) = − ∑ i = 1 n ∣ D i ∣ ∣ D ∣ l o g ∣ D i ∣ ∣ D ∣ H_A{(D)} = - \sum_{i=1}^{n} \frac{|D_i|}{|D|} {\rm log } \frac{|D_i|}{|D|} HA(D)=−i=1∑n∣D∣∣Di∣log∣D∣∣Di∣
为数据集D关于A的取值熵;n为特征A在D上的取值数目;
Gini系数:描述数据的不确定性。数据集D的Gini系数为
G i n i ( D ) = 1 − ∑ k = 1 K ( ∣ C k ∣ ∣ D ∣ ) 2 {\rm Gini}(D) = 1 - \sum_{k=1}^{K }(\frac{|C_k|}{|D|})^2 Gini(D)=1−k=1∑K(∣D∣∣Ck∣)2
其中 C k C_k Ck是 D中第k类的样本子集,K是类的个数。例如二分类问题,K=2。基尼系数越大,样本集合的不确定性也就越大,这一点与熵相似。基尼系数Gini(D,A)表示经A=a分割后集合D的不确定性。
交叉熵:刻画两个概率分布之间的距离,通过q来表示p的交叉熵为;一般p(x)为真实分布,q(x)为预测分布
交叉熵不对称。交叉熵越小,概率分布越接近
H ( p , q ) = − ∑ x p ( x ) l o g q ( x ) H(p,q) = - \sum\limits_{x} p(x) {\rm log } \ q(x) H(p,q)=−x∑p(x)log q(x)
KL散度/相对熵:
D K L ( p ∥ q ) = ∑ i = 1 n p ( x i ) log ( p ( x i ) q ( x i ) ) D_{K L}(p \| q)=\sum_{i=1}^{n} p\left(x_{i}\right) \log \left(\frac{p\left(x_{i}\right)}{q\left(x_{i}\right)}\right) DKL(p∥q)=i=1∑np(xi)log(q(xi)p(xi))
n表示事件可能发生的情况总数,KL散度的值越小表示两个分布越接近。
D K L ( p ∣ ∣ q ) = H ( p , q ) − H ( p ) D_{KL}(p||q) = H(p,q) - H(p) DKL(p∣∣q)=H(p,q)−H(p)
机器学习中,我们常常使用KL散度来评估predict和label之间的差别,但是由于KL散度的后半部分是一个常量,所以我们常常将前半部分的交叉熵作为损失函数,其实二者是一样的。
不同点 | ID3 | C4.5 | CART |
---|---|---|---|
原则 | 信息增益最大 | 信息增益比最大 | 划分后集合基尼指数最小 |
用途 | 分类 | 分类 | 分类、回归 |
输入取值 | 离散 | 离散、连续 | 离散、连续 |
树结构 | 多叉树 | 多叉树 | 二叉树 |
特征在层级间不复用 | 特征在层级间不复用 | 每个特征可被重复利用 | |
对样本特征缺失值敏感 |
ID3 最大信息增益
信息增益 g ( D , A ) g(D,A) g(D,A) 定义为数据集D的经验熵 H ( D ) H(D) H(D) 与特征A给定条件下D的经验条件熵 H ( D ∣ A ) H(D|A) H(D∣A) 的差
g ( D , A ) = H ( D ) − H ( D ∣ A ) g(D,A) = H(D) - H(D|A) g(D,A)=H(D)−H(D∣A)
选择 g ( D , A ) g(D,A) g(D,A) 最大的特征,所有样本根据此特征,划分到不同的节点上。在经验熵不为0的节点中继续生长。ID3算法只有树的生成,容易产生过拟合。
C4.5 最大信息增益比
因为信息增益对取值数目多的属性有所偏好,为了减少这种偏好带来的影响,使用信息增益比来选择最优划分属性。
CART 基尼指数
基尼系数Gini(D)用来表示集合D的不确定性。CART在每一次迭代中选择划分后基尼指数最小的特征及其对应的切分点进行分类。CART是一颗二叉树,每次将数据按特征A的区分分成两份,分别进入左右子树。
通过剪枝防止过拟合。
预剪枝是指在决策树生成的过程中,对每个节点在划分前先进行估计,若当前节点的划分不能带来决策树泛化性能提升,则停止划分,并将当前节点标记为叶子节点;此时可能存在不同类别的样本同时存于同个节点中,按照多数投票的原则判断节点所属类别
预剪枝对于何时停止决策树的生长:
(1)当树达到一定深度
(2)当到达当前节点的样本数量小于某个阈值
(3)计算每次分裂对测试集的准确度提升,小于某个阈值时停止
后剪枝则是先从训练集生成一棵完整的决策树,然后自底向上地对非叶子节点进行考察,若该节点对应的子树替换成叶子结点能带来泛化性能提升,则将该子树替换为叶子节点。
Bagging的思想是通过对数据再抽样,然后在每组样本上训练出来的模型取平均。Bagging是降低方差,防止过拟合。可以这样理解,对n个独立不相关的模型的预测结果取平均,方差是原来单个模型的 1 / n 1/n 1/n 。
随机森林属于bagging类的集成学习方法,主要好处是减小集成后分类器的方差,比基分类器的方差小。所以Bagging所采用的的基分类器最好是本身对样本分布较为敏感(不稳定分类器),这样bagging才能体现效果。而线性分类器和KNN属于较为稳定的分类器,本身方差不大,所以将他们作为基分类器使用bagging不能再原基分类器的基础上获得更好的表现。相反地,可能因为bagging的采样而使得训练中难以收敛从而增大集成分类器的偏差。
梯度提升Gradient Boosting的基本思想是根据当前模型损失函数负梯度信息来训练新加入的弱分类器,然后将训练好的弱分类器以累加的形式结合到现有的模型中。
GBDT(梯度提升决策树)的核心思想:每一棵树学的是之前所有树结果和的残差,这个残差就是加上预测之后能得到真实值的累加量。
两者都是在每一轮迭代中,利用损失函数相对于模型的负梯度方向的信息来对当前模型进行更新,只不过在梯度下降中,模型是以参数化的形式表示,从而模型的更新等价于参数的更新。
而在梯度提升中,模型并不需要参数化表示,而是直接定义在函数空间中,从而大大扩展了可以使用的模型种类。
Bagging通过模型集成降低方差,提高弱分类器的性能。
Boosting通过模型集成降低偏差,提高弱分类器的性能。
Bagging | Boosting | |
---|---|---|
降低 | 方差 | 偏差 |
训练 | 各个弱分类器可独立训练 | 弱分类器需要依次生成 |
典型方法 | 随机森林 | Adaboost,GBDT,XGBoost |
用每个样本的残差训练下一棵树,直到残差收敛到某个阈值以下,或者树的总数达到某个上限为止。
决策树内部局部并行。
优点
(1)预测阶段计算速度块,树与树之间可并行化计算
(2)在分布稠密的数据集上,泛化能力和表达能力都很好
(3)采用决策树作为弱分类器使得GBDT模型具有较好的可解释性和鲁棒性,能够自动发现特征间的高阶关系,并且不需要对数据进行特殊的预处理如归一化等
缺点
(1)GBDT在高维稀疏的数据集上,表现不如支持向量机或者神经网络
(2)GBDT在处理文本分类特征问题上,优势不如在处理数值特征时明显
(3)训练过程需要串行训练,只能在决策树内容采用一些局部并行手段提高训练速度
GDBT对异常值敏感。对于回归类的问题,如果采用平方损失函数。当出现异常值时,后续模型会对异常值关注过多。
在工程应用中,通常利用下列公式来更新模型: f m ( x → ) = f m − 1 ( x → ) + ν h m ( x → ; Θ m ) , 0 < ν ≤ 1 f_{m}(\overrightarrow{\mathbf{x}})=f_{m-1}(\overrightarrow{\mathbf{x}})+\nu h_{m}\left(\overrightarrow{\mathbf{x}} ; \Theta_{m}\right), \quad 0<\nu \leq 1 fm(