目录:

1.LR的推导,损失函数

2.逻辑回归怎么实现多分类

3.SVM中核函数选择?

4.SVM使用对偶计算的目的是什么,如何推出来的,手写推导

5.生成模型和判别模型基本形式,有哪些?

6.SVM的损失函数

7.ID3,C4.5和CART三种决策树的区别

8.L1和L2正则化的区别

9.知道哪些机器学习模型

10.LDA原理

11.KMeans算法讲讲,有什么缺点,K怎么确定

12.Boosting和bagging的区别

13.GBDT介绍一下

14.XGBOOST和GBDT的区别(待补充)

15.stacking和blending的区别

16.AdaBoost和GBDT的联系与区别

17.GBDT推导

18.RF和GBDT基分类器的区别,RF决策树怎么剪枝

19.XGBoost的特征重要性计算

20.XGBoost的正则项表达式

21.xgboost/gbdt在调参时为什么树的深度很少就能达到很高的精度?

22.xgboost原理,怎么防过拟合

23.如何防止过拟合?

24.对应时间序列的数据集如何进行交叉验证?

25.正负样本不平衡的解决办法?评价指标的参考价值?

26.生成模型和判别模型的区别

27.特征选择怎么做

1.LR的推导,损失函数

逻辑回归本质上是线性回归,只是在特征到结果的映射中加入了一层逻辑函数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),采用随机梯度上升规则,那么随机梯度上升更新规则为:

损失函数:

2.逻辑回归怎么实现多分类

方式一:修改逻辑回归的损失函数,使用softmax函数构造模型解决多分类问题,softmax分类模型会有相同于类别数的输出,输出的值为对于样本属于各个类别的概率,最后对于样本进行预测的类型为概率值最高的那个类别。

方式二:根据每个类别都建立一个二分类器,本类别的样本标签定义为0,其它分类样本标签定义为1,则有多少个类别就构造多少个逻辑回归分类器。(OvO)

若所有类别之间有明显的互斥则使用softmax分类器,若所有类别不互斥有交叉的情况则构造相应类别个数的逻辑回归分类器。

3.SVM中核函数选择?

线性核、多项式核、高斯核。

特征维数高选择线性核;

样本数量可观、特征少选择高斯核(非线性核);

样本数量非常多选择线性核(避免造成庞大的计算量)。

4.SVM使用对偶计算的目的是什么,如何推出来的,手写推导

目的有两个:一是方便核函数的引入;二是原问题的求解复杂度与特征的维数相关,而转成对偶问题后只与问题的变量个数有关。由于SVM的变量个数为支持向量的个数,相较于特征位数较少,因此转对偶问题。通过拉格朗日算子发使带约束的优化目标转为不带约束的优化函数,使得W和b的偏导数等于零,带入原来的式子,再通过转成对偶问题。

SVM目标:找出分隔最佳超平面

公式推导:

目标函数

约束条件

为了使其满足KTT条件,构建如下拉格朗日函数

即原始问题等于 minw,b maxα L(w, b, α),由于满足KKT条件,其对偶形式为maxα minw,b L(w, b, α)。 对w,b求偏导,得

解决这个问题有很多方法,一般我们使用SMO,每次取两个违反KTT条件最大的​值,将函数往反方向迭代即可。

5.生成模型和判别模型基本形式,有哪些?

生成式:朴素贝叶斯、HMM、Gaussians、马尔科夫随机场

判别式:LR,SVM,神经网络,CRF,Boosting

6.SVM的损失函数

7.ID3,C4.5和CART三种决策树的区别

ID3决策树优先选择信息增益大的属性来对样本进行划分,但是这样的分裂节点方法有一个很大的缺点,当一个属性可取值数目较多时,可能在这个属性对应值下的样本只有一个或者很少个,此时它的信息增益将很高,ID3会认为这个属性很适合划分,但实际情况下叫多属性的取值会使模型的泛化能力较差,所以C4.5不采用信息增益作为划分依据,而是采用信息增益率作为划分依据。但是仍不能完全解决以上问题,而是有所改善,这个时候引入了CART树,它使用gini系数作为节点的分裂依据。

