当前位置:   article > 正文

2023双非计算机硕士应战秋招算法岗之百问百答_双非硕士计算机自然语言处理行吗

双非硕士计算机自然语言处理行吗

自我介绍

自我介绍说得好,一定会给面试官留下深刻的好印象,而且这一块全是自己来措辞,要突出的重点也是你自己来把控,所以从你的叙述中,面试官是可以听得出你对这个项目的熟悉程度以及你的思考深度的,所以,提前准备就尤为重要了,面试的时候要把每一个项目按照一定的逻辑叙述出来,在算法项目里面最为重要的当然是数据、特征、模型、效果,按照这个框架给讲清楚了,面试官听得轻松,接下来的面试阶段也会更流畅一些,因为面试官是会捕捉你的自我介绍里面的关键词的,以待之后的问答环节向你连环提问,这就暗含了一个tip,就是你所讲出来的,一定要做到比面试官更懂,那些做的含糊的东西就不要搬进来了,否则迟早会露馅。

  • 项目介绍

这是重中之重,项目会体现一个面试者的综合素质。那我们这种没有实习经历的该咋办呢?好办,去参加比赛,争取拿比赛的名次,然后把比赛里用到的算法搞的滚瓜烂熟的,面试官必然会对你项目中的细节展开,让你解剖一些他有疑问的点,比如正负样本的选取、特征处理、模型的细节,再比如你的比赛中用到了树模型,就得知道所有树模型相关的知识点,我随便举几个例子:XGBoost为什么对缺失值不敏感?相比普通的GBDT,XGBoost怎么处理缺失值?为什么xgboost/gbdt在调参时为什么树的深度很少就能达到很高的精度? 等等这种细节式的提问,一旦你回答的含糊其辞,面试官就必然会扣分的,所以千万不要怀着侥幸心理,觉得面试官不会问到,墨菲定理告诉我们,凡是可能出错的事就一定会发生,这些都是可以准备的,明明几乎是开卷考试了,为啥不提前去想好怎么回答,而要去考场上绞尽脑汁想个四不像的回答出来呢。比赛平台的话,大家肯定知道,像阿里天池、kaggle等等都是大家常参加比赛的平台。

  • 算法细节

面试官除了考察在项目中出现的算法的细节之外,还会就你的机器学习算法基础进行提问,我这里大概总结下比较重要的一些,传统算法: 逻辑回归、朴素贝叶斯、树模型(random forest/Adaboost/xgboost/lightgbm)、SVM、PageRank、聚类;一些机器学习的理论,非平衡问题、过拟合问题,交叉验证问题,模型选择问题;推荐系统:协同过滤、FM/FFM、LS-PLM、Wide&Deep、DeepFM、DIN、DIEN、ESMM、Embedding、召回、EE、性能评估;这些算是算法岗的核心,此外,一些代码语言的考察,也会是有一些面试官很看重的,比如C++/python/Spark等,当时为了准备这一项,我把我能想到的题都转化为了问答的形式,自问自答地去做准备,我在文章的最后把所有的题都列了出来。大家可以按照这个去准备,或者选择其中的一些。因为我面的是推荐算法岗位,所以会比较偏重这方面,后期如果我有时间,可以拓展到其他的领域,比如自然语言处理、计算机视觉等等。推荐的书的话,也是牛客上大神的一些经验,李航《统计学习方法》、《百面机器学习》、《百面深度学习》、《深度学习推荐系统》、周志华的《机器学习》。当然看完这些书是绝对不够的,看了不等于你掌握了,你循着我给你列出来的问题清单去过一遍,自己心里回答一遍,或者直接写出来,这样效果绝对顶,我在秋招的时候,真的几乎可以秒答,尽在自己的掌握之中。我也会在我的公众号陆续发布这些问题的解答,基本上已经写完了,大家也可以看我的网站,网站、公众号介绍在下面中有,欢迎大家一起交流。

  • 数据结构与算法题

这个也相当关键,有的公司甚至会根据你在这个方面的表现优劣决定你的去留,像头条是出了名的动态规划大师,老喜欢考一些中等或者hard的题,让人头疼。很多非计算机出身的因为本身没有基础,练习的不到位,就可能当场思路不清晰。我的建议是先按照专题来刷,比如像动态规划、滑动窗口专题、双指针、快慢指针、topK等等,刷个200题左右,然后就可以随机去刷了,一定要多刷题,这是强调一百遍都不为过的面试法则。推荐的书的话有《剑指offer》,网站的话可以找leetcode中文网。

一、机器学习百问百答
1.逻辑回归

  • 线性回归
    线性回归通常可以分为两种,一种是简单线性回归(y=ax),一种是多元线性回归(y=ax1+a2x2+…+anxn),原理基本就是用梯度下降法对最小二乘法算的误差函数进行优化。
  • 逻辑回归定义
    逻辑回归是一种广义线性的分类模型且其模型结构可以视为单层的神经网络,由一层输入层、一层仅带有一个sigmoid激活函数的神经元的输出层组成,而无隐藏层。其模型的功能可以简化成两步,“通过模型权重[w]对输入特征[x]线性求和+sigmoid激活输出概率”。

可以输出预测值:

  • 最大似然估计:
    条件:假设样本独立同分布;
    目标:估计出这个分布中的参数theta;
    方法:这一组样本的概率最大时就对应了该模型的参数值。

  • 推导一下逻辑回归的损失函数,并解释其含义。
    对于二分类问题的损失函数可以写成如下形式:
    如果是计算 m 个样本的平均的损失函数,只要将 m 个 Loss 叠累加取平均就可以了:

这就在最大似然法推导出的lr的学习目标——交叉熵损失(或对数损失函数),也就是让最大化使模型预测概率服从真实值的分布,预测概率的分布离真实分布越近,模型越好。可以关注到一个点,如上式逻辑回归在交叉熵为目标以sigmoid输出的预测概率,概率值只能尽量趋近0或1,同理loss也并不会为0。
LR需要得到最大似然估计,即模型得到的预测分布应该与数据的实际分布情况尽可能相近。

