机器/深度学习常见面试问题

1.训练决策树时的参数是什么?

sklern中使用sklearn.tree.DecisionTreeClassifier类来实现决策树分类算法。其实几个典型的参数解释如下:

DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=2,
            max_features=None, max_leaf_nodes=None,
            min_impurity_decrease=0.0, min_impurity_split=None,
            min_samples_leaf=1, min_samples_split=2,
            min_weight_fraction_leaf=0.0, presort=False, random_state=42,
            splitter='best')

criterion:特征选择标准    ‘gini’ or ‘entropy’ (default=”gini”),前者是基尼系数,后者是信息熵。两种算法差异不大对准确率无影响,信息熵运算效率低一点,因为它有对数运算,一般说使用默认的基尼系数”gini”就可以了,即CART算法(Classification And Regression Tree)。除非你更喜欢类似ID3, C4.5的最优特征选择方法。

splitte:特征划分标准    ‘best’ or ‘random’ (default=”best”) ,前者在特征的所有划分点中找出最优的划分点。后者是随机的在部分划分点中找局部最优的划分点。 默认的”best”适合样本量不大的时候,如果样本数据量非常大,此时推荐random 。

max_depth:决策树最大深度    int or None, optional (default=None) 一般来说,数据少或者特征少的时候可以不管这个值。如果样本量多,特征也多的情况下,推荐限制这个最大深度,具体的取值取决于数据的分布。常用的可以取值10-100之间。常用来解决过拟合

max_features:划分时考虑的最大特征数,可以使用很多种类型的值,默认是"None",意味着划分时考虑所有的特征数;如果是"log2"意味着划分时最多考虑log2N个特征;如果是"sqrt"或者"auto"意味着划分时最多考虑N−−√N个特征。如果是整数,代表考虑的特征绝对数。如果是浮点数,代表考虑特征百分比,即考虑(百分比xN)取整后的特征数。其中N为样本总特征数。一般来说,如果样本特征数不多,比如小于50,我们用默认的"None"就可以了,如果特征数非常多,我们可以灵活使用刚才描述的其他取值来控制划分时考虑的最大特征数,以控制决策树的生成时间。

min_samples_split:内部节点再划分所需最小样本数    int, float, optional (default=2) 如果是 int,则取传入值本身作为最小样本数; 如果是 float,则取ceil(min_samples_split * 样本数量) 的值作为最小样本数,即向上取整。这个值限制了子树继续划分的条件,如果某节点的样本数少于min_samples_split,则不会继续再尝试选择最优特征来进行划分。如果样本量不大,不需要管这个值。如果样本量数量级非常大,则推荐增大这个值。之前的一个项目例子,大概10万样本,选择min_samples_split=10。

min_impurity_decrease:节点划分最小不纯度    float, optional (default=0.) 这个值限制了决策树的增长,如果某节点的不纯度(例如:基尼系数,信息增益,均方差,绝对差)小于这个阈值,则该节点不再生成子节点。 

min_samples_leaf:叶节点最少样本数,如果是 int,则取值本身作为最小样本数; 如果是 float,取ceil(min_samples_leaf * 样本数量) 的值作为最小样本数,即向上取整。 这个值限制了叶子节点最少的样本数,如果某叶子节点数目小于样本数,则会和兄弟节点一起被剪枝。(如果该叶节点包含的样本数小于min_samples_leaf,就会被剪切??) 默认是1,可以输入最少的样本数的整数,或者最少样本数占样本总数的百分比。如果样本量不大,不需要管这个值。如果样本量数量级非常大,则推荐增大这个值。10万样本项目使用min_samples_leaf的值为5,仅供参考。 

max_leaf_nodes:最大叶子节点数    int or None, optional (default=None) 通过限制最大叶子节点数,可以防止过拟合,默认是”None”,即不限制最大的叶子节点数。如果加了限制,算法会建立在最大叶子节点数内最优的决策树。如果特征不多,可以不考虑这个值,但是如果特征分成多的话,可以加以限制,具体的值可以通过交叉验证得到。

min_impurity_split :信息增益的阀值。决策树在创建分支时,信息增益必须大于这个阀值,否则不分裂

min_weight_fraction_leaf:叶节点最小的样本权重和  float, optional (default=0.) 这个值限制了叶子节点所有样本权重和的最小值,如果小于这个值,则会和兄弟节点一起被剪枝。 默认是0,就是不考虑权重问题。一般来说,如果我们有较多样本有缺失值,或者分类树样本的分布类别偏差很大,就会引入样本权重,这时我们就要注意这个值了。

class_weight    类别权重    dict, list of dicts, “balanced” or None, default=None 指定样本各类别的的权重,主要是为了防止训练集某些类别的样本过多,导致训练的决策树过于偏向这些类别。这里可以自己指定各个样本的权重,或者用“balanced”,如果使用“balanced”,则算法会自己计算权重,样本量少的类别所对应的样本权重会高。当然,如果你的样本类别分布没有明显的偏倚,则可以不管这个参数,选择默认的”None” 不适用于回归树 sklearn.tree.DecisionTreeRegressor

from:https://www.cnblogs.com/pinard/p/6056319.html

from:https://blog.csdn.net/qq_41577045/article/details/79844709

2.在决策树的节点处分割的标准是什么?

决策树的构建过程,就是从训练集中归纳出一组分类规则,使它与熟练数据矛盾较小的同时具有较强的泛化能力。基本分为以下几步:

  1. 计算数据集划分钱的信息墒
  2. 遍历所有作为划分条件的特征,分别计算根据每个特征划分数据集后的信息墒。
  3. 选择信息增益最大的特征,并使用这个特镇作为数据划分节点来划分数据。
  4. 递归地处理被划分后的所子数据集,从未被选择的特征里继续重复以上步骤,选择出最优数据划分特征来划分子数据集…
  5. 这里递归结束的条件一般有两个:一是所有特征都用完了,二是划分后的信息墒增益足够小了。针对这个停止条件,需要实现选择信息增益的门限值来作为递归结束条件。

3.基尼系数的公式是什么?

基尼指数(基尼不纯度):表示在样本集合中一个随机选中的样本被分错的概率。是衡量信息不纯度的指标

注意:Gini指数越小表示集合中被选中的样本被分错的概率越小,也就是说集合的纯度越高。