8.L1和L2正则化的区别

L1是模型各个参数的绝对值之和,L2为各个参数平方和的开方值。L1更趋向于产生少量的特征,其它特征为0,最优的参数值很大概率出现在坐标轴上,从而导致产生稀疏的权重矩阵,而L2会选择更多的矩阵,但是这些矩阵趋向于0。

9.知道哪些机器学习模型

回归算法:回归算法是试图采用对误差的衡量来探索变量之间的关系的一类算法。 常见的回归算法包括:最小二乘法(Ordinary Least Square),逐步式回归(Stepwise Regression),多元自适应回归样条(Multivariate Adaptive Regression Splines)以及本地散点平滑估计(Locally Estimated Scatterplot Smoothing)。

决策树学习:决策树算法根据数据的属性采用树状结构建立决策模型, 决策树模型常常用来解决分类和回归问题。 常见的算法包括KNN,RF,GBDT。

基于核的算法:基于核的算法中最著名的莫过于支持向量机(SVM)了。基于核的算法把输入数据映射到一个高阶的向量空间,在这些高阶向量空间里,有些分类或者回归问题能够更容易的解决。常见的基于核的算法包括:支持向量机(Support Vector Machine,SVM), 径向基函数(Radial Basis Function,RBF),以及线性判别分析(Linear Discriminate Analysis,LDA)等。

聚类算法:聚类,就像回归一样,有时候人们描述的是一类问题,有时候描述的是一类算法。聚类算法通常按照中心点或者分层的方式对输入数据进行归并。常见的聚类算法包括 k-Means算法以及期望最大化算法(Expectation Maximization,EM)。

集成算法:集成算法用一些相对较弱的学习模型独立地就同样的样本进行训练,然后把结果整合起来进行整体预测。集成算法的主要难点在于究竟集成哪些独立的较弱的学习模型以及如何把学习结果整合起来。这是一类非常强大的算法,同时也非常流行。常见的算法包括:Boosting,Bagging,AdaBoost,随机森林(Random Forest),梯度决策提升树GBDT。

人工神经网络:人工神经网络算法模拟生物神经网络,是一类模式匹配算法。通常用于解决分类和回归问题。人工神经网络是机器学习的一个庞大的分支,有几百种不同的算法。(其中深度学习就是其中的一类算法,我们会单独讨论)

10.LDA原理

LDA是一种基于有监督学习的降维方式,将数据集在低维度的空间进行投影,要使得投影后的同类别的数据点间的距离尽可能的靠近,而不同类别间的数据点的距离尽可能的远。

K-meas:基本K-Means算法的思想很简单,事先确定常数K,常数K意味着最终的聚类类别数,首先随机选定初始点为质心,并通过计算每一个样本与质心之间的相似度(这里为欧式距离),将样本点归到最相似的类中,接着,重新计算每个类的质心(即为类中心),重复这样的过程,知道质心不再改变,最终就确定了每个样本所属的类别以及每个类的质心。由于每次都要计算所有的样本与每一个质心之间的相似度,故在大规模的数据集上,K-Means算法的收敛速度比较慢。

步骤:

  1. 初始化常数K,随机选取初始点为质心;

  2. 计算样本与每个质心之间的相似度,将样本归类到最相似的类中;

  3. 重新计算质心;

  4. 重复计算一下过程,直到质心不再改变;

  5. 输出最终的质心以及每个类。

缺陷:

  • KMeans是局部最优的,容易受到初始质心的影响;

  • K值的选取也会直接影响聚类结果,最优聚类的k值应与样本数据本身的结构信息相吻合,而这种结构信息是很难去掌握,因此选取最优k值是非常困难的。