KL散度(相对熵)是用来衡量两个概率分布之间的差异。模型需要得到最大似然估计,乘以负Log以后就相当于求最小值,此时等价于求最小化KL散度(相对熵)。所以得到KL散度就得到了最大似然。又因为KL散度中包含两个部分,第一部分是交叉熵,第二部分是信息熵,即KL=交叉熵−信息熵。信息熵是消除不确定性所需信息量的度量,简单来说就是真实的概率分布,而这部分是固定的。所以优化KL散度就是近似于优化交叉熵。

在机器学习中我们有损失函数的概念,其衡量的是模型预测错误的程度。如果取整个数据集上的平均对数似然损失,我们可以得到:

即在逻辑回归模型中,我们最大化似然函数和最小化损失函数实际上是等价的

  • 在广告LR模型中,为什么要做特征组合?
    特征组合是指两个或多个特征相乘形成的合成特征。
    特征的相乘组合可以提供超出这些特征单独能够提供的预测能力。
    如果只是简单的进行两两组合,很容易导致参数过多、多拟合等问题,而且并不是所有的特征组合都有意义。所以该怎么进行有效的特征组合呢,最常用的是基于决策树的特征组合寻找方法
  • 为什么 LR 模型要使用 sigmoid 函数,背后的数学原理是什么?为什么不用其他函数?

在深度学习中常用到的 Sigmoid 函数就是 Logistic 的分布函数在服从标准正态分布的特殊形式。

从LR的目的上来看,在选择函数时,有两个条件是必须要满足的:

  1. 取值范围在0~1之间。
  2. 对于一个事件发生情况,50%是其结果的分水岭,选择函数应该在0.5中心对称。
  3. sigmoid函数的导数是以它本身为因变量的函数f′(x)=f(x)(1−f(x))

伯努利分布就是只有两个取值且给定期望值为下的熵最大的分布,伯努利分布也属于指数分布族。

https://blog.csdn.net/saltriver/article/details/57531963

  • 为什么LR可以用来做点击率预估?
  • 满足什么样条件的数据用LR最好?换句话说,为了LR工作的更好,要对数据做一些什么处理?
  • 逻辑回归能否解决非线性分类问题?
    对特征做非线性变换 核映射线性的核映射就是内积,做一次投影。
  • 给一个有m个样本n维特征的数据集,LR算法中梯度的维度是多少?
  • 逻辑回归损失函数为什么使用最大似然估计而不用最小二乘法?
  • 如何求解逻辑回归的参数?
  • SVM
    SVM是一个二类分类器,它的目标是找到一个超平面,使用两类数据离超平面越远越好,从而对新的数据分类更准确,即使分类器更加健壮。

支持向量(Support Vetor):就是离分隔超平面最近的那些点。
寻找最大间隔:就是寻找最大化支持向量到分隔超平面的距离,在此条件下求出分隔超平面。

  • 工作流程:

  • 当SVM线性不可分的时候:
    使用核函数:通过某非线性变换 φ( x) ,将输入空间映射到高维特征空间。在机器学习中常用的核函数
    线性: 内积

  • 松弛变量(软间隔):

    之前讨论的情况都是建立在样例线性可分的假设上,当样例线性不可分时,我们可以尝试使用核函数来将特征映射到高维,这样很可能就可分了。然而,映射后我们也不能100%保证可分。那怎么办呢,我们需要将模型进行调整,以保证在不可分的情况下,也能够尽可能地找出分隔超平面。

软间隔:引入非负参数 后(称为松弛变量),就允许某些样本点的函数间隔小于1,即在最大间隔区间里面,样本点在对方的区域中。而放松限制条件后,我们需要重新调整目标函数:

目标函数后面加上 的后,就可以使得离群点越多,目标函数值越大,而我们要求的是尽可能小的目标函数值。

  • SVM 和 LR 有什么异同?
    不同:
    LR 是一个统计的方法,SVM 是一个几何的方法;
    SVM 的处理方法是只考虑 Support Vectors,也就是和分类最相关的少数点去学习分类器。而逻辑回归通过非线性映射减小了离分类平面较远的点的权重,相对提升了与分类最相关的数据点的权重;
    损失函数不同:LR 的损失函数是交叉熵,SVM 的损失函数是 HingeLoss,这两个损失函数的目的都是增加对分类影响较大的数据点的权重,减少与分类关系较小的数据点的权重。对 HingeLoss 来说,其零区域对应的正是非支持向量的普通样本,从而所有的普通样本都不参与最终超平面的决定,这是支持向量机最大的优势所在,对训练样本数目的依赖大减少,而且提高了训练效率;
    LR 是参数模型,SVM 是非参数模型,参数模型的前提是假设数据服从某一分布,该分布由一些参数确定(比如正太分布由均值和方差确定),在此基础上构建的模型称为参数模型;非参数模型对于总体的分布不做任何假设,只是知道总体是一个随机变量,其分布是存在的(分布中也可能存在参数),但是无法知道其分布的形式,更不知道分布的相关参数,只有在给定一些样本的条件下,能够依据非参数统计的方法进行推断。所以 LR 受数据分布影响,尤其是样本不均衡时影响很大,需要先做平衡,而 SVM 不直接依赖于分布;
    LR 可以产生概率,SVM 不能;
    LR 不依赖样本之间的距离,SVM 是基于距离的;
    LR 相对来说模型更简单好理解,特别是大规模线性分类时并行计算比较方便。而 SVM 的理解和优化相对来说复杂一些,SVM 转化为对偶问题后,分类只需要计算与少数几个支持向量的距离,这个在进行复杂核函数计算时优势很明显,能够大大简化模型和计算;SVM 的损失函数自带正则(损失函数中的 1/2||w||^2),而 LR 需要另外添加正则项

