机器学习深度学习常见问题汇总

文章目录

    • 统计/机器学习
      • 1.1 请你简要描述一下生成模型和判别模型基本形式有哪些
      • 1.2 集成学习
        • 1.2.1 请你简要讲一下对于改进模型的两种方法AdaBoost和GBDT的区别
        • 1.2.2 [机器学习算法中GBDT和\[XGBOOST\](https://blog.csdn.net/weixin_41358871/article/details/81541482?utm_source=app&from=singlemessage)的区别有哪些?](https://blog.csdn.net/HHTNAN/article/details/80894247)
      • 1.3 朴素贝叶斯
        • 1.3.1 请你讲一下,使用朴素贝叶斯(naive Bayes)法的要求是什么?
        • 1.3.2 朴素贝叶斯与LR的区别?
        • 1.3.3 朴素贝叶斯“朴素”在哪里?
        • 1.3.4 在估计条件概率P(X|Y)时出现概率为0的情况怎么办?
      • 1.4 CRF和HMM
    • 2 网络学习
      • 2.1 请你解释一下Attention机制的作用
      • 2.2 在训练过程中,若一个模型不收敛,那么是否说明这个模型无效?导致模型不收敛的原因有哪些?
    • 3 海量数据处理
      • 3.1 [海量数据中找出前k大数(topk问题)](https://blog.csdn.net/zyq522376829/article/details/47686867)
      • 3.2 请你说一下,对一千万个整数排序,整数范围在[-1000,1000]间,用什么排序最快?
    • 4 数据结构与算法
      • 4.1 Kruskal算法的基本过程(最小生成树)
      • 4.2 有8个球,其中1个比较重,提供天平,请问你最少称几次能够找到那个不一样的球?

   这篇blog肯定是不严谨的,单纯记录自己遇到这些问题会怎么解释,慎入。

统计/机器学习

1.1 请你简要描述一下生成模型和判别模型基本形式有哪些

  首先,监督学习的任务是学习一个模型,应用这一模型,对给定的输入预测相应的输出。 该模型的一般形式为一个决策函数 f ( x ) f(x) f(x)或者条件概率分布 P ( y ∣ x ) P(y|x) P(yx).

  1. 决策函数
    y = f ( x ) y=f(x) y=f(x)
    直接得到输入 x x x 到输出 y y y(某个类别)的映射函数。(例如神经网络和SVM等属于这种)

  2. 条件概率分布
    P ( y ∣ x ) P(y|x) P(yx)
    预测时用最大后验概率(MAP) y = a r g m a x y i P ( y i ∣ x ) y=argmax_{yi}P(y_i|x) y=argmaxyiP(yix)的方法决定输出类别 y y y。(例如贝叶斯分类器就属于这种)

  直观上来看,生成模型关注数据是如何生成的,也就是关注数据的分布,用公式表示为 P ( x , y ) P(x,y) P(x,y),然后利用条件概率公式求得 P ( y ∣ x ) P(y|x) P(yx)。预测时则利用最大后验概率得到具体取哪个 y y y。生成模型能够从统计的角度表示数据的分布情况,能够反映同类数据本身的相似度,但它不关心到底划分各类的那个分类边界在哪。生成方法的学习收敛速度更快、即当样本容量增加的时候,学到的模型可以更快地收敛于真实模型。当存在隐变量时,仍可以用生成方法学习,此时判别方法不能用。典型的生成模型有朴素贝叶斯分类器,马尔科夫模型,高斯混合模型
  而判别模型,从名字上就可以知道,他是学习如何判别的,也就是直接学习类别之间的差别,用公式表示则是直接学习 P ( y ∣ x ) P(y|x) P(yx),然后利用最大后验概率得到具体取哪个 y y y。判别方法寻找不同类别之间的最优分类面,反映的是异类数据之间的差异。判别方法利用了训练数据的类别标识信息,直接学习的是条件概率 P ( y ∣ x ) P(y|x) P(yx)或者决策函数 f ( x ) f(x) f(x),直接面对预测,往往学习的准确率更高,而且可以对数据进行各种程度上的抽象,定义特征使用特征,因此可以简化学习;缺点是不能反映训练数据本身的特性。典型的判别模型有k近邻法,感知机,决策树,logistic回归,最大熵模型,SVM,boosting方法,条件随机场

1.2 集成学习

1.2.1 请你简要讲一下对于改进模型的两种方法AdaBoost和GBDT的区别

  和AdaBoost一样,Gradient Boosting也是重复选择一个表现一般的模型并且每次基于先前模型的表现进行调整。
  不同的是,AdaBoost是通过提升错分数据点的权重来定位模型的不足,而Gradient Boosting是通过算梯度(gradient)来定位模型的不足。因此相比AdaBoost, Gradient Boosting可以使用更多种类的目标函数,而当目标函数是均方误差时,计算损失函数的负梯度值在当前模型的值即为残差。

1.2.2 机器学习算法中GBDT和[XGBOOST](https://blog.csdn.net/weixin_41358871/article/details/81541482?utm_source=app&from=singlemessage)的区别有哪些?

  • 基分类器的选择:传统GBDT以CART作为基分类器,XGBoost还支持线性分类器,这个时候XGBoost相当于带L1和L2正则化项的逻辑斯蒂回归(分类问题)或者线性回归(回归问题)。

  • 二阶泰勒展开:传统GBDT在优化时只用到一阶导数信息,XGBoost则对代价函数进行了二阶泰勒展开,同时用到了一阶和二阶导数。顺便提一下,XGBoost工具支持自定义损失函数,只要函数可一阶和二阶求导。

  • 方差-偏差权衡:XGBoost在目标函数里加入了正则项,用于控制模型的复杂度。正则项里包含了树的叶子节点个数、每个叶子节点上输出分数的L2模的平方和。从Bias-variance tradeoff角度来讲,正则项降低了模型的variance,使学习出来的模型更加简单,防止过拟合,这也是XGBoost优于传统GBDT的一个特性。

1.3 朴素贝叶斯

1.3.1 请你讲一下,使用朴素贝叶斯(naive Bayes)法的要求是什么?

  链接:https://www.nowcoder.com/questionTerminal/8fb44328b4b3407587f64370c2b6ba2c

  朴素贝叶斯是基于贝叶斯定理和条件独立性假设的分类方法 。对于给定的训练数据集,首先基于特征条件独立性假设学习输入/输出的联合概率分布 P ( X , Y ) P(X,Y) P(X,Y) (其中 P ( X , Y ) = P ( X ∣ Y ) P ( Y ) P(X,Y) = P(X|Y)P(Y) P(X,Y)=P(XY)P(Y)),然后基于此模型,对给定的输入 x x x,利用贝叶斯定理求出后验概率的最大的输出 y y y

1.3.2 朴素贝叶斯与LR的区别?

  简单来说:朴素贝叶斯是生成模型,根据已有样本进行贝叶斯估计学习出先验概率P(Y)和条件概率P(X|Y),进而求出联合分布概率P(XY),最后利用贝叶斯定理求解P(Y|X), 而LR是判别模型,根据极大化对数似然函数直接求出条件概率P(Y|X);朴素贝叶斯是基于很强的条件独立假设(在已知分类Y的条件下,各个特征变量取值是相互独立的),而LR则对此没有要求;朴素贝叶斯适用于数据集少的情景,而LR适用于大规模数据集。

1.3.3 朴素贝叶斯“朴素”在哪里?

  简单来说:利用贝叶斯定理求解联合概率 P ( X Y ) P(XY) P(XY)时,需要计算条件概率 P ( X ∣ Y ) P(X|Y) P(XY)。在计算 P ( X ∣ Y ) P(X|Y) P(XY)时,朴素贝叶斯做了一个很强的条件独立假设(当 Y Y Y确定时, X X X的各个分量取值之间相互独立),即 P ( X 1 = x 1 , X 2 = x 2 , . . . X j = x j ∣ Y = y k ) = P ( X 1 = x 1 ∣ Y = y k ) ∗ P ( X 2 = x 2 ∣ Y = y k ) ∗ . . . ∗ P ( X j = x j ∣ Y = y k ) P(X1=x1,X2=x2,...Xj=xj|Y=yk) = P(X1=x1|Y=yk)*P(X2=x2|Y=yk)*...*P(Xj=xj|Y=yk) P(X1=x1,X2=x2,...Xj=xjY=yk)=P(X1=x1Y=yk)P(X2=x2Y=yk)...P(Xj=xjY=yk)

  • 优点:对小规模的数据表现很好,适合多分类任务,适合增量式训练。

  • 缺点:对输入数据的表达形式很敏感(离散、连续,值极大极小之类的)。

1.3.4 在估计条件概率P(X|Y)时出现概率为0的情况怎么办?

  简单来说:引入λ,当λ=1时称为拉普拉斯平滑


作者:jingyi130705008
来源:CSDN
原文:https://blog.csdn.net/jingyi130705008/article/details/79464740
版权声明:本文为博主原创文章,转载请附上博文链接!

1.4 CRF和HMM

1)CRF没有HMM那样严格的独立性假设条件,因而可以容纳任意的上下文信息。特征设计灵活(与ME一样) ————与HMM比较
(2)同时,由于CRF计算全局最优输出节点的条件概率,它还克服了最大熵马尔可夫模型标记偏置(Label-bias)的缺点。 ­­————与MEMM比较
(3)CRF是在给定需要标记的观察序列的条件下,计算整个标记序列的联合概率分布,而不是在给定当前状态条件下,定义下一个状态的状态分布。
————与ME比较
缺点:训练代价大、复杂度高

2 网络学习

2.1 请你解释一下Attention机制的作用

  Attention机制的本质来自于人类视觉注意力机制。人们在看东西的时候一般不会从到头看到尾全部都看,往往只会根据需求观察注意特定的一部分。
  简单来说,就是一种权重参数的分配机制,目标是协助模型捕捉重要信息。具体一点就是,给定一组样本你,以及一个目标样本,attention机制就是通过计算目标样本与给定样本组中每一个样本的相似性,得到每个样本的权重系数,再通过对给定样本组加权求和,得到最终Attention数值。
  Multi-Head Attention,可以理解成Attention版本的ensemble,不同的head学习不同子空间的语义,可以允许模型在不同的表示子空间里学习到相关的信息。那么可以理解为针对不同的特征使用不同的Attention。

2.2 在训练过程中,若一个模型不收敛,那么是否说明这个模型无效?导致模型不收敛的原因有哪些?

  不能说明这个模型就是无效的,造成模型不收敛的原因有很多,可能经过调整,模型效果很好。

  • 数据分类的标注不准确,样本的信息量太大导致模型不足以fit整个样本空间。
  • 学习率设置的太大容易产生震荡,太小会导致不收敛。
  • 可能复杂的分类任务用了简单的模型。
  • 数据没有进行归一化的操作。

3 海量数据处理

3.1 海量数据中找出前k大数(topk问题)

  参考链接给出的内容比较详实,面试中可能会根据不同的情景做出不同的应对。
先取出前k个数,维护一个k个数的最小堆,遍历一遍剩余的元素,在此过程中维护小顶堆就可以了。
具体步骤如下:

  1. 取前k个元素(例如k=100),建立一个小顶堆。保持一个小顶堆得性质的步骤,运行时间为 O ( l g k ) O(lgk) Olgk);建立一个小顶堆运行时间为 k O ( l g k ) = O ( k l g k ) kO(lgk)=O(k lgk) kOlgk=O(klgk);
  2. 顺序读取后续元素,直到结束。每次读取一个元素,如果该元素比堆顶元素小,直接丢弃;如果大于堆顶元素,则用该元素替换堆顶元素,然后保持最小堆性质。最坏情况是每次都需要替换掉堆顶的最小元素,因此需要维护堆的代价为 ( N − k ) O ( l g k ) (N-k)O(lgk) (Nk)O(lgk); 最后这个堆中的元素就是前最大的k个。时间复杂度为O(N lgk)。

3.2 请你说一下,对一千万个整数排序,整数范围在[-1000,1000]间,用什么排序最快?

  计数排序或者桶排序(链接中利用桶排序思想实现了求如果排序之后,相邻两数的最大差值,有兴趣可以看一下),我不太熟悉桶排序,这里用计数排序简单实现了一下。

#include 
#include
using namespace std;
const int N = 2001;
int bucket[N];

int main()
{
    vector<int> arr = {-2,-2,-1,-1,-1,0,1,3 ,4,3,3};
    int length = arr.size();
    for (int i=0;i<length;i++)
    {
        bucket[arr[i]+1000]++;
    }
    for(int i=0;i<N;i++)
    {
        while(bucket[i]!=0)
        {
            cout<<i-1000<<" ";
            bucket[i]--;
        }
    }
    return 0;
}

4 数据结构与算法

4.1 Kruskal算法的基本过程(最小生成树)

4.2 有8个球,其中1个比较重,提供天平,请问你最少称几次能够找到那个不一样的球?

  比二分法少一次,第一次挑6个球放两边,各3个;如果等重,剩下两个比一下重的挑出来即可;如果一边重,再从这3个球中挑两个,一边放一个,将重的挑出来;如果等重,那么剩下的就是重的球。

你可能感兴趣的:(深度学习,机器学习)