K值的确定:

法1:手肘法

手肘法的核心指标是SSE(sum of the squared errors,误差平方和),

其中,Ci是第i个簇,p是Ci中的样本点,mi是Ci的质心(Ci中所有样本的均值),SSE是所有样本的聚类误差,代表了聚类效果的好坏。

​ 手肘法的核心思想是:随着聚类数k的增大,样本划分会更加精细,每个簇的聚合程度会逐渐提高,那么误差平方和SSE自然会逐渐变小。并且,当k小于真实聚类数时,由于k的增大会大幅增加每个簇的聚合程度,故SSE的下降幅度会很大,而当k到达真实聚类数时,再增加k所得到的聚合程度回报会迅速变小,所以SSE的下降幅度会骤减,然后随着k值的继续增大而趋于平缓,也就是说SSE和k的关系图是一个手肘的形状,而这个肘部对应的k值就是数据的真实聚类数。当然,这也是该方法被称为手肘法的原因。

法2:轮廓系数法

该方法的核心指标是轮廓系数(Silhouette Coefficient),某个样本点Xi的轮廓系数定义如下:

其中,a是Xi与同簇的其他样本的平均距离,称为凝聚度,b是Xi与最近簇中所有样本的平均距离,称为分离度。而最近簇的定义是

其中p是某个簇Ck中的样本。事实上,简单点讲,就是用Xi到某个簇所有样本平均距离作为衡量该点到该簇的距离后,选择离Xi最近的一个簇作为最近簇。求出所有样本的轮廓系数后再求平均值就得到了平均轮廓系数。平均轮廓系数的取值范围为[-1,1],且簇内样本的距离越近,簇间样本距离越远,平均轮廓系数越大,聚类效果越好。那么,很自然地,平均轮廓系数最大的k便是最佳聚类数。

在实际应用中,由于Kmean一般作为数据预处理,或者用于辅助分聚类贴标签。所以k一般不会设置很大。可以通过枚举,令k从2到一个固定值如10,在每个k值上重复运行数次kmeans(避免局部最优解),并计算当前k的平均轮廓系数,最后选取轮廓系数最大的值对应的k作为最终的集群数目。

法3:(Calinski-Harabasz准则)

其中SSB是类间方差,,m为所有点的中心点,mi为某类的中心点;

SSW是类内方差,

(N-k)/(k-1)是复杂度;

比率越大,数据分离度越大。

12.Boosting和bagging的区别

1)样本选择上:Bagging:训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的。Boosting:每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整。

2)样例权重:Bagging:使用均匀取样,每个样例的权重相等。Boosting:根据错误率不断调整样例的权值,错误率越大则权重越大。

3)预测函数:Bagging:所有预测函数的权重相等。Boosting:每个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重。

4)并行计算:Bagging:各个预测函数可以并行生成。Boosting:各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果。

13.GBDT介绍一下

梯度决策提升树(Gradient Boosting Decision Tree)是Boosting算法中非常流行的一个,GBDT很好地体现了“从错误中学习”的理念,基于决策树预测的残差进行迭代学习。

Boosting弱分类器需要一次生成。在每一轮迭代中,基于已生成的弱分类器集合(即当前模型)的预测结果,新的分类器重点关注那些没有被预测正确的样本。Gradient Boosting是Boosting中的一大类算法,其基本思想是根据当前模型损失函数的负梯度信息来训练新加入的弱分类器,然后把训练好的分类器以累加的形式加入到现有模型中去。

Gradient Boosting的流程:在每一轮迭代中,首先计算出当前模型在所有样本上的负梯度,然后以该值为目标训练出一个新的弱分类器进行拟合并计算出该弱分类器的权重。最终实现对模型的更新。计算负梯度,训练新分类器,拟合权重,更新模型。

采用决策树作为弱分类器的Gradient Boosting算法称为GBDT。GBDT中使用的决策树通常为CART。