相同:
Linear SVM和LR都是线性分类器
都是分类模型,本质都是在找最佳分类超平面;
都是判别式模型,判别式模型不关系数据是怎么生成的,只关心数据之间的差别,然后用差别来简单对给定的一个数据进行分类;
都是监督学习算法;
都可以增加不同的正则项。

  • Linear SVM 和 LR 分别在什么情况下使用
    两种方法都是常见的分类算法,从目标函数来看,区别在于逻辑回归采用的是logistical loss,svm采用的是hinge loss。这两个损失函数的目的都是增加对分类影响较大的数据点的权重,减少与分类关系较小的数据点的权重。SVM的处理方法是只考虑support vectors,也就是和分类最相关的少数点,去学习分类器。而逻辑回归通过非线性映射,大大减小了离分类平面较远的点的权重,相对提升了与分类最相关的数据点的权重。两者的根本目的都是一样的。此外,根据需要,两个方法都可以增加不同的正则化项,如l1,l2等等。所以在很多实验中,两种算法的结果是很接近的。但是逻辑回归相对来说模型更简单,好理解,实现起来,特别是大规模线性分类时比较方便。而SVM的理解和优化相对来说复杂一些。但是SVM的理论基础更加牢固,有一套结构化风险最小化的理论基础,虽然一般使用的人不太会去关注。还有很重要的一点,SVM转化为对偶问题后,分类只需要计算与少数几个支持向量的距离,这个在进行复杂核函数计算时优势很明显,能够大大简化模型和计算量。

  • 为什么LR不适合用MSE?

  • 为什么逻辑回归需要先对特征离散化?

  • 并行LR的实现

  • 逻辑回归(Logistic regression)在金融领域有什么应用呢?

朴素贝叶斯
先验概率(prior probability):指根据以往经验和分析。在实验或采样前就可以得到的概率。
后验概率(posterior probability):指某件事已经发生,想要计算这件事发生的原因是由某个因素引起的概率。后验概率可以被看做是对先验概率的一种“更加细致的刻画和更新“,因为此时我们观测到了X,有了额外的信息。后验概率无法直接获得,因此我们需要找到方法来计算它,而解决方法就是引入贝叶斯公式。
条件概率:一般写作p(A|B),即仅当B事件发生时A发生的的概率:

变形后得到
同理: ,故

就得到了贝叶斯公式:
我们把P(A)称为"先验概率"(Prior probability),也就是在不知道B事件的前提下,我们对A事件概率的一个主观判断。
P(B|A)/P(B)称为"可能性函数"(Likelyhood),这是一个调整因子,也就是新信息B带来的调整,作用是将先验概率(之前的主观判断)调整到更接近真实概率。
如何计算调整因子: 可以通过全概率求得
如果"可能性函数"P(B|A)/P(B)>1,意味着"先验概率"被增强,事件A的发生的可能性变大;
如果"可能性函数"=1,意味着B事件无助于判断事件A的可能性;
如果"可能性函数"<1,意味着"先验概率"被削弱,事件A的可能性变小。

贝叶斯的前提是特征独立,

  • 你知道什么叫做朴素贝叶斯吗?

NB其分类
NB的伯努利模型,特征是布尔变量,符合0/1分布,在文本分类中,特征就是词是否出现;
NB的多项式模型,特征是离散值,符合多项式分布,在文本分类中,特征就是词出现的次数;
NB的高斯模型,特征是连续值,符合高斯分布(高斯分布又名正态分布),在文本分类中,特征就是词的TF-IDF值。
NB的优缺点
优点:
算法原理简单;
所估计的参数少;
假设条件概率计算是彼此独立的,因此可以用于分布式计算;
属于生成式模型,收敛速度比判别式模型要快;
对缺失数据不太敏感;
天然可以处理多分类问题。
缺点:
假设各个特征之间相互独立这一条件在实际应用中往往是不能成立的;
不能学习到特征之间的相互作用;
对输入数据的表达形式敏感。

  • 公司里面男性有60人,女性有40人,男性穿皮鞋的人数有25人,穿运动鞋的人数有35人,女性穿皮鞋的人数有10人,穿高跟鞋的人数有30人。现在你只知道有一个人穿了皮鞋,这时候你就需要推测他的性别是什么。如果推测出他是男性的概率大于女性,那么就认为他是男性,否则认为他是女性。
  • “朴素”是朴素贝叶斯在进行预测时候的缺点,那么有这么一个明显的假设缺点在,为什么朴素贝叶斯的预测仍然可以取得较好的效果?
  • 什么是拉普拉斯平滑法?
  • 朴素贝叶斯中有没有超参数可以调?
  • 你知道朴素贝叶斯有哪些应用吗?
  • 朴素贝叶斯是高方差还是低方差模型?
  • 朴素贝叶斯的假设条件是什么?优缺点分别是什么?
  • 朴素贝叶斯是如何进行参数估计的?
  • 贝叶斯学派与频率学派有何不同?
  • 逻辑回归与朴素贝叶斯有什么区别?

树模型

  • 谈谈你对熵、信息增益和信息增益比的理解?
    熵的本质是香农信息量 log(1/p) 的期望:
    一个事件结果的出现概率越低,对其编码的bit长度就越长(对这个事件的描述就要越详细)。