即 基尼指数(基尼不纯度)= 样本被选中的概率 * 样本被分错的概率

书中公式:

                                                  

说明: p_{k}表示选中的样本属于k类别的概率,则这个样本被分错的概率是(1-p_{k})。样本集合中有K个类别,一个随机选中的样本可以属于这k个类别中的任意一个,因而对类别就求和,例如当为二分类时,Gini(P) = 2p(1-p)

4.熵的公式是什么?

       信息熵(entropy)是用来衡量一个随机变量出现的期望值。如果信息的不确定性越大,熵的值也就越大,出现的各种情况也就越多。  设D为用类别对训练元组进行的划分,则D的(entropy)表示为:

                                                      

      其中P表示事件出现的概率。回到决策树的构建问题上,我们遍历所有特征,分别对数据集分类,然后使用这个公式分别计算划分数据集前后信息墒的变化值,然后选择信息墒变化幅度最大的那个特征来作为数据集划分依据。即:选择信息增益最大的特征作为分裂节点。

5.决策树如何决定在哪个特征处分割?

    同上,选择信息墒变化幅度最大的那个特征来作为数据集划分依据。即:选择信息增益最大的特征作为分裂节点。

   决策树是一种判别模型,既支持分类问题,也支持回归问题,是一种非线性模型,它支持多分类问题

6.随机森林的优点有哪些?

        随机森林是一种集成学习算法,是Bagging算法的具体实现。集成学习是机器学习中的一种思想,而不是某一具体算法,它通过多个模型的组合形成一个精度更高的模型,参与组合的模型称为弱学习器。在预测时使用这些弱学习器模型联合进行预测,训练时需要依次训练出这些弱学习器。

     随机森林用有放回抽样(Bootstrap抽样)构成出的样本集训练多棵决策树,训练每一棵树时,从样本集中有放回的抽取n个样本,每个样本可能会被抽中多次,也可能一次都没抽中。训练决策树的每个节点时只使用了随机抽样的部分特征,由于使用了随机抽样,随机森林泛化性能一般比较好,可以有效的降低模型的方差。预测时,对于分类问题,一个测试样本会送到每一棵决策树中进行预测,然后投票,得票最多的类为最终分类结果。对于回归问题,随机森林的预测输出是所有决策树输出的均值。

      随机森林是一种有监督学习算法。它创建了一个森林,并使它拥有某种方式随机性。 所构建的“森林”是决策树的集成,大部分时候都是用“bagging”方法训练的,采用的是随机有放回的选择训练数据然后构造分类器,最后组合学习到的模型来增加整体的效果。

      简而言之:随机森林建立了多个决策树,并将它们合并在一起以获得更准确和稳定的预测。随机森林的一大优势在于它既可用于分类,也可用于回归问题,这两类问题恰好构成了当前的大多数机器学习系统所需要面对的。 

     随机森林算法中树的增长会给模型带来额外的随机性。决策树采用每个节点被分割成最小化误差的最佳特征,而在随机森林中,分裂节点时不再是搜索最好的特征,而是在一个随机生成的特征子集里搜索最好的特征。因此,在随机森林中,仅考虑用于分割节点的随机子集,甚至可以通过在每个特征上使用随机阈值来使树更加随机,而不是如正常的决策树一样搜索最佳阈值。这个过程产生了广泛的多样性,通常可以得到更好的模型。
     随机森林算法的另一个优点是可以很容易地测量每个特征对预测的相对重要性。重要的特征更可能出现在靠近根节点的位置,而不重要的特征通常出现在靠近叶节点的位置(甚至根本不出现)。因此,通过计算一个特征在森林中所有树上的平均深度,可以估算出一个特征的重要程度。Scikit-Learn通过变量feature_importances_你就可以访问到这个计算结果。

贝叶斯分类器

     贝叶斯分类器将样本判定为后验概率最大的类,它直接用贝叶斯公式解决分类问题。假设样本的特征向量为x,类别标签为y,根据贝叶斯公式,样本属于每个类的条件概率(后验概率)为:

                                                           

分母p(x)对所有类都是相同的,分类的规则是将样本归到后验概率最大的那个类,不需要计算准确的概率值,只需要知道属于哪个类的概率最大即可,这样可以忽略掉分母。分类器的判别函数为:

                                                 

     在实现贝叶斯分类器时,需要知道每个类的条件概率分布p(x|y)即先验概率。一般假设样本服从正态分布。训练时确定先验概率分布的参数,一般用最大似然估计,即最大化对数似然函数。

如果假设特征向量的各个分量之间相互独立,则称为朴素贝叶斯分类器,此时的分类判别函数为:

                                         

实现时可以分为特征分量是离散变量和连续变量两种情况。贝叶斯分分类器是一种生成模型,可以处理多分类问题,是一种非线性模型。

参考:https://blog.csdn.net/qq_30815237/article/details/86571250

7.介绍一下boosting算法。

       提升算法/Boosting是一种提高弱分类器准确度的方法。
      通常在分类问题中,boosting通过改变训练样本的权重,学习多个分类器,并将这些分类器线性组合,提高分类性能。 一组弱分类器可以创建一个强大的分类器。 Boosting 就是通过组合许多弱分类器(只比随机选择好一点)来产生一个强大的分类器组。且弱分类器的设计简单没有太大计算量。 
      boosting算法有很多,如AdaBoost,LPBoost,TotalBoost,BrownBoost,xgboost,MadaBoost,LogitBoost等等。大多数boosting算法都是改变训练数据的权值分布,针对不同的训练数据分布调用弱学习算法学习一系列弱分类器。因此,许多boosting算法之间的差异在于对训练样本和假设进行加权的方法不同。众多boosting算法中,最著名的就是 Adaboost(适应性提升,是 Adaptive Boosting 的简称) 和 Gradient Boosting(梯度提升)。

8.gradient boosting如何工作?

    与 Adaboost 一样,梯度提升也是通过向集成中逐步增加分类器运行的,每一个分类器都修正之前的分类结果。然而,它并不像 Adaboost 那样每一次迭代都更改实例的权重,这个方法是去使用新的分类器去拟合前面分类器预测的残差 。