由于GBDT是利用残差训练的,预测过程要把所有树的预测值加起来,得到最后的预测结果。

14.XGBOOST和GBDT的区别(待补充)

XGBoost是一个开原机器学习项目,高效实现了GBDT算法并进行了许多改进。

GBDT是算法,XGBoost是该算法的工程实现;

在使用CART作为基分类器时,XGBoost显示地加入了正则项来控制模型复杂度,有利于防止过拟合;

GBDT在模型训练时只使用了代价函数的一阶导数信息,XGBoost对代价函数进行二阶泰勒展开,可以同时使用一阶和二阶函数 ;

传统的GBDT采样CART作为基分类器,而XGBoost支持多种类型的基分类器,比如线性分类器 ;

传统的GBDT在每轮迭代时使用全部数据XGBoost支持对数据进行采样

传统的GBDT没有设计对缺失值的处理,XGBoost能自动学出缺失值处理策略

15.stacking和blending的区别

Stacking和blending的区别在于数据的划分和模型的融合方式。

Blending用不相交的数据训练不同的基模型并将其输出取加权平均

Stacking的思想是一种有层次的融合模型,比如我们将用不同特征训练出来的三个GBDT模型进行融合时,我们会将三个GBDT作为基层模型,在其上在训练一个次学习器(通常为线性模型LR),用于组织利用基学习器的答案,也就是将基层模型的答案作为输入,让次学习器学习组织给基层模型的答案分配权重。

下图是个简单的例子,A、B是学习器,C、D、E是进行答案再组织的次学习器,次学习器会组织利用底层模型提供的答案。

Stacking过程解读:

stacking的过程有一张图非常经典,如下:

虽然他很直观,但是没有语言描述确实很难搞懂。

上半部分是用一个基础模型进行5折交叉验证,如:用XGBoost作为基础模型Model1,5折交叉验证就是先拿出四折作为training data,另外一折作为testing data。注意:在stacking中此部分数据会用到整个traing set。如:假设我们整个training set包含10000行数据,testing set包含2500行数据,那么每一次交叉验证其实就是对training set进行划分,在每一次的交叉验证中training data将会是8000行,testing data是2000行。

每一次的交叉验证包含两个过程,1. 基于training data训练模型;2. 基于training data训练生成的模型对testing data进行预测。在整个第一次的交叉验证完成之后我们将会得到关于当前testing data的预测值,这将会是一个一维2000行的数据,记为a1。注意!在这部分操作完成后,我们还要对数据集原来的整个testing set进行预测,这个过程会生成2500个预测值,这部分预测值将会作为下一层模型testing data的一部分,记为b1。因为我们进行的是5折交叉验证,所以以上提及的过程将会进行五次,最终会生成针对testing set数据预测的5列2000行的数据a1,a2,a3,a4,a5,对testing set的预测会是5列2500行数据b1,b2,b3,b4,b5。

在完成对Model1的整个步骤之后,我们可以发现a1,a2,a3,a4,a5其实就是对原来整个training set的预测值,将他们拼凑起来,会形成一个10000行一列的矩阵,记为A1。而对于b1,b2,b3,b4,b5这部分数据,我们将各部分相加取平均值,得到一个2500行一列的矩阵,记为B1。

以上就是stacking中一个模型的完整流程,stacking中同一层通常包含多个模型,假设还有Model2: LR,Model3:RF,Model4: GBDT,Model5:SVM,对于这四个模型,我们可以重复以上的步骤,在整个流程结束之后,我们可以得到新的A2,A3,A4,A5,B2,B3,B4,B5矩阵。

在此之后,我们把A1,A2,A3,A4,A5并列合并得到一个10000行五列的矩阵作为training data,B1, B2, B3, B4, B5并列合并得到一个2500行五列的矩阵作为testing data。让下一层的模型,基于新的training data 和testing data进一步训练。