1)信息熵:编码方案完美时,最短平均编码长度的是多少。
2)交叉熵:编码方案不一定完美时(由于对概率分布的估计不一定正确),平均编码长度的是多少。 平均编码长度 = 最短平均编码长度 + 一个增量
3)相对熵:编码方案不一定完美时,平均编码长度相对于最小值的增加值。(即上面那个增量)KL散度是一种衡量两个分布差异的方法

  • ID3算法的划分标准是什么?
  • ID3算法有什么缺陷?C4.5算法是如何解决ID3的缺陷的?ID3和C4.5存在什么缺陷?
  • C4.5是如何处理缺失值的?
  • C4.5的划分标准是什么?
  • C4.5算法的缺陷是什么?
  • 基尼系数的的定义及其优势是什么?
  • CART是如何在特征值缺失的情况下进行划分特征的选择?
  • 选定该划分特征,CART模型对于缺失该特征值的样本该进行怎样处理?
  • 决策树出现过拟合的原因及其解决办法?
  • 决策树剪枝有哪些策略?其优缺点分别是什么?
  • C4.5采用的剪枝方法是什么?
  • CART是如何处理类别不平衡问题的?
  • CART是如何对连续值处理的?
  • 请你说一下ID3、C4.5和CART三者之间的差异。
  • CART算法为什么选用gini指数?
  • C4.5算法是如何处理连续值的?
  • 决策树是如何处理缺失值的?
  • 如何计算决策树的各特征重要程度?
  • 如果特征很多,决策树中最后没有用到的特征一定是无用吗?
  • 决策树需要进行归一化处理吗?
  • 既然使用神经网络也可以解决分类问题,那SVM、决策树这些算法还有什么意义呢?
  • 决策树和条件概率分布的关系?
  • CART的剪枝策略是什么?
  • 如果由异常值或者数据分布不均匀,会对决策树有什么影响?
  • 决策树和其他模型相比有什么优点?
  • 决策树与逻辑回归的区别?
  • 分类树和回归树的区别是什么?
  • 如何理解决策树的损失函数?
  • sklearn中的决策树是否应该用one-hot编码?
  • 简述随机森林的步骤
  • 随机森林是否会出现过拟合?
  • 随机森林为什么不用分训练集和测试集?
  • 随机森林是如何处理缺失值的?
  • 随机森林与GBDT之间的区别
  • 随机森林与SVM的比较
  • 说一说随机森林的优缺点
  1. 决策树和随机森林的区别
    决策树 + Bagging + 随机选择特征 = 随机森林,随机森林可以有效防止过拟合。

  2. 随机森林里面用的哪种决策树
    CART 决策树或其他

  3. 随机森林的原理?如何进行调参?树的深度一般如何确定,一般为多少?
    原理:RF是一种集成算法,属于bagging类,它通过集成多个决策树模型,通过对基模型的结果采用投票法或者取平均来获得最终结果,使得最终模型有较高的准确度和泛化性能。
    调参:
    还是看刘建平老师的这篇:https://www.cnblogs.com/pinard/p/6160412.html

RF和GBDT调参过程类似,可以对比记忆:
无参数拟合–>n_estimators调参–>max_depth, min_sample_split–>min_sample_split, min_samples_leaf–>max_features

如何确定树的深度:当训练样本多,数据特征维度多的时候需要限制这个参数,具体取决于数据分布,一般在10-100之间。
3. Bagging 和 Boosting的区别
样本选择:Bagging有放回的选取训练集,并且从原始数据集中选取的各轮训练集之间相互独立;Boosting每次都使用全部数据,只是每个样例的权重不同。
样例权重:Bagging采用均匀采样,每个样例的权重相同;Boosting每轮训练都依据上一轮训练结果更新样例权重,错误率越大的样例,权重越大。
预测函数:Bagging每个基函数的预测结果权重相同;Boosting中预测误差越小的基模型有更大的权重。
偏差和方差:Bagging得出的结果低方差,Boosting低偏差。
并行计算:Bagging可以并行生成基模型,Boosting各个预测函数只能顺序生成,后一轮模型的参数需要前一轮的预测结果。
4. GBDT调参
我觉得啊,一般面试官如果问我们这种题目,一定是要求我们使用过这个算法,如果使用过就要理解记住,没使用过就坦诚的说没用过,大家可以跟着下面这个链接的刘建平老师学习一遍。

具体实例:https://www.cnblogs.com/pinard/p/6143927.html

参数分类:
Boosting框架参数:n_estimators, learning_rate, subsample
CART回归树参数(与决策树类似):max_features, max_depth, min_sample_split, min_samples_leaf
大致步骤:
无参数拟合–>固定learning_rate,estimators调参–>max_depth, min_sample_split–>min_sample_split, min_samples_leaf–>拟合查看–>max_features–>subsample–>不断减小learning_rate,加倍estimators来拟合
5. RF、GBDT之间的区别(重要)
此问题充分理解,你需要这些:
https://blog.csdn.net/data_scientist/article/details/79022025
https://blog.csdn.net/xwd18280820053/article/details/68927422
https://blog.csdn.net/m510756230/article/details/82051807

相同点:都是由多棵树组成,结果由多棵树共同决定。
不同点:
GBDT是回归树,RF可以是回归树也可以是分类树;
GBDT对异常值特别敏感,RF则没有;
GBDT只能串行生成多个模型,RF可以并行;
GBDT的结果有多个结果求和或者加权求和,RF是由投票选出结果;
GBDT是通过减少偏差来提高模型性能,RF是通过减少方差;
RF对所有训练集一视同仁,GBDT是基于权值的弱分类器。
6. 随机森林的优缺点
优点:
相比于其他算法,在训练速度和预测准确度上有很大的优势;
能够处理很高维的数据,不用选择特征,在模型训练完成后,能够给出特征的重要性;
可以写成并行化方法;
缺点:在噪声较大的分类回归问题上,容易过拟合。
降维

  • pca
    1.用于:特征降维,去除冗余和可分性不强的特征;
    2.目标:降维后的各个特征不相关,即特征之间的协方差为0;
    3.原理:基于训练数据X的协方差矩阵的特征向量组成的k阶矩阵U,通过XU得到降维后的k阶矩阵Z;因为矩阵的乘积可以看作成线性变化,所以我们找到u就可以用它来降维
    4.物理意义:方差越大,熵越大,特征所含的信息越多
    5.算法步骤
    计算训练样本的协方差矩阵C;
    计算C的特征值和特征向量;
    将C的特征值降序排列,特征值对应特征向量也依次排列;
    假如要得到X的k阶降维矩阵,选取C的前k个特征{u1,u2…uk},组成降维转换矩阵U;
    Z = XU,Z即为降维后的矩阵;