比较Boosting和Bagging/pasting的异同

    二者都是集成学习算法,都是将多个弱学习器组合成强学习器的方法。

    Boosting:每一轮根据上一轮的分类结果动态调整每个样本在分类器中的权重,训练得到k个弱分类器,他们都有各自的权重,通过加权组合的方式得到最终的分类结果。

    Bagging/pasting:都是训练得到k个弱学习器,将这k个弱学习器以投票的方式得到最终的分类结果。获得不同种类分类器的方法之一是使用不同的训练算法。还有另一种方法是每个预测器使用的算法相同,但是在不同的训
练集随机子集上进行训练。

  1.       bagging (自举汇聚法):从原始数据集中每一轮有放回地抽取训练集(采样时将样本放回)
  2.       pasting:采样时样本不放回。

    bagging和pasting都允许训练实例在多个预测器中被多次采样,但是只有bagging允许训练实例被同一个预测器多次采样。

9.关于AdaBoost算法,你了解多少?它如何工作?

     新预测器对其前序进行纠正的办法之一,就是更多地关注前序拟合不足的训练实例。从而使新的预测器不断地越来越专注于难缠的问题,这就是AdaBoost使用的技术。
    例如,要构建一个AdaBoost分类器,首先需要训练一个基础分类器(比如决策树),用它对训练集进行预测。然后对错误分类的训练实例增加其相对权重,接着,使用这个最新的权重对第二个分类器进行训练,然后再次对训练集进行预测,继续更新权重,并不断循环向前。
                                       

详细的boosting算法请参见:机器学习实战7-sklearn集成学习和随机森林

                                              机器学习算法(2)——AdaBoost算法

10.SVM中用到了哪些核?SVM中的优化技术有哪些?

常用的核函数主要有:

① 多项式核函数:
一个n维的向量映射后的特征空间向量Φ(x)的维度为