16.AdaBoost和GBDT的联系与区别

首先两者都是Boosting算法,两者最主要的区别在于如何识别模型的问题。Adaboost用错分数据点来识别问题,通过调整错分数据点的权重来改进模型,AdaBoost中所有树加权投票进行预测,每棵树的权重和错误率有关。Adaboost采用的是指数损失。Gradient Boosting通过负梯度来识别问题,通过计算负梯度来改进模型。可以说Gradient Boosting = Gradient descent + Boosting,相比Adaboost,Gradient Boosting可以使用更多种类的目标函数。由于GBDT是利用残差训练的,预测过程要把所有树的预测值累加起来,得到最后的预测结果。

17.GBDT推导

GBDT(Gradient Boosting Decision Tree) 算法由多棵回归决策树组成,所有树的结论累加起来做最终答案。当把目标函数做变换后,该算法亦可用于分类或排序。

1) 明确损失函数使得误差最小:

2) 构建第一棵回归树 :

3) 学习多棵回归树

迭代:计算梯度/残差gm(如果是均方误差为损失函数即为残差)

步长/缩放因子p,用 a single Newton-Raphson step 去近似求解下降方向步长,通常的实现中 Step3 被省略,采用 shrinkage 的策略通过参数设置步长,避免过拟合 。

4) F(x)等于所有树结果累加。

18.RF和GBDT基分类器的区别,RF决策树怎么剪枝

GBDT核心:通过分类器(如:CART,RF)拟合损失函数梯度,而损失函数的定义就决定了在子区域内各个步长,其中就是期望输出与分类器预测输出的差,即bias

RF核心:样本随机和属性随机(所有样本中随机选择K个子样本选择最优属性来划分),样本数系统下的不同训练集产生的各个分类器,即数据的扰动导致模型学习性能的变化,即varianece。

GBDT和RF的区别:

  • GBDT是Boosting算法,RF是Bagging算法;

  • 组成RF的可以是分类树也可以是回归树,但是组成GBDT的只能是回归树;

  • RF的树是并行的,GBDT是串行;

  • 对于最终结果来说,RF采用多数投票,GBDT是将所有结果累加,或者加权累加;

  • RF对异常值不敏感,GBDT对异常值敏感;

  • 随机森林是通过减少模型方差提高性能,GBDT是通过减少模型偏差提高性能。

树的剪枝:

  • 前剪枝:通过提前停止树的构造来对决策树进行剪枝,一般树的前剪枝的原则有:a.节点达到完全纯度;b.树的深度达到用户所要的深度;c.节点中样本个数少于用户指定个数;d.不纯度指标下降的最大幅度小于用户指定的幅度。

  • 后剪枝:首先构造完整的决策树,允许决策树过度拟合训练数据,然后对那些置信度不够的结点的子树用叶结点来替代

19.XGBoost的特征重要性计算

特征重要性可以用来做模型可解释性,这在风控等领域是非常重要的方面。xgboost实现中Booster类get_score方法输出特征重要性,其中importance_type参数支持三种特征重要性的计算方法:

  1. importance_type=weight(默认值),特征重要性使用特征在所有树中作为划分属性的次数

  2. importance_type=gain,特征重要性使用特征在作为划分属性时loss平均的降低量

  3. importance_type=cover,特征重要性使用特征在作为划分属性时对样本的覆盖度

20.XGBoost的正则项表达式

,T为叶子结点的个数,w为叶子结点的分数。

21.xgboost/gbdt在调参时为什么树的深度很少就能达到很高的精度?

用xgboost/gbdt在在调参的时候把树的最大深度调成6就有很高的精度了。但是用DecisionTree /RandomForest的时候需要把树的深度调到15或更高。这是为什么?

当我们训练一个模型时,偏差和方差都得照顾到,漏掉一个都不行。