实例

以这个为例,我们用PCA的方法将这组二维数据降到一维
因为这个矩阵的每行已经是零均值,所以我们可以直接求协方差矩阵:

然后求其特征值和特征向量,求解后的特征值为:
λ1=2,λ2=2/5
其对应的特征向量分别是:

由于对应的特征向量分别是一个通解,c1和c2可取任意实数。那么标准化后的特征向量为:

因此我们的矩阵P是:

可以验证协方差矩阵C的对角化:

最好我们用P的第一行乘数据矩阵,就得到了降维后的数据表示:

降维后的投影结果如下图:

LDA
原理:投影后类内方差最小,类间方差最大
工作流程:

LDA vs PCA:
相同点:1)两者均可以对数据进行降维。
    2)两者在降维时均使用了矩阵特征分解的思想。
    3)两者都假设数据符合高斯分布(正态分布)。
不同点:1)LDA是有监督的降维方法,而PCA是无监督的降维方法
    2)LDA降维最多降到类别数k-1的维数,而PCA没有这个限制。
    3)LDA除了可以用于降维,还可以用于分类。
    4)LDA选择分类性能最好的投影方向,而PCA选择样本点投影具有最大方差的方向。

  • 简述一下 Adaboost 的权值更新方法
  • 推导一下Adaboost的样本权重更新公式
  • 训练过程中,为何每轮训练一直存在分类错误的问题,整个Adaboost却能快速收敛?
  • Adaboost 的优缺点?
  • AdaBoost 与 GBDT 对比有什么异同?
  • 请简述一下GBDT的原理
  • 为什么回归树可以作为GBDT的迭代学习器?
  • GBDT是如何用于分类问题的?
  • 为什么GBDT将CART回归树树分成m棵二叉树(每棵树只有两个叶子节点),而不是求一棵m+1层的二叉树(最多有2m个叶子节点)?
  • GBDT是如何进行正则化的?
  • gbdt的残差为什么用负梯度代替?
  • GBDT的优势有哪些?
  • GBDT中的缩减的作用是什么?
  • 为什么基于残差的GBDT不是一个好的选择?
  • 梯度提升树中为什么说目标函数关于当前模型的负梯度是残差的近似值?
  • 为什么xgboost/gbdt在调参时为什么树的深度很少就能达到很高的精度?
  • 为什么在实际的kaggle比赛中,GBDT和Random Forest效果非常好?
  • GBDT怎么用在点击率预测中?
  • GBDT中的梯度怎么计算的?是谁对谁的梯度?
  • m×n数据集,如果用GBDT,那么梯度是几维?或者是与树的深度有关?或者与树的叶子节点的个数有关?
  • 随机森林和GBDT的异同点
  • 机器学习算法中GBDT与Adaboost的区别与联系是什么?
  • 介绍一下XGBoost的原理
  • XGBoost与GBDT有什么不同
  • RF和GBDT的异同点
  • XGBoost为什么使用泰勒二阶展开
  • XGBoost的并行化部分是如何实现的?
  • XGBoost为什么快?
  • XGBoost中叶子结点的权重如何计算出来?为什么叶子节点得分可以用来衡量树的复杂度?
  • XGBoost中的一棵树的停止生长条件
  • 请推导一下Xgboost
  • XGBoost算法防止过拟合的方法有哪些?
  • XGBoost如何处理不平衡数据
  • 比较LR和GBDT,说说什么情景下GBDT不如LR
  • XGBoost中如何对树进行剪枝
  • 使用XGBoost训练模型时,如果过拟合了怎么调参?
  • XGBoost如何选择最佳分裂点?
  • XGBoost的Scalable性如何体现
  • XGBoost如何评价特征的重要性
  • XGBooost参数调优的一般步骤
  • XGBoost模型如果过拟合了怎么解决
  • XGBoost为什么对缺失值不敏感?相比普通的GBDT,XGBoost怎么处理缺失值?
  • XGBoost的正则化是如何实现的?
  • XGBoost和LightGBM的区别
  • XGBoost是如何求Hessian矩阵逆的?
  • xgboost算法中使用近似算法求取分割点如何理解?
  • LightGBM相较于XGBoost有什么优缺点?
  • 请介绍下常见的几种集成学习框架:boosting/bagging/stacking
  • 为什么集成学习会好于单个学习器?
  • 请简述下模型的方差与偏差的含义?
  • 集成学习中的基模型一定是弱模型吗?
  • 请计算一下模型的总体期望和总体方差
  • 为什么Bagging中的基模型一定要为强模型?
  • 为什么Boosting框架中的基模型必须为弱模型?

回归问题
EM算法

  1. 定义:
    EM(Expectation-Maximum)算法也称期望最大化算法,EM算法是一种迭代优化策略
  2. 采用EM算法求解的模型有哪些?为什么不用牛顿法或者梯度下降法?(感觉第二个问题有点错误,mark)
    高斯混合模型、协同过滤、KMeans
    求和的项随着隐变量的数量随指数上升,梯度计算带来麻烦,而EM是非梯度优化算法。
  3. 用EM算法推导解释KMeans
    KMeans中,每个聚类簇的中心就是隐含变量。
    E步:随机初始化k个聚类中心
    M步:计算每个样本点最近的质心,并将他聚类到这个质心

重复以上两步,直到聚类中心不发生变化为止。
KMeans
K-means 的原理,时间复杂度,优缺点以及改进
原理:对于给定样本集,按照样本之间的距离大小,将样本划分为若干个簇,使簇内距离尽可能小,簇间距离尽可能大;
步骤:
随机选择k个样本作为初始聚类中心;
计算样本到各聚类中心的距离,把它划到距离最小的簇;
计算新的聚类中心;
迭代,直至聚类中心未更新或到达最大次数。
时间复杂度:O(knd*t) | k:类别,n:样本数,d:计算样本之间距离的时间复杂度,t:迭代次数;
优缺点:
优点:1. 原理易懂、实现简单、收敛速度快、效果好 2. 可解释性强 3. 可调参数只有少,只有k;
缺点:1. 聚类效果受k值影响大 2. 非凸数据集难以收敛=离散的数据比较难受连 3. 隐含类别不均衡时,效果差 4. 迭代算法,得到的只是局部最优 5. 对噪音和异常数据敏感。
改进:随机初始化K值影响效果 + 计算样本点到质心的距离耗时这两方面优化