② 高斯核函数:
当xi和xj很接近时,核函数的值约为1;相差很大时,核函数的值约为0。高斯核函数又称为径向基函数。能把原始有限维空间的向量映射到无穷维的特征空间(参见:https://blog.csdn.net/guo1988kui/article/details/80207551)。

③ S型核函数:
类比高斯核函数能够描述两个向量之间的相似度(0~1之间)。双曲正弦函数tanh(⋅)(双极性sigmoid函数)也能作为核函数。同样地,也存在单极性sigmoid核函数。

      核函数的价值在于它虽然也是将特征进行从低维到高维的转换,但核函数绝就绝在它事先在低维上进行计算,而将实质上的分类效果表现在了高维上,也就如上文所说的避免了直接在高维空间中的复杂计算。

SVM中的优化技术:硬边界和软边界。

11.SVM如何学习超平面?用数学方法详细解释一下。

参见:机器学习实战5-sklearn训练SVM模型分类回归(make_moons数据集)

SVM用于多分类

      SVM是一种判别模型。它既可以用于分类问题,也可以用于回归问题。标准的SVM只能支持二分类问题,使用多个分类器的组合,可以解决多分类问题。如果不使用核函数,SVM是一个线性模型,如果使用非线性核,则是非线性模型,有以下几种方案:

  1.    1对多方案。对于有k个类的分类问题,训练k个二分类器。训练时第i个分类器的正样本是第i类样本,负样本是除第i类之外其他类型的样本,这个分类器的作用是判断样本是否属于第i类。在进行分类时,对于待预测样本,用每个分类器计算输出值,取输出值最大那个作为预测结果。
  2.     1对1方案。如果有k个类,训练Ck2个二分类器,即这些类两两组合。训练时将第i类作为正样本,其他各个类依次作为负样本,总共有k (k − 1) / 2种组合。每个分类器的作用是判断样本是属于第i类还是第j类。对样本进行分类时采用投票的方法,依次用每个二分类器进行预测,如果判定为第m类,则m类的投票数加1,得票最多的那个类作为最终的判定结果。

12.介绍一下无监督学习,算法有哪些?

        无监督学习常常被用于数据挖掘,用于在大量无标签数据中发现些什么。它的训练数据是无标签的,训练目标是能对观察值进行分类或区分等。例如无监督学习应该能在不给任何额外提示的情况下,仅依据所有“猫”的图片的特征,将“猫”的图片从大量的各种各样的图片中将区分出来。

       无监督主要有三种:聚类,离散点检测和降维(PCA)。
       聚类是比较经典的一种。聚类就是将观察值聚成一个一个的组,每一个组都含有一个或者几个特征。恰当地提取特征是无监督最为关键的环节。例如在对猫的识别中,来尝试提取猫的特征:皮毛、四肢、耳朵、眼睛、胡须、牙齿、舌头等等。通过对特征相同的动物的聚类,可以将猫或者猫科动物聚成一类。但是此时,我们不知道这群毛茸茸的东西是什么,只知道这团东西属于一类,兔子不在这个类(耳朵不符合),飞机也不在这个类(有翅膀)。特征有效性直接决定着算法有效性。如果我们拿体重来聚类,而忽略体态特征,恐怕就很难区分出兔子和猫了。

无监督聚类方法有:
K-means算法;
层次聚类:
由不同层次的分割聚类组成,层次之间的分割具有嵌套的关系
t-SNE聚类:用于可视化。t-SNE表示t分布的随机近邻嵌入。它将高维空间映射到可以可视化的2或3维空间。通过二维点或三维点对每个高维对象进行建模,使得相似的对象由附近的点建模,而不相似的对象很大概率由远离的点建模。
DBSCAN(Density-Based Spatial Clustering of Applications with Noise,基于密度):用作预测分析中 K-means的替代。它不要求输入聚类的数值才能运行。但作为交换,你必须调整其他两个参数。

13、无监督学习中存在过拟合吗?

    存在。我们可以使用无监督学习的某些指标或人为地去评估模型性能,以此来判断是否过拟合。我的理解:以 K-means为例,在进行 K-means算法时我们要指定类别数,如果实际类别为5,但我们指定10,此时就处于过拟合状态。

14、在K-Means聚类算法中,如何定义K?描述至少3种定义K的方法。

1.手肘法,2、轮廓系数法

详情参见:机器学习算法(7)——K近邻(KNN)与K均值(K-means)算法

15、什么是k折交叉验证?

      交叉验证,这是仅使用训练集衡量模型性能的一个方便技术,不用建模最后才使用测试集。

       Cross-validation 是为了有效的估测 generalization error(泛化误差) 所设计的实验方法,而
       generalization error=bias+variance

bias和variance分别从两个方面来描述了我们学习到的模型与真实模型之间的差距。Bias是 “用所有可能的训练数据集训练出的所有模型的输出的平均值” 与 “真实模型”的输出值之间的差异;Variance则是“不同的训练数据集训练出的模型”的输出值之间的差异。

可以发现,怎么来平衡Bias和Variance则成了我们最大的任务了,也就是怎么合理的评估自己模型呢?我们由此提出了交叉验证的思想,以K-fold Cross Validation

       交叉验证:将原始数据分成K组(一般是均分),将每个子集数据分别做一次验证集,其余的K-1组子集数据作为训练集,如此训练和验证一轮称为一次交叉验证。交叉验证重复k次,每个子集都做一次验证集,这样会得到K个模型,用这K个模型最终的验证集的分类准确率的平均数作为此K-CV下分类器的性能指标。K一般大于等于2,实际操作时一般从3开始取,只有在原始数据集合数据量小的时候才会尝试取2. 而K-CV 的实验共需要建立 k 个models,并计算 k 次 test sets 的平均辨识率。在实作上,k 要够大才能使各回合中的训练样本数够多,一般而言 k=10 (作为一个经验参数)算是相当足够了。

      需要注意:k越大,不一定效果越好,而且越大的k会加大训练时间;在选择k时,需要考虑最小化数据集之间的方差。比如:对于2分类任务,如果采用2折交叉验证,即将原始数据集对半分,若此时训练集中都是A类别,验证集中都是B类别,则交叉验证效果会非常差。

      注意:交叉验证使用的仅仅是训练集!!根本没测试集什么事!!

这也就解决了上面刚开始说的Variance(不同训练集产生的差异),Bias(所有data训练结果的平均值)这两大问题了!因为交叉验证思想集合了这两大痛点,能够更好的评估模型好坏!

说白了,就是你需要用下交叉验证去试下你的算法是否精度够好,够稳定!你不能说你在某个数据集上表现好就可以,你做的模型是要放在整个数据集上来看的!毕竟泛化能力才是机器学习解决的核心

16、一个二分类问题,超过阈值t的判定为正例,否则判定为负例。若将t增大,则准确率和召回率如何变化?

     准确率 = TP / (TP + FP),召回率 = TP / (TP + FN),其中TP表示将正例正确分类为正例的数量,FP表示将负例错误分类为正例的数量,FN表示将正例错误分类为负例的数量。

  1.     准确率可以理解为:在所有分类为正例的样品中,分类正确的样本所占比例;
  2.     召回率可以理解为:在所有原始数据集中的正例样品中,正确挑出的正例样本的比例。

      因此若增大阈值t,更多不确定(分类概率较小)的样本将会被分为负例,剩余确定(分类概率较大)的样本所占比例将会增大(或不变),即准确率会增大(或不变); 若增大阈值t,则可能将部分不确定(分类概率较小)的正例样品误分类为负例,即召回率会减小(或不变)。

17、EM算法

     EM算法是一种迭代法,其目标是求解似然函数或后验概率的极值,而样本中具有无法观测的隐含变量。EM算法用于求解带有隐变量的最大似然估计问题。由于有隐变量的存在,无法直接用最大似然估计求得对数似然函数极大值的公式解。此时通过jensen不等式构造对数似然函数的下界函数,这个函数不含有隐变量(就是先固定一个变量\theta),然后优化下界函数(更新\theta),再用估计出的参数值构造新的下界函数,反复迭代直至收敛到局部极小值点(\theta不再更新为止),这就是EM算法所采用的思路。

  算法在实现时首先随机初始化参数\theta的值,接下来循环迭代,每次迭代时分为两步:

   E步,基于当前的参数估计值\theta_{i},计算在给定x时,对z的条件概率的数学期望:

                                                

M步,求解如下极值问题,更新\theta的值:

                           

实现Qi 时可以按照下面的公式计算:

                                              

迭代终止的判定规则是相邻两次函数值之差小于指定阈值。需要注意的是,EM算法只能保证收敛到局部极小值。

from:机器学习算法(1)——极大似然估计与EM算法

18、Lp范数间的区别L1范数:向量中各个元素绝对值之和

L2范数:向量中各个元素平方和的开二次方根

Lp范数:向量中各个元素绝对值的p次方和的开p次方根

19、模型选择方法的评价

衡量一个模型评估方法的好坏,往往从偏差和方差两方面进行。

Bias反映的是模型在样本上的输出与真实值之间的误差,即模型本身的精准度,即算法本身的拟合能力

Variance反映的是模型每一次输出结果与模型输出期望之间的误差,即模型的稳定性。反应预测的波动情况。

Bias和Variance是针对Generalization(泛化)来说的 ,bias和variance分别从两个方面来描述了我们学习到的模型与真实模型之间的差距。

  • 什么是Noise(噪声)

这就简单了,就不是你想要的真正数据,你可以想象为来破坏你实验的元凶和造成你可能过拟合的原因之一,至于为什么是过拟合的原因,因为模型过度追求Low Bias会导致训练过度,对测试集判断表现优秀,导致噪声点也被拟合进去了

举一个射箭问题:假设你在射箭,红星是你的目标,以下是你的射箭结果

                           

分析:

我们可以看到,在Low Variance的一列,数据分布是非常集中的,恩,的稳定性很好,方差很小,表现的很聚集。而第二列就是High Variance的一列,飘来飘去的,非常不稳定!

Low Bias这一行,命中红心的次数很多,说明你还是有准头的,至少偏差不算大,我要是裁判,我就不管你没射中几只箭飘到哪去了(方差大,不集中),毕竟我看的是命中了多少(准确度),而High Bias这一行,明显可以看出一支箭都没射中,表现很差,偏离目标好远,负分滚粗!

   综合起来看,我们需要的模型最好是两个L,又准确又稳定,妥妥的,但是,这个在现实模型中是不会存在的。你只能权衡着来,这也被称为偏差/方差均衡。

Bias,Variance和Overfitting(过拟合),Underfitting(欠拟合)

过拟合,也就是我对训练样本能够百分百命中了,超级拟合了,但是测试时候就掉链子,拟合很差,也就是我们说的泛化性能不好的问题,所以如果太追求在训练集上的完美而采用一个很复杂的模型,会使得模型把训练集里面的噪声都当成了真实的数据分布特征,从而得到错误的数据分布估计。

一句话,过拟合会出现高方差问题

欠拟合:训练样本太少,导致模型就不足以刻画数据分布了,体现为连在训练集上的错误率都很高的现象。

一句话,欠拟合会出现高偏差问题

避免欠拟合(刻画不够)

  1. 寻找更好的特征-----具有代表性的
  2. 用更多的特征-----增大输入向量的维度
  3. 用更复杂的模型

避免过拟合(刻画太细,泛化太差)

  1. 增大数据集合-----使用更多的数据,噪声点比重减少
  2. 减少数据特征-----减小数据维度,高维空间密度小
  3. 正则化方法-----即在对模型的目标函数(objective function)或代价函数(cost function)加上正则项

Bias、Variance和K-fold的关系??

下面解释一下Bias、Variance和k-fold的关系:k-fold交叉验证常用来确定不同类型的模型(线性、指数等)哪一种更好,为了减少数据划分对模型评价的影响,最终选出来的模型类型(线性、指数等)是k次建模的误差平均值最小的模型。当k较大时,经过更多次数的平均可以学习得到更符合真实数据分布的模型,Bias就小了,但是这样一来模型就更加拟合训练数据集,再去测试集上预测的时候预测误差的期望值就变大了,从而Variance就大了;反之,k较小时模型不会过度拟合训练数据,从而Bias较大,但是正因为没有过度拟合训练数据,Variance也较小。

链接:https://www.zhihu.com/question/27068705/answer/35286205

20、梯度消失与梯度爆炸问题

    梯度消失与梯度爆炸其实是一种情况,看接下来的文章就知道了。两种情况下梯度消失经常出现,一是在深层网络中,二是采用了不合适的激活函数,比如sigmoid。梯度爆炸一般出现在深层网络和权值初始化值太大的情况下,下面分别从这两个角度分析梯度消失和爆炸的原因。

 梯度爆炸的解决方法?

    1、解决方案是引入Gradient Clipping(梯度裁剪)。其思想是设置一个梯度剪切阈值,然后更新梯度的时候,如果梯度超过这个阈值,那么就将其强制限制在这个范围之内。这可以防止梯度爆炸。将梯度约束在一个范围内,这样不会使得梯度过大。

   2、另外一种解决梯度爆炸的手段是采用权重正则化(weithts regularization)比较常见的是l1正则,和l2正则。正则化是通过对网络权重做正则限制过拟合,仔细看正则项在损失函数的形式:
                                               
 其中,α 是指正则项系数,因此,如果发生梯度爆炸,权值的范数就会变的非常大,通过正则化项,可以部分限制梯度爆炸的发生。注:事实上,在深度神经网络中,往往是梯度消失出现的更多一些。

  3、Relu函数,如果激活函数的导数为1,relu函数的导数在正数部分是恒等于1的,因此在深层网络中使用relu激活函数就不会导致梯度消失和爆炸的问题。

 4、Batchnorm本质上是解决反向传播过程中的梯度问题。batchnorm全名是batch normalization,简称BN,即批量规范化,通过规范化操作将输出信号x规范化保证网络的稳定性。大概讲一下batchnorm解决梯度的问题上。具体来说就是反向传播中,经过每一层的梯度会乘以该层的权重,举个简单例子:

神经网络的梯度消失问题?

     当梯度小于1时,预测值与真实值之间的误差每传播一层会衰减一次,如果在深层模型中使用sigmoid作为激活函数,这种现象尤为明显,将导致模型收敛停滞不前。在反向传播算法计算每一层的误差项的时候,需要乘以本层激活函数的导数值,如果导数值接近于0,则多次乘积之后误差项会趋向于0,而参数的梯度值通过误差项计算,这会导致参数的梯度值接近于0,无法用梯度下降法来有效的更新参数的值。

 梯度爆炸的解决方法?

    1、改进激活函数,选用更不容易饱和的函数,如ReLU函数,同上,ReLU由于非负区间的梯度为常数,因此不存在梯度消失问题,使得模型的收敛速度维持在一个稳定状态。

  2、Batchnorm,同上。

relu的主要贡献在于:

  1.  -- 解决了梯度消失、爆炸的问题
  2.  -- 计算方便,计算速度快
  3.  -- 加速了网络的训练

同时也存在一些缺点

  1. 由于负数部分恒为0,会导致一些神经元无法激活(可通过设置小学习率部分解决)
  2.  输出不是以0为中心的

关于梯度消失和爆炸详细可参见:https://blog.csdn.net/qq_25737169/article/details/78847691

21、主成分分析

      主成分分析是一种数据降维和去除相关性的方法,它通过线性变换将向量投影到低维空间。结果向量的维数小于原始向量的维数。计算时,先计算样本x(1*n的矩阵n维数据)的协方差矩阵(n*n矩阵),再对其进行特征值分解,选取最大的一部分特征值和对应的特征向量(n*1),构成投影矩阵(n*m矩阵,它的每一列都是主成分的特征向量,m是指选取的特征向量数)。进行降维时,先将输入向量减掉均值向量,然后右乘投影矩阵,即可得到投影后的向量X^{'}=X*W

      主成分分析一种无监督学习算法,也是一种线性方法。

22、线性判别分析

       线性判别分析向最大化类间差异、最小化类内差异的方向线性投影。其基本思想是通过线性投影来最小化同类样本间的差异,最大化不同类样本间的差异。具体做法是寻找一个向低维空间的投影矩阵W,样本的特征向量x经过投影之后得到的新向量:y = Wx

     同一类样投影后的结果向量差异尽可能小,不同类的样本差异尽可能大。简单的说,就是经过这个投影之后同一类的样本进来聚集在一起,不同类的样本尽可能离得远。这种最大化类间差异,最小化类内差异的做法,在机器学习的很多地方都有使用。

类内散布矩阵定义为:

                               

它衡量的内类样本的发散程度。其中mi为每个类的均值向量,m为所有样本的均值向量。类间散布矩阵定义为:

                           

它衡量的了各类样本之间的差异。训练时的优化目标是类间差异与类内差异的比值:

                           

LDA是有监督的学习算法,在计算过程中利用了样本标签值,是线性模型。LDA也不能直接用于分类和回归问题,要对降维后的向量进行分类还需要借助其他算法。详细:https://blog.csdn.net/qq_30815237/article/details/88966267

23、kNN算法

     kNN算法将样本分到离它最相似的样本所属的类。算法本质上使用了模板匹配的思想。要确定一个样本的类别,可以计算它与所有训练样本的距离,然后找出和该样本最接近的k个样本,统计这些样本的类别进行投票,票数最多的那个类就是分类结果。

      由于需要计算样本间的距离,因此需要依赖距离定义,常用的有欧氏距离,Mahalanobis距离,Bhattacharyya距离。另外,还可以通过学习得到距离函数,这就是距离度量学习。

      kNN算法是一种判别模型,即支持分类问题,也支持回归问题,是一种非线性模型。它天然的支持多分类问题。kNN算法没有训练过程,是一种基于实例的算法。是有监督学习


1、用梯度下降训练神经网络的参数,为什么参数有时会被训练为nan值?

输入数据本身存在nan值,或者梯度爆炸了(可以降低学习率、或者设置梯度的阈值)

2、卷积神经网络CNN中池化层有什么作用?

减小图像尺寸即数据降维,缓解过拟合,保持一定程度的旋转和平移不变性。

3、请列举几种常见的激活函数。激活函数有什么作用?

sigmoidrelu,tanh。非线性化

4、神经网络中Dropout的作用?具体是怎么实现的?

防止过拟合。每次训练,都对每个神经网络单元,按一定概率临时丢弃。

5、利用梯度下降法训练神经网络,发现模型loss不变,可能有哪些问题?怎么解决?

很有可能是梯度消失了,它表示神经网络迭代更新时,有些权值不更新的现象。改变激活函数,改变权值的初始化等。

6、如何解决不平衡数据集的分类问题?

可以扩充数据集,对数据重新采样,改变评价指标等。

7、残差网络为什么能做到很深层?

神经网络在反向传播过程中要不断地传播梯度,而当网络层数加深时,梯度在逐层传播过程中会逐渐衰减,导致无法对前面网络层的权重进行有效的调整。残差网络中, 加入了short connections 为梯度带来了一个直接向前面层的传播通道,缓解了梯度的减小问题。

8、相比sigmoid激活函数ReLU激活函数有什么优势?

(1) 防止梯度消失 (sigmoid的导数只有在0附近的时候有比较好的激活性,在正负饱和区的梯度都接近于0)

(2) ReLU的输出具有稀疏性

(3) ReLU函数简单计算速度快 

9、卷积神经网络中空洞卷积的作用是什么?

空洞卷积也叫扩张卷积,在保持参数个数不变的情况下增大了卷积核的感受野,同时它可以保证输出的特征映射(feature map)的大小保持不变。一个扩张率为2的3×3卷积核,感受野与5×5的卷积核相同,但参数数量仅为9个。

10、解释下卷积神经网络中感受野的概念?

在卷积神经网络中,感受野 (receptive field)的定义是:卷积神经网络每一层输出的特征图(feature map)上的像素点在原始图像上映射的区域大小。

11、卷积神经网络中im2col是如何实现的?

使用im2col的方法将划窗卷积转为两个大的矩阵相乘,见下图:

                       

12、多任务学习中标签缺失如何处理?

一般做法是将缺失的标签设置特殊标志,在计算梯度的时候忽略。

13、正则化

    为了防止过拟合,可以为损失函数加上一个惩罚项,对复杂的模型进行惩罚,强制让模型的参数值尽可能小以使得模型更简单,加入惩罚项之后损失函数为:

                                    

      正则化被广泛应用于各种机器学习算法,如岭回归,LASSO回归,logistic回归,神经网络等。除了直接加上正则化项之外,还有其他强制让模型变简单的方法,如决策树的剪枝算法,神经网络训练中的dropout技术,提前终止技术等。

14、深度学习模型参数初始化都有哪些方法?

(1)Gaussian 满足mean=0,std=1的高斯分布x∼N(mean,std2)

(2)Xavier 满足x∼U(−a,+a)x∼U(−a,+a)的均匀分布, 其中 a = sqrt(3/n)

(3)MSRA 满足x∼N(0,σ2)x∼N(0,σ2)的高斯分布,其中σ = sqrt(2/n)

(4)Uniform 满足min=0,max=1的均匀分布。x∼U(min,max)x∼U(min,max)

15、卷积神经网络为什么会具有平移等不变性?

MaxPooling能保证卷积神经网络在一定范围内平移特征能得到同样的激励,具有平移不变形。

16、神经网络参数共享(parameter sharing)是指什么?

所谓的权值共享就是说,用一个卷积核去卷积一张图,这张图每个位置是被同样数值的卷积核操作的,权重是一样的,也就是参数共享。

17、拉格朗日乘法与对偶问题与KKT条件

    对偶是最优化方法里的一种方法,它将一个最优化问题转换成另外一个问题,二者是等价的。拉格朗日对偶是其中的典型例子。对于如下带等式约束和不等式约束的优化问题:

                                                 

与拉格朗日乘数法类似,构造广义拉格朗日函数:

                                   

特别要求\alpha _{i}\geq 0原问题为:

                                                   

    即先固定住x,调整拉格朗日乘子变量,让函数L取极大值;然后控制变量x,让目标函数取极小值。原问题与我们要优化的原始问题是等价的。

对偶问题为

                                                    

和原问题相反,这里是先控制变量x,让函数L取极小值;然后控制拉格朗日乘子变量,让函数取极大值。

拉格朗日对偶在机器学习中的典型应用是支持向量机。

18、列举你所知道的神经网络中使用的损失函数

欧氏距离,交叉熵,对比损失,合页损失

19、对于多分类问题,为什么神经网络一般使用交叉熵而不用欧氏距离损失?

交叉熵在一般情况下更容易收敛到一个更好的解。

20、1x1卷积有什么用途?

通道降维,保证卷积神经网络可以接受任何尺寸的输入数据

21、随机梯度下降法,在每次迭代时能保证目标函数值一定下降吗?为什么?

不能,每次迭代时目标函数不一样

22、梯度下降法,为什么需要设置一个学习率?

使得迭代之后的值在上次值的邻域内,保证可以忽略泰勒展开中的二次及二次以上的项

23、解释梯度下降法中动量项的作用

利用之前迭代时的梯度值,减小震荡

24、为什么现在倾向于用小尺寸的卷积核?

用多个小卷积核串联可以有大卷积核同样的能力,而且参数更少,另外有更多次的激活函数作用,增强非线性

25、解释GoogLeNet的Inception模块的原理

对输入图像用多个不同尺寸的卷积核、池化操作进行同时处理,然后将输出结果按照通道拼接起来

26、解释反卷积的原理和用途

反卷积即转置卷积,正向传播时乘以卷积核的转置矩阵,反向传播时乘以卷积核矩阵

由卷积输出结果近似重构输入数据,上采样

27、解释批量归一化的原理

在数据送入神经网络的某一层进行处理之前,对数据做归一化。按照训练样本的批量进行处理,先减掉这批样本的均值,然后除以标准差,然后进行缩放和平移。缩放和平移参数同训练得到。预测时使用训练时确定的这些值来计算

28、解释SVM核函数的原理

核函数将数据映射到更高维的空间后处理,但不用做这种显式映射,而是先对两个样本向量做内积,然后用核函数映射。这等价于先进行映射,然后再做内积。

29、什么是过拟合,过拟合产生的原因是什么?有什么方法能减轻过拟合?

过拟合指在训练集上表现的很好,但在测试集上表现很差,推广泛化能力差。产生过拟合的原因是训练样本的抽样误差,训练时拟合了这种误差。增加训练样本,尤其是样本的代表性;正则化

30、什么样的函数可以用作激活函数?

非线性,几乎处处可导,单调

31、什么是鞍点问题?

梯度为0,Hessian矩阵不定的点,不是极值点

32、在训练深度神经网络的过程中,遇到过哪些问题,怎么解决的?

不收敛,收敛太慢,泛化能力差。调整网络结构,调整样本,调整学习率,调整参数初始化策略

33、SVM如何解决多分类问题

多个二分类器组合。1对1方案,1对剩余方案,多类损失函数

34、列举你知道的聚类算法

层次聚类,k均值算法,DBSCAN算法,OPTICS算法,谱聚类

35、列举常用的最优化方法

  1. 梯度下降法,梯度下降法的改进型如AdaDelta,AdaGrad,Adam,NAG等。
  2. 牛顿法,拟牛顿法
  3. 坐标下降法

36、关于神经网络的说法中,正确的是( C)

A.增加网络层数,总能减小训练集错误率

B.减小网络层数,总能减小测试集错误率

C.增加网络层数,可能增加测试集错误率

因为:增加神经网络层数,确实可能提高模型的泛化性能,但不能绝对地说更深的网络能带来更小的错误率,还是要根据实际应用来判断,比如会导致过拟合等问题,因此只能选C。


1、为什么随机森林能降低方差?

随机森林的预测输出值是多个决策树的均值,如果有n个独立同分布的随机变量xi,它们的方差都为σ2,则它们的均值的方差为:

                                             

2、对于带等式和不等式约束的优化问题,KKT条件是取得极值的充分条件还是必要条件?对于SVM呢?

对于一般的问题,KKT条件仅是取得极值的必要条件。对于凸优化问题,则是充分条件,SVM是凸优化问题。

3、解释维数灾难的概念

当特征向量很少时,增加特征,可以提高算法的精度,但当特征向量的维数增加到一定数量之后,再增加特征,算法的精度反而会下降

4、Logistic回归为什么用交叉熵而不用欧氏距离做损失函数?

如果用欧氏距离,不是凸函数,而用交叉熵则是凸函数

 5、解释hinge loss损失函数

如果样本没有违反不等式约束,则损失为0;如果违反约束,则有一个正的损失值。

铰链损失(Hinge Loss):主要用于支持向量机(SVM) 中,Hinge loss 的叫法来源于其损失函数的图形,为一个折线,通用的函数表达式为:

                                                        

在机器学习中,Hing 可以用来解 间距最大化 的问题,最有代表性的就是SVM 问题,最初的SVM 优化函数:

                                                             

将约束项进行变形,则损失函数可以进一步写为: 
                                       

因此, SVM 的损失函数可以看作是 L2-norm 和 Hinge loss 之和

from:https://blog.csdn.net/u010976453/article/details/78488279

 6、解释GBDT的核心思想

     用加法模拟,更准确的说,是多棵决策树树来拟合一个目标函数。每一棵决策树拟合的是之前迭代得到的模型的残差。求解的时候,对目标函数使用了一阶泰勒展开,用梯度下降法来训练决策树。残差向量是它的全局最优方向,这就是Gradient。

     决策树分为两大类,回归树和分类树。前者用于预测实数值,如明天的温度、用户的年龄、网页的相关程度;后者用于分类标签值,如晴天/阴天/雾/雨、用户性别、网页是否是垃圾页面。这里要强调的是,前者的结果加减是有意义的,如10岁+5岁-3岁=12岁,后者则无意义,如男+男+女=到底是男是女? GBDT的核心在于累加所有树的结果作为最终结果,就像前面对年龄的累加(-3是加负3),而分类树的结果显然是没办法累加的,所以GBDT中的树都是回归树,不是分类树。

     GBDT的思想可以用一个通俗的例子解释,假如有个人30岁,我们首先用20岁去拟合,发现损失有10岁,这时我们用6岁去拟合剩下的损失,发现差距还有4岁,第三轮我们用3岁拟合剩下的差距,差距就只有一岁了。如果我们的迭代轮数还没有完,可以继续迭代下面,每一轮迭代,拟合的岁数误差都会减小。

from:https://www.cnblogs.com/peizhe123/p/5086128.html

 7、解释XGBoost的核心思想

在GBDT的基础上,目标函数增加了正则化项,并且在求解时做了二阶泰勒展开

9、什么是反卷积?

反卷积也称为转置卷积,如果用矩阵乘法实现卷积操作,将卷积核平铺为矩阵,则转置卷积在正向计算时左乘这个矩阵的转置WT,在反向传播时左乘W,与卷积操作刚好相反,需要注意的是,反卷积不是卷积的逆运算。

10、反卷积有哪些用途?

实现上采样;近似重构输入图像,卷积层可视化

11、PCA(主成分分析)优化的目标是什么?

最小化重构误差/最大化投影后的方差

12、LDA(线性判别分析)优化的目标是什么?

最大化类间差异与类内差异的比值

14、softmax回归训练时的目标函数时凸函数吗?

是,但有不止一个全局最优解

15、SVM为什么要求解对偶问题?为什么对偶问题与原问题等价?

原问题不容易求解,含有大量的不易处理的不等式约束。原问题满足Slater条件,强对偶成立,因此原问题与对偶问题等价

16、神经网络是生成模型还是判别模型?

     从概率分布的角度考虑,对于一堆样本数据,每个均有特征Xi对应分类标记yi。数据要求:生成模型需要的数据量比较大,能够较好地估计概率密度;而判别模型对数据样本量的要求没有那么多。

    生成模型:学习得到联合概率分布P(x,y),即特征x和标记y共同出现的概率,然后求条件概率分布。能够学习到数据生成的机制。生成模型以统计学和Bayes作为理论基础:

1、朴素贝叶斯:

通过学习先验概率分布和条件概率分布,得到联合概率分布,然后对应分类时的后验概率为:

使用极大似然估计(使用样本中的数据分布来拟合数据的实际分布概率)得到先验概率。

2、混合高斯模型:

3、隐马尔可夫模型 (HMM)

    由隐藏的马尔可夫链随机生成观测序列,是生成模型。HMM是关于时序的概率模型,描述由一个隐藏的马尔可夫链随机生成不可观测的状态随机序列,再由各个状态生成一个观测而产生观测随机序列的过程。包含三要素:初始状态概率向量pie,状态转移概率矩阵A,观测概率矩阵B。

    判别模型:学习得到条件概率分布P(y|x),即在特征x出现的情况下标记y出现的概率。

1、感知机 (线性分类模型)

2、k近邻法

基于已知样本,对未知样本进行预测时,找到对应的K个最近邻,通过多数表决进行预测。没有显式的学习过程。

3、决策树

决策树在每个单元定义一个类的概率分布,形成一个条件概率分布。决策树中递归地选择最优特征,所谓最优特征即分类效果最好的特征。

4、logistic回归模型

使用条件概率分布表示,

                                    

可以使用极大似然估计法估计模型参数,对优化目标使用梯度下降法或者拟牛顿法。直接输出类后验概率p(y|x),没有对类条件概率p(x|y)或者联合概率p(x, y)建模。

5、最大熵模型

原理:概率模型中,熵最大的模型是最好的模型,可以使用拉格朗日函数求解对偶问题解决。

6、支持向量机 (SVM)

SVM分为线性可分支持向量机 (硬间隔最大化)、线性支持向量机 (软间隔最大化)、非线性支持向量机 (核函数)三种。目的是最大化间隔,这是和感知机最大的区别。

7、boosting方法 (AdaBoost等)

通过改变训练样本的权重,训练多个分类器,将分类器进行线性组合,提升分类性能。AdaBoost采用加权多数表决的方法。

8、条件随机场 (conditional random field, CRF)

给定一组输入随机变量条件下另一组输出随机变量的条件概率分布模型,其特点是假设输出随机变量构成马尔可夫随机场。可应用于标注问题。

9、CNN

训练过程中,每一个中间层都有其功能,但其具体的功能无法知道,直接输出类别标签,或者输出类后验概率p(y|x)

from:https://blog.csdn.net/u010358304/article/details/79748153

18、Batch Normalization 和 Group Normalization有何区别?

BN是在 batch这个维度上进行归一化,GN是计算channel方向每个group的均值和方差

23、目标检测中IOU是如何计算的?

检测结果与 Ground Truth 的交集比上它们的并集,即为检测的准确率 IoU

26、在神经网络体系结构中,哪些会有权重共享??

(1)卷积神经网络

(2)递归神经网络

(3)全连接网络

答案 (1)&(2)

27、一个典型人脸识别系统的识别流程?

人脸检测--》人脸对齐--》人脸特征提取--》人脸特征比对

29、使用深度卷积网络做图像分类如果训练一个拥有1000万个类的模型会碰到什么问题?

提示:内存/显存占用;模型收敛速度等

31、深度学习中为什么不用二阶导去优化?

Hessian矩阵是n*n, 在高维情况下这个矩阵非常大,计算和存储都是问题

32、深度机器学习中的mini-batch的大小对学习效果有何影响?

mini-batch太小会导致收敛变慢,太大容易陷入sharp minima,泛化性不好

33、线性回归对于数据的假设是怎样的?

(1) 线性,y是多个自变量x之间的线性组合

(2) 同方差性,不同的因变量x的方差都是相同的

(3) 弱外生性,假设用来预测的自变量x是没有测量误差的

(4) 预测变量之中没有多重共线性

 34、什么是共线性, 跟过拟合有啥关联?

共线性:多变量线性回归中,变量之间由于存在高度相关关系而使回归估计不准确。

共线性会造成冗余,导致过拟合。

解决方法:排除变量的相关性/加入权重正则。

35、Bias和Variance的区别?

Bias量了学习算法的期望预测与真实结果的偏离程度,即刻画了算法本身的拟合能力。

Variance度量了同样大小的训练集的变动所导致的学习性能变化,即刻画了数据扰动所造成的影响。

36、对于支持向量机,高斯核一般比线性核有更好的精度,但实际应用中为什么一般用线性核而不用高斯核?

如果训练样本的量很大,训练得到的模型中支持向量的数量太多,在每次做预测时,高斯核需要计算待预测样本与每个支持向量的内积,然后做核函数变换,这会非常耗;而线性核只需要计算WX+b

37、高斯混合模型中,为什么各个高斯分量的权重之和要保证为1?

为了保证这个函数时一个概率密度函数,即积分值为1

42、为什么很多时候用正态分布来对随机变量建模?

     现实世界中很多变量都服从或近似服从正态分布。中心极限定理指出,抽样得到的多个独立同分布的随机变量样本,当样本数趋向于正无穷时,它们的和服从正态分布

from:https://mp.weixin.qq.com/s/e8rlmjNp9solM3ZJXsioaA

from:机器学习与深度学习核心知识点总结

from:机器学习与深度学习常见面试题(下)

猜你喜欢

转载自blog.csdn.net/qq_30815237/article/details/89218316