Bagging保证variance低,所以每个基分类器注重降低bias。具体来说就是,由于我们会并行地训练很多不同的分类器的目的就是降低这个方差(variance) ,因为采用了相互独立的基分类器多了以后,h的值自然就会靠近.所以对于每个基分类器来说,目标就是如何降低这个偏差(bias),所以我们会采用深度很深甚至不剪枝的决策树。

Boosting算法保证了bias低,所以每个基分类器注重降低variance。具体来说就是,对于Boosting,每一步我们都会在上一轮的基础上更加拟合原数据,所以可以保证偏差(bias),所以对于每个基分类器来说,问题就在于如何选择variance更小的分类器,即更简单的分类器,所以我们选择了深度很浅的决策树。

22.xgboost原理,怎么防过拟合

专门开了个md讲解,略。

23.如何防止过拟合?

  • Early Stop

  • L1和L2正则化

  • 神经网络dropout,BN

  • 决策树剪枝

  • 集成学习

  • 增加样本

  • 特征选择(27问)

24.对应时间序列的数据集如何进行交叉验证?

我们推荐两种嵌套交叉验证的方法,来处理仅具有一个时间序列的数据。我们也会处理来自一个病人/参与的多天医疗数据:

  • 1.预测后一半(Predict Second Half)

  • 2.日前向链(Day Forward-Chaining)

预测后一半

第一种方法「预测后一半」,这是嵌套交叉验证的「基本情况」,只有一次训练/测试分割。它的优势是这种方法易于实现;然而,它仍然面临着任意选择测试集的局限性。前一半数据(按照时间分割的)作为训练集,后一半数据成为测试集。验证集的大小可以根据给定问题的不同而变化(例如图 3 中的例子用一天的数据作为验证集),但是保证验证集的时间顺序在训练子集后面是非常重要的。

日前向链(Day Forward-Chaining)

预测后一半嵌套交叉验证方法的一个缺陷是 hold-out 测试集的任意选择会导致在独立测试集上预测误差的有偏估计。为了生成对模型预测误差的更好估计,一个常用的方法就是进行多次训练/测试分割,然后计算这些分割上的误差平均值。我们使用日前向链技术是一种基于前向链(Forward-Chaining)的方法(在文献中也被称为 rolling-origin evaluation(Tashman,2000)和 rolling-origin-recalibration evaluation(Bergmeir & Benitez,2012))。利用这种方法,我们将每天的数据作为测试集,并将以前的所有数据分配到训练集中。例如,如果数据集有五天,那么我们将生成三个不同的训练和测试分割,如图 4 所示。请注意,在本示例中,我们有三次拆分,而不是五次拆分,因为我们需要确保至少有一天的训练和验证数据可用。该方法产生许多不同的训练/测试分割,并且对每个分割上的误差求平均,以计算模型误差的鲁棒估计。

注意,在这个例子中我们使用「日」前向链,但是也可以在每个数据点上进行迭代,而不是按天迭代(但这明显意味着更多的拆分)。

那如果有多条时序,如何预测呢?

多时序嵌套交叉验证

现在有两种分割单个时间序列的方法,接下来我们将讨论如何处理具有多个不同时间序列的数据集。同样,我们使用两种方法:

常规(regular)

「常规」嵌套交叉验证(regular nested cross-validation)的训练集/验证集/测试集分割基本思路和之前的描述是一样的。唯一的变化是现在的分割包含了来自数据集中不同参与者的数据。如果有两个参与者 A 和 B,那么训练集将包含来自参与者 A 的前半天的数据和来自参与者 B 的前半天的数据。同样,测试集将包含每个参与者的后半天数据。

群体知情(Population-Informed)