KMeans++算法
KMeans随机选取k个点作为聚类中心,而KMeans++采用如下方法:
假设已经选取好n个聚类中心后,再选取第n+1个聚类中心时,距离这n个聚类中心越远的点有越大的概率被选中;选取第一个聚类中心(n=1)时也是需要像KMeans一样随机选取的。

高斯混合模型
联合概率分布简称联合分布,是两个及以上随机变量组成的随机向量的概率分布。打靶时命中的坐标(x,y)的概率分布就是联合概率分布(涉及两个随机变量)。

变量X和Y的联合分布完全决定X的概率分布和Y的概率分布(称作联合分布的边缘分布):

高斯分布(正态分布)遵从下方概率密度函数(Probability Density Function):

高斯混合模型可以看作是由 K 个单高斯模型组合而成的模型,这 K 个子模型是混合模型的隐变量(Hidden variable)。一般来说,一个混合模型可以使用任何概率分布,这里使用高斯混合模型是因为高斯分布具备很好的数学性质以及良好的计算性能。
步骤:首先随机的给参数赋值
E:根据当前的参数计算每个点属于各个子模型的概率
M:根据上一步获得的概率改进方差、均值和模型的权重

Kmeans和Gmm的异同:
相同:GMM和K-means很相似,相似点在于两者的分类受初始值影响;两者可能限于局部最优解;两者类别的个数都要靠猜测。

不同:K-means属于硬聚类,要么属于这类,要么属于那类,而GMM属于混合式软聚类,一个样本70%属于A,30%属于B;同时多维的GMM在计算均值和方差时使用了协方差,应用了不同维度之间的相互约束关系。

Kmeans考虑的是最小化k点和xi点之间的距离。
Gmm考虑的是xi属于某个类的概率,当概率都为100%的时候,gmm就退化成kmeans。
可以计算概率,可以生成新样本。
从欧式距离和马氏距离来说,K-means是欧式距离,而GMM是马氏距离,当协方差非对角线元素为0时,马氏距离也就变成了欧式距离。见下图K-means和GMM的优化函数:

优化算法

  • 什么是梯度下降法?
    梯度的本意是一个向量(矢量),表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向变化最快,变化率最大即为该梯度的模最大。梯度就是导数,对于多维就是偏导数

梯度下降: 1.根据梯度(导数)的符号来判断最小值点x在哪;
2. 让函数值下降(变小)。
梯度下降作用是找到函数的最小值所对应的自变量的值(曲线最低点对应x的值)。记住我们目的是为了找x.

  • 用梯度下降训练 SVM 会有什么问题?
    许多机器学习方法如最小二乘法、logistic回归、支持向量机都可以归纳到凸优化
    SVM的目标函数是一个凸优化问题,凸优化问题研究得很透了,利用凸优化的理论求解训练速度会更快。
    凸优化研究定义于凸集中的凸函数最小化的问题。凸优化在某种意义上说较一般情形的数学最优化问题要简单,譬如在凸优化中局部最优值必定是全局最优值。
    凸集是包含两个不同点之间的直线的所有点。

凸函数就是一个定义在某个向量空间的凸子集C(区间)上的实值函数。

从几何意义上看,凸函数就是任意两点之间的弦(即这两点构成的线段)都在该函数图像(此处是指这两点之间的函数图像,而非全部的函数图像)的上方。

  • 最小二乘、极大似然、梯度下降有何区别?
  • 最优化问题中,牛顿法为什么比梯度下降法求解需要的迭代次数更少?
  • 为什么nn的较大问题是会陷入局部最优时,不选用凸函数作为激活函数?

损失函数

  • 请解释一下损失函数的定义
    损失函数(Loss function)是用来估量你模型的预测值 f(x)与真实值 Y 的不一致程度,它是一个非负实值函数,通常用 L(Y,f(x))来表示。损失函数越小,模型的鲁棒性就越好。

  • 请说说你对逻辑回归损失函数的理解

  • 请说说你对平方损失函数的理解。

  • 请谈谈你对指数损失函数的了解。

  • 请谈谈你对Hinge合页损失函数的了解。

  • 请你对逻辑斯谛回归和SVM的损失函数进行一下对比。

  • 对于逻辑回归,为什么说平方损失函数是非凸的?

  • 如何把SVM的推导和损失函数联系起来?

  • 神经网络如何设计自己的loss function,如果需要修改或设计自己的loss,需要遵循什么规则?

  • softmax和cross-entropy是什么关系?

  • 神经网络的损失函数为什么是非凸的?

  • 深度学习中有哪些常用损失函数(优化目标函数)?

  • 神经网络中,设计loss function有哪些技巧?

  • 神经网络中,为何不直接对损失函数求偏导后令其等于零,求出最优权重,而要使用梯度下降法(迭代)计算权重?

  • 在用交叉熵损失函数时,只希望惩罚 0.4~0.6 这样模糊的值,应该怎么改?
    神经网络
    1.卷积层
    正则化

  • 请解释正则化的含义。
    正则化也叫惩罚、规则化,加入正则项是为了避免过拟合.加入正则化项相当于加了先验知识。在数据少的时候,先验知识可以防止过拟合。

对于alpha =0,也就是不添加正则化约束,则相当于参数的高斯先验分布有着无穷大的协方差,那么这个先验约束则会非常弱,模型为了拟合所有的训练数据,w可以变得任意大不稳定。alpha越大,表明先验的高斯协方差越小,模型约稳定, 相对的方差也越小

  • 正则化与数据的先验分布有什么关系?
  • L1 相比于 L2 为什么容易获得稀疏解?
    L1范数 L2范数
    各个参数的绝对值之和 各个参数的平方和的开方
    先验分布是拉普拉斯分布 高斯(正态)分布
    使参数稀疏化,有特征选择的功能 使参数接近于0,防止过拟合 (模型越简单,越不容易过拟合)
    Lasso回归 Ridge回归

拉普拉斯:

  • L1正则为什么能让系数变为0?L1正则怎么处理0点不可导的情形?
  • 深度学习怎么防止过拟合?
    原因:1. 数据有噪声; 2. 训练数据不足,有限的训练数据; 3. 过度训练导致模型复杂。
    防止过拟合的方法:1.早停止:在模型对训练数据迭代收敛之前停止迭代。
    具体做法:在每一个Epoch结束时,计算validation_data的accuracy,当accuracy不再提高时,就停止训练。(注意多次观察,多次精度未提升时则停止迭代)
  1. dropout:在训练时,以一定的概率忽略隐层中的某些节点。
  2. 正则化
  3. 数据集扩充:1. 从源头上获取更多数据;2. 数据增强(通过一定规则扩充数据);3. 根据当前数据估计分布参数,利用该分布获得更多数据。
  • 目标函数中同时使用多个L1和L2正则化项的情况,应该怎么求解?

AUC

  • 请解释一下AUC。
    、预测为正例的概率值大于预测为负的概率值的可能性,ROC曲线下的面积AUC=∫y(t)dx(t)

  • AUC和准确率一定是正相关的吗?有什么内在关系吗?
    精确率是基于某个阈值进行计算的,AUC是基于所有可能的阈值进行计算的,具有更高的健壮性。AUC不关注某个阈值下的表现如何,综合所有阈值的预测性能,所以精确率高,AUC不一定大,反之亦然。

  • 二分类时,为什么AUC比accuracy更常用?为什么AUC对样本类别比例不敏感?
    计算accuracy,需要把概率转换为类别,这就需要手动设置一个阈值。高于该阈值放入A类,低于该阈值放入B类。该阈值很大程度上影响accuracy的计算。AUC可以避免将概率转换成类别。
    Roc曲线:
    以真正例率为纵坐标,假正例率为横坐标绘制的曲线,auc越大越好,但是肯定小于等于1.
    TPR = TP /(TP + FN)真
    FPR = TN / ( TN + FP) 假

  • 精确率、召回率、F1 值、ROC、AUC 各自的优缺点是什么?
    准确率(Accuracy)。顾名思义,就是所有的预测正确(正类负类)的占总的比重。

精确率(Precision),查准率。即正确预测为正的占全部预测为正的比例。个人理解:真正正确的占所有预测为正的比例。

召回率(Recall),查全率。即正确预测为正的占全部实际为正的比例。个人理解:真正正确的占所有实际为正的比例。

F1值(H-mean值)。F1值为算数平均数除以几何平均数,且越大越好,将Precision和Recall的上述公式带入会发现,当F1值小时,True Positive相对增加,而false相对减少,即Precision和Recall都相对增加,即F1对Precision和Recall都进行了加权。

  • 机器学习中,F1和ROC/AUC,关于多分类如何做指标评估?
  • 如何解决离线和线上auc和线上点击率不一致的问题?
  • 为什么AUC对正负样本比例不敏感

Else
判别式和生成式的算法各有哪些,区别是什么
区别:二者最本质的区别是建模对象的不同。
判别式模型的评估对象是最大化条件概率P(Y|X)并对此进行建模,特点是准确率高;
生成式模型的评估对象是最大化联合概率P(X,Y)并对此进行建模,特点是收敛速度快。
判别式模型:线性回归、决策树、支持向量机SVM、k近邻、神经网络等;
生成式模型:隐马尔可夫模型HMM、朴素贝叶斯模型、高斯混合模型GMM、LDA。

非均衡数据

  • 机器学习中有哪些非均衡数据集的处理方法?
  • 请简述一下SMOTE采样方法是如何来处理非平衡数据的?
  • 原始的SMOTE算法存在什么问题?如何改进?
  • 请简述一下Tomek Links欠采样方法。
  • 请简述一下NearMiss方法
  • EasyEnsemble算法是如何解决非平衡数据的问题的?
  • BalanceCascade算法是如何解决非平衡数据的问题的?
  • SMOTE过采样和Tomek Links欠采样算法是否可以结合起来?

三、深度学习

  • 请写出常用的损失函数,平方损失、交叉熵损失、softmax损失函数和hinge损失函数。
  • 为什么深层神经网络的训练的难度很大?主要有哪几方面的原因。
  • 请你用实例说明一下前向传播和反向传播
  • 在深度学习中引入非线性激活函数的作用是什么?
  • 请说出常用的激活函数,并画出他们相应的图像。
  • 如何选择激活函数?请说明各种激活函数的特点。
  • Relu激活函数的优点是什么?
  • 请说明Softmax激活函数的定义及其作用?Softmax激活函数如何应用于多分类?
  • 在深度模型训练时,为什么需要batch size?如何选择合适的batch size,对结果有和影响?
  • 请说明BN的原理,为什么要进行批归一化?
  • 什么是模型微调fine tuning?请说明fine-tuning 模型的三种状态,各自的特点是什么?
  • 为什么无监督预训练可以帮助深度学习?
  • 权重偏差初始化有哪些方法?分别说明他们的特点。
  • 设置学习率的作用是什么?常用的学习率衰减方法有哪些?说明他们各自的特点
  • 深度学习中有哪些防止过拟合的方法?
  • 请说出几种常用的优化算法,以及他们各自的特点。
  • 深度学习中如何平衡方差与偏差?如果偏差过大我们应该怎么做?方差过大呢?
  • 请说明Dropout的原理,在训练与测试的时候dropout会有什么区别?
  • 深度学习中常用的数据增强方法?
  • 如何理解 Internal Covariate Shift?