对于「群体知情嵌套交叉验证」方法而言,我们利用了不同参与者数据之间的独立性。这使得我们打破严格的时间顺序,至少在个人数据之间(在个人数据内遵循严格时序仍然是必要的)。由于这种独立性,我们可以稍微修改常规嵌套交叉验证算法。现在,测试集和验证集仅包含来自一个参与者(例如参与者 A)的数据,并且数据集中所有其他参与者的所有数据都被允许存在于训练集中。就比如,参与者 A 第 18 天的数据是测试集,之前三天是验证集,那么训练集包含参与者 A 的所有先前数据以及其他参与者(本例中为 B、C、D 和 E)的所有数据。需要强调的一点是,由于其他参与者的时间序列的独立性,使用这些参与者的「未来」观测不会造成数据泄漏。

25.正负样本不平衡的解决办法?评价指标的参考价值?

上下采样法;SMOTE;模型校准;改变阈值;以正确的方式使用K-fold交叉验证,组合不同的重采样数据集,对多数类进行聚类。

好的指标:ROC和AUC、F值、G-Mean;不好的指标:Precision、Recall

26.生成模型和判别模型的区别

假设可观测的变量集合为X,需要预测的变量集合为Y,其他的变量集合为Z。 生成式模型是对联合分布概率​建模,在给定观测集合X的条件下,通过计算边缘分布来求得对变量集合Y的推断。

判别式模型是直接对条件分布概率​建模,然后消掉无关变量Z就可以得到对变量集合Y的预测,直观的输入什么特征就预测可能的类别 ,即

朴素贝叶斯、贝叶斯网络、HMM、pLSA、LDA是生成式,LR,SVM,最大熵模型、条件随机场是判别式。

27.特征选择怎么做

特征选择是一个重要的数据预处理过程,主要有两个原因:一是减少特征数量、降维,使模型泛化能力更强,减少过拟合;二是增强对特征和特征值之间的理解。

常见的特征选择方式:

  • 去除方差较小的特征

  • 正则化。L1正则化能够生成稀疏的模型。L2正则化的表现更加稳定,有用的特征往往对应系数非零。

  • 随机森林,对于分类问题,通常采用基尼不纯度或者信息增益,对于回归问题,通常采用的是方差或者最小二乘拟合。一般不需要feature engineering、调参等繁琐的步骤。它的两个主要问题,1是重要的特征有可能得分很低(关联特征问题),2是这种方法对特征变量类别多的特征越有利(偏向问题)。

  • 稳定性选择。是一种基于二次抽样和选择算法相结合较新的方法,选择算法可以是回归、SVM或其他类似的方法。它的主要思想是在不同的数据子集和特征子集上运行特征选择算法,不断的重复,最终汇总特征选择结果,比如可以统计某个特征被认为是重要特征的频率(被选为重要特征的次数除以它所在的子集被测试的次数)。理想情况下,重要特征的得分会接近100%。稍微弱一点的特征得分会是非0的数,而最无用的特征得分将会接近于0。

秋招面试题复习——机器学习相关推荐

  1. 2022前端秋招面试题总结 阿里 腾讯 字节 百度 网易 京东 小红书 快手面试记录

    2022前端秋招面试题总结 阿里 腾讯 字节 百度 网易 京东 小红书 快手面试记录 等了百度三个月,终于发offer了,白菜价,92大佬们拒的薪资,我知足了. 排序挂了狠多,快手,蚂蚁,- 很绝望 ...

  2. 2020大疆秋招笔试题B卷

    2020大疆秋招笔试题B卷 选择题(选项没抄下来)10道记了9道 1.关于常指针和指向常量的指针 2.多线程调用如下函数,a,b,c哪些需要加锁保护 int a = 0; void knit() {s ...

  3. 2021网易秋招笔试题(Android开发)

    网易笔试题(2021.08.08) 校招的笔试题通常是4道编程题,时间为2个小时,每题25分. 2021秋招笔试题总结如下,包含问题和代码实现. 题1:查找关键词 查找关键词(单词在文章中出现频率&g ...

  4. 秋招面试题系列- - -Java工程师(十一)

     前言:七月末八月初的时候,秋招正式打响,公司会放出大量的全职和实习岗位.为了帮助秋招的小伙伴们,学长这里整理了一系列的秋招面试题给大家,所以小伙伴们不用太过焦虑,相信你们一定能超常发挥,收到心仪公司 ...

  5. 腾讯 2015秋招笔试题 编程题2:九宫格填数

    腾讯 2015秋招笔试题 编程2:九宫格填数 题目 2: 有下图的题解,请用 C/C++ 代码来列出满足下图 0-100 内的所有答案. 配合加减乘除,使得九宫格横竖都等于4. 智力冲浪 数字推理 请 ...

  6. 2022 Java秋招面试题-必备基础

    文章目录 2022 Java秋招面试题-必备基础 一.语言基础 Java技术栈基础-语言基础 Java技术栈基础-spring Java技术栈基础-netty 二.面向对象 三.存储 redis my ...

  7. 字节跳动-2020秋招-笔试题剖析【5道算法题】

    字节跳动-2020秋招-笔试题剖析[5道算法题],限时120分钟. 让我们一起来看看这些题吧! 题一:模型文件去重 [题目描述] 抖音上不同的用户类型我们有不同的用户模型文件. 我们有一个模型配置文件 ...

  8. 酷狗java秋招笔试题

    酷狗java秋招笔试题 单选题 1.在命中率极高的缓存设计中,时间复杂度最差的数据结构是( B ). A. 数组 B. 链表 C. 树 D. 哈希表 2.某二叉树共有11个结点,其叶子结点只有2个.则 ...

  9. 秋招面试题系列- - -Java 工程师(一)

    前言:七月末八月初的时候,秋招正式打响,公司会放出大量的全职和实习岗位.为了帮助秋招的小伙伴们,学长这里整理了一系列的秋招面试题给大家,所以小伙伴们不用太过焦虑,相信你们一定能超常发挥,收到心仪公司的 ...

最新文章

  1. eclipse注释模板设置(未整理)
  2. 1 项目里面如何打印log日志
  3. 查看java线程堵塞排查_记一次应用线程被阻塞的问题排查
  4. 叮!锦鲤素材到货啦~
  5. [C++]最大连续子序列乘积
  6. LED流水灯部分代码
  7. RestLet框架的入门
  8. 视频教程-网络工程师的5天修炼-软考
  9. (转贴)联想员工亲历联想大裁员:公司不是家
  10. java 线程休眠 假死,java多线程-jstack线程阻塞问题排查
  11. android stop 服务,当调用stopService方法时服务不会停止
  12. 正向查找区域和反向查找区域的操作教程(内提供系统镜像下载)
  13. 压缩文件不记得密码了怎么办?
  14. 手机变窃听器 !CIA正在盯着你
  15. Android-自定义preference和PreferenceFragment实例详解
  16. 展望十二五:“核高基”突破核心技术走向产业化
  17. 力士乐驱动器原理图_力士乐伺服驱动器的常见故障代码和解决方法
  18. LeetCode 417. 太平洋大西洋水流问题--BFS
  19. Kafka 消息传递语义 Exactly Once(精准一次) 相关知识
  20. ms office word2013教程 - 文字处理之邮件合并

热门文章

  1. 无线摄像头 服务器,下一波摄像头僵尸网络来袭!350家厂商的WiFi摄像头内置不安全的Web服务器软件...
  2. 树莓派学习笔记——crontab定时运行脚本
  3. 万能刷机王HD2刷WP7详细教程
  4. 二叉树的非递归遍历2
  5. Armbian-安装cpus
  6. 05-安全点和安全域是什么?
  7. JSP学习笔记(动力节点老杨)(自己总结方便复习)
  8. 【传智播客郑州校区分享】在传智播客郑州校区学习倍感幸运
  9. 中国科学院院士、中国人工智能学会副理事长谭铁牛:人工智能发展现状
  10. autoCAD2017许可管理器不起作用或未正确安装