四、C++百问百答
基础

  • 变量的作用是什么?创建变量的语法是什么?
  • C++中常量的作用是什么?请写出定义常量的两种方式。
  • 请举几个C++中预先保留的关键字的例子
  • short类型、int类型、long类型和long long类型所占用的内存空间分别是多少?
  • sizeof关键字的作用是什么?
  • 字符型变量所占的内存空间为多少?它在存储的时候有什么特点?
  • 请举几个你常用的C++中的转义字符?
  • C++中前置递增和后置递增的区别是?
  • 写一个三目运算符的例子?并解释一下。
  • switch case语句中break的作用是什么?
  • 一个for循环语句中的起始表达式、条件表达式、末尾循环体和循环语句的执行顺序是什么?
  • break语句和continue语句的作用是什么?

数组

  • 数组的特点是什么?如何定义数组?
  • 一维数组的名称和其内存地址的关系是什么?
  • 如何定义二维数组?二维数组的名称和其内存地址的关系是什么?

函数

  • 说明形参与实参的含义。
  • 值传递的含义是什么?对形参和实参的影响是什么?
  • 函数声明的作用是什么?

指针

  • 指针的作用是什么?指针变量和普通变量的区别是什么?
  • 指针所占内存空间有多大?
  • 常量指针、指针常量有什么区别?
  • 值传递和地址传递有什么区别?

结构体

  • 如何创建一个结构体?请写出两种方法。
  • 如何创建结构体数组?
  • 结构体指针如何访问结构体的成员?
  • 结构体如何嵌套结构体?举个实例
  • 结构体可以作为参数向函数传参吗?

内存

  • 请简述C++程序在执行时各个内存区块(代码区、全局区、栈区、堆区)的功能特点。
  • new操作符的作用是什么?怎么使用?

引用

  • 引用的作用是什么?其本质是什么?
  • 引用在作为函数参数时,和值传递、地址传递有什么区别?
  • 常量引用的作用和写法分别是什么?
  • 在写函数默认参数时,有什么需要注意的?

重载

  • 函数重载需要满足什么条件?

封装

  • 封装的意义是什么?
  • 类的成员和行为的访问权限有哪些?分别是什么样的?
  • 类和结构体的区别是什么?
  • 将成员属性设置为私有的优点是什么?

初始化

  • 构造函数和析构函数的作用是什么?
  • 构造函数语法是什么?构造函数有什么特点?
  • 析构函数语法是什么?析构函数有什么特点?
  • 构造函数调用规则是什么?
  • 请解释C++中的深拷贝与浅拷贝?
  • C++中初始化列表语法是什么?
  • B类中有对象A作为成员,A为对象成员,当创建B对象时,A与B的构造和析构的顺序是谁先谁后?
  • 静态成员的特点是什么?
  • 类内的成员变量和成员函数是分开存储的吗?非静态成员变量占用对象空间吗?
  • this指针的作用是什么?
  • const修饰成员函数会起到什么效果?关键字mutable的作用是什么?
  • C++中友元的作用是什么?全局函数、类、成员函数作为友元分别是怎么实现的?
  • 继承的方式有哪几种?其权限是什么样的?
  • 子类可以继承父类的私有成员吗?
  • 父类和子类的构造函数和析构顺序是什么样的?
  • 当子类与父类出现同名的成员,如何通过子类对象,访问到子类或父类中同名的数据?
  • 菱形继承会带来什么问题?C++中是怎么解决的?
  • 静态多态和动态多态有什么区别?
  • 多态的满足条件和使用条件是什么?
  • 多态有什么优点?
  • 纯虚函数的意义是什么?语法是什么样的?他和抽象类有什么关系?
  • 解释虚析构和纯虚析构的含义、语法及其区别?
  • 如何建立函数模板?其作用是什么?需要注意什么?
  • 普通函数与函数模板有什么区别?其调用规则是什么?
  • 具体化函数模板是为了解决什么问题?
  • 类模板的作用是什么?语法是什么样的?与函数模板区别有什么区别?
  • 类模板中成员函数创建时机是什么
  • 请解释STL中的容器、算法和迭代器。

五、python百问百答

  • python中list、tuple、dict、set等类型有什么区别?
  • 函数传参有哪些形式?分别有什么特点?
  • 请解释python的默认参数陷阱问题。
  • 请举例说明浅拷贝和深拷贝的区别
  • 生成器与迭代器的概念分别是什么?
  • 请简述内置函数zip的用法。迭代器的长度不一致时,是如何处理的,有什么替代方案吗?
  • 高阶函数map/reduce/filter/sorted的用法分别是怎样的?举例说明。
  • 闭包的概念是什么?举例说明。
  • 匿名函数有什么好处?请举一个例子说明其用法。
  • 装饰器的概念是什么?如何使用?
  • 偏函数的概念是什么?如何使用?
  • enumerate相比range有什么优势?
  • 什么是工厂函数?举例说明。
  • 举例说明类属性和实例属性的区别。
  • 请实例解释继承和多态的概念。
  • 如何设置类内属性的访问限制?
  • 如何使用__slots__?
  • 定制类__str__,itergetitemgetattr,__call__分别有什么作用?
  • 静态方法、类方法和成员方法有什么区别
  • @classmethod, @staticmethod, @property这些都是什么?
  • __init__和__new__的区别是什么?
  • 什么是Python自省?
  • python是如何进行内存管理的?
  • 什么是GIL?
  • 请简述python的异常处理机制。
  • 你是如何如何定位python程序的bug的?在python中如何实现单步执行?
  • assert断言有什么用处?
  • 类有哪些内置的属性?
  • 元素为字符串的列表如何转变为空格分隔的字符串?
  • python中的is操作符是如何进行对比的?
  • 请写出匹配邮箱地址的正则表达式。
  • python如何传递命令行参数的?
  • 如何理解python中的线程?
  • 请简述python中的多进程。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/573570
推荐阅读
相关标签
  

闽ICP备14008679号