当前位置:   article > 正文

算法、机器学习校招面试题总结_不论顺序存储还是线性存储,删除值为x的非0元素的时间复杂度

不论顺序存储还是线性存储,删除值为x的非0元素的时间复杂度

1.判别式、生成式模型
生成式:朴素贝叶斯、HMM、Gaussians、马尔科夫随机场
判别式:LR,SVM,神经网络,CRF,Boosting

生成模型:先从数据中学习联合概率分布,然后利用贝叶斯公式求得特征和标签对应的条件概率分布。
判别模型:直接学习条件概率分布,直观的输入什么特征就预测可能的类别。

【朴素贝叶斯】
在这里插入图片描述
优点
朴素贝叶斯算法假设了数据集属性之间是相互独立的,因此算法的逻辑性十分简单,并且算法较为稳定,当数据呈现不同的特点时,朴素贝叶斯的分类性能不会有太大的差异。换句话说就是朴素贝叶斯算法的健壮性比较好,对于不同类型的数据集不会呈现出太大的差异性。当数据集属性之间的关系相对比较独立时,朴素贝叶斯分类算法会有较好的效果。
缺点
属性独立性的条件同时也是朴素贝叶斯分类器的不足之处。数据集属性的独立性在很多情况下是很难满足的,因为数据集的属性之间往往都存在着相互关联,如果在分类过程中出现这种问题,会导致分类的效果大大降低。

HMM
在这里插入图片描述

【马尔可夫随机场】
马尔可夫随机场
马尔可夫随机场(Markov Random Field)包含两层意思。

马尔可夫性质:它指的是一个随机变量序列按时间先后关系依次排开的时候,第N+1时刻的分布特性,与N时刻以前的随机变量的取值无关。拿天气来打个比方。如果我们假定天气是马尔可夫的,其意思就是我们假设今天的天气仅仅与昨天的天气存在概率上的关联,而与前天及前天以前的天气没有关系。其它如传染病和谣言的传播规律,就是马尔可夫的。

随机场:当给每一个位置中按照某种分布随机赋予相空间的一个值之后,其全体就叫做随机场。我们不妨拿种地来打个比方。其中有两个概念:位置(site),相空间(phase space)。“位置”好比是一亩亩农田;“相空间”好比是种的各种庄稼。我们可以给不同的地种上不同的庄稼,这就好比给随机场的每个“位置”,赋予相空间里不同的值。所以,俗气点说,随机场就是在哪块地里种什么庄稼的事情。

马尔可夫随机场:马尔科夫随机场是具有马尔科夫特性的随机拿种地打比方,如果任何一块地里种的庄稼的种类仅仅与它邻近的地里种的庄稼的种类有关,与其它地方的庄稼的种类无关,那么这些地里种的庄稼的集合,就是一个马尔可夫随机场。

【逻辑回归】
Logistic regression:
优点:实现简单,广泛的应用于工业问题上;分类时计算量非常小,速度很快,存储资源低;便利的观测样本概率分数;对逻辑回归而言,多重共线性并不是问题,它可以结合L2正则化来解决该问题。

缺点:当特征空间很大时,逻辑回归的性能不是很好;容易欠拟合,一般准确度不太高

不能很好地处理大量多类特征或变量;只能处理两分类问题(在此基础上衍生出来的softmax可以用于多分类),且必须线性可分;对于非线性特征,需要进行转换。

适用场景:LR同样是很多分类算法的基础组件,它的好处是输出值自然地落在0到1之间,并且有概率意义。因为它本质上是一个线性的分类器,所以处理不好特征之间相关的情况。虽然效果一般,却胜在模型清晰,背后的概率学经得住推敲。它拟合出来的参数就代表了每一个特征(feature)对结果的影响。也是一个理解数据的好工具。
2.几大排序算法
在这里插入图片描述

3.集成学习
【bagging和boasting的比较总结】
1.训练样本选择
bagging:有放回选取 各轮训练集之间独立
boosting:每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整。

2.训练过程权重
bagging:均匀取样 权重相等
boosting:根据错误率调整权重,错误率越大权重越大

3.预测函数
bagging:所有预测函数权重相等
boosting:每个弱分类器都有相应的权重,分类误差小的分类器会有更大的权重

4.并行计算
bagging:基学习器间不存在强依赖关系,所以可以并行。
boasting:基学习器间存在强依赖关系,各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果。所以只能串行。

5.作用
Bagging:Bagging 是 Bootstrap Aggregating的简称,意思就是再取样 (Bootstrap) 然后在每个样本上训练出来的模型取平均,所以是降低模型的 variance.
Boosting:Boosting 则是迭代算法,每一次迭代都根据上一次迭代的预测结果对样本进行加权,所以随着迭代不不断进行行,误差会越来越小,所以模型的 bias 会不不断降低。这种算法无法并行。

【XGBOOST和GBDT的区别】

Extreme Gradient Boosting
Gradient Boosting Decision Tree

GBDT在函数空间中利用梯度下降法进行优化
XGB在函数空间中使用了牛顿法进行优化。

GDBT在优化中使用了一阶导数信息,而XGB对损失函数进行了二阶泰勒展开,用到了一阶和二阶倒数信息。

XGB在损失函数中加入了正则项(树叶子节点个数,每个叶子节点上输出score的L2模平方和。对于缺失的样本,XGB可以自动学习出它的分裂方向。GDBT的节点分裂方式使用的是gini系数,XGB通过优化推导出分裂前后的增益来选择分裂节点。XGB在处理每个特征列时可以做到并行。

【GBDT的原理,以及常用的调参参数】
先用一个初始值去学习一棵树,然后在叶子处得到预测值以及预测后的残差,之后的树则基于之前树的残差不断的拟合得到,从而训练出一系列的树作为模型。n_estimators基学习器的最大迭代次数,learning_rate学习率,max_lead_nodes最大叶子节点数,max_depth树的最大深度,min_samples_leaf叶子节点上最少样本数。

【AdaBoost和GBDT的区别,AdaBoost和GBDT的区别】

Adaptive Boosting

AdaBoost通过调整错分的数据点的权重来改进模型,而GBDT是从负梯度的方向去拟合改进模型。

AdaBoost改变了训练数据的权值,即样本的概率分布,减少上一轮被正确分类的样本权值,提高被错误分类的样本权值,而随机森林在训练每棵树的时候,随机挑选部分训练集进行训练。在对新数据进行预测时,AdaBoost中所有树加权投票进行预测,每棵树的权重和错误率有关,而随机森林对所有树的结果按照少数服从多数的原则进行预测。

【GBDT和随机森林的相同点】
1)都是由多棵树组成;
2)最终的结果都是由多棵树一起决定

【随机森林和 GBDT 的区别】
1)随机森林采用的bagging思想,而GBDT采用的boosting思想。这两种方法都是Bootstrap思想的应用,Bootstrap是一种有放回的抽样方法思想。虽然都是有放回的抽样,但二者的区别在于:Bagging采用有放回的均匀取样,而Boosting根据错误率来取样(Boosting初始化时对每一个训练样例赋相等的权重1/n,然后用该算法对训练集训练t轮,每次训练后,对训练失败的样例赋以较大的权重),因此Boosting的分类精度要优于Bagging。Bagging的训练集的选择是随机的,各训练集之间相互独立,弱分类器可并行,而Boosting的训练集的选择与前一轮的学习结果有关,是串行的。
2)组成随机森林的树可以是分类树,也可以是回归树;而GBDT只能由回归树组成。
3)组成随机森林的树可以并行生成;而GBDT只能是串行生成。
4)对于最终的输出结果而言,随机森林采用多数投票等;而GBDT则是将所有结果累加起来,或者加权累加起来。
5)随机森林对异常值不敏感;GBDT对异常值非常敏感。
6)随机森林对训练集一视同仁;GBDT是基于权值的弱分类器的集成。
7)随机森林是通过减少模型方差提高性能;GBDT是通过减少模型偏差提高性能。

【xgboost,rf,lr优缺点场景】
Xgboost:
优缺点:
1)在寻找最佳分割点时,考虑传统的枚举每个特征的所有可能分割点的贪心法效率太低,xgboost实现了一种近似的算法。大致的思想是根据百分位法列举几个可能成为分割点的候选者,然后从候选者中根据上面求分割点的公式计算找出最佳的分割点。
2)xgboost考虑了训练数据为稀疏值的情况,可以为缺失值或者指定的值指定分支的默认方向,这能大大提升算法的效率,paper提到50倍。
3)特征列排序后以块的形式存储在内存中,在迭代中可以重复使用;虽然boosting算法迭代必须串行,但是在处理每个特征列时可以做到并行。
4)按照特征列方式存储能优化寻找最佳的分割点,但是当以行计算梯度数据时会导致内存的不连续访问,严重时会导致cache miss,降低算法效率。paper中提到,可先将数据收集到线程内部的buffer,然后再计算,提高算法的效率。
5)xgboost 还考虑了当数据量比较大,内存不够时怎么有效的使用磁盘,主要是结合多线程、数据压缩、分片的方法,尽可能的提高算法的效率。

适用场景:分类回归问题都可以。

Rf:

优点:
1)表现性能好,与其他算法相比有着很大优势。
2)随机森林能处理很高维度的数据(也就是很多特征的数据),并且不用做特征选择。
3)在训练完之后,随机森林能给出哪些特征比较重要。
4)训练速度快,容易做成并行化方法(训练时,树与树之间是相互独立的)。
5)在训练过程中,能够检测到feature之间的影响。
6)对于不平衡数据集来说,随机森林可以平衡误差。当存在分类不平衡的情况时,随机森林能提供平衡数据集误差的有效方法。
7)如果有很大一部分的特征遗失,用RF算法仍然可以维持准确度。
8)随机森林算法有很强的抗干扰能力(具体体现在6,7点)。所以当数据存在大量的数据缺失,用RF也是不错的。
9)随机森林抗过拟合能力比较强(虽然理论上说随机森林不会产生过拟合现象,但是在现实中噪声是不能忽略的,增加树虽然能够减小过拟合,但没有办法完全消除过拟合,无论怎么增加树都不行,再说树的数目也不可能无限增加的)。
10)随机森林能够解决分类与回归两种类型的问题,并在这两方面都有相当好的估计表现。(虽然RF能做回归问题,但通常都用RF来解决分类问题)。
11)在创建随机森林时候,对generlization error(泛化误差)使用的是无偏估计模型,泛化能力强。

缺点:1)随机森林在解决回归问题时,并没有像它在分类中表现的那么好,这是因为它并不能给出一个连续的输出。当进行回归时,随机森林不能够做出超越训练集数据范围的预测,这可能导致在某些特定噪声的数据进行建模时出现过度拟合。(PS:随机森林已经被证明在某些噪音较大的分类或者回归问题上回过拟合)。2)对于许多统计建模者来说,随机森林给人的感觉就像一个黑盒子,你无法控制模型内部的运行。只能在不同的参数和随机种子之间进行尝试。3)可能有很多相似的决策树,掩盖了真实的结果。4)对于小数据或者低维数据(特征较少的数据),可能不能产生很好的分类。(处理高维数据,处理特征遗失数据,处理不平衡数据是随机森林的长处)。5)执行数据虽然比boosting等快(随机森林属于bagging),但比单只决策树慢多了。

适用场景:数据维度相对低(几十维),同时对准确性有较高要求时。因为不需要很多参数调整就可以达到不错的效果,基本上不知道用什么方法的时候都可以先试一下随机森林。

【关于GBDT算法,下列说法正确的有?】
GBDT不适合高维稀疏特征
GBDT模型具有较好的鲁棒性和解释性
GBDT对特征值缺失不敏感

【关于随机森林和GBDT,下列说法正确有?】
两者都可以通过随机样本子集和随机特征子集的方式来提升模型的泛化能力
对任务数据集,GBDT总是优于随机森林

4.决策树
ID3(选择信息增益高的)
C4.5(先找高于平均的,再找高的)信息增益率
CART算法-基尼指数(选择基尼指数最小的)

预剪枝:减少训练时间,有欠拟合风险。后剪枝:泛化性能更好,训练时间更长。

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

一般来说,一颗决策树包含一个根结点,若干内部结点和叶子结点,叶结点对应于决策结果,其它每个结点则对应于一个属性测试。

每个结点包含的样本集合根据属性测试的结果被划分到子结点中,根结点包含样本全集,从根结点到每个叶结点对应了一个判定测试序列。

三种情形会导致递归返回:
(1)当前结点包含的样本全属于同一类别,无需划分。
(2)当前属性集为空,或是所有样本在所有属性集上取值相同,无法划分。
(3)当前结点包含的样本集合为空,不能划分。

5.SGD,Momentum,Adagard,Adam原理

SGD:加快训练速度,容易陷入局部最优解
Momentum:动量 将

SGD为随机梯度下降,每一次迭代计算数据集的mini-batch的梯度,然后对参数进行更新,容易陷入局部最优解,也可能在鞍点中跳不出,影响模型性能。

Momentum参考了物理中动量的概念,前几次的梯度也会参与到当前的计算中,但是前几轮的梯度叠加在当前计算中会有一定的衰减。

Adagard在训练的过程中可以自动变更学习的速率,设置一个全局的学习率,而实际的学习率与以往的参数模和的开方成反比。

Adam是一个结合了Momentum与Adagrad的产物,它既考虑到了利用动量项来加速训练过程,又考虑到对于学习率的约束。Adam利用梯度的一阶矩估计二阶矩估计动态调整每个参数的学习率,在经过偏置的校正后,每一次迭代后的学习率都有个确定的范围,使得参数较为平稳。

Adam 算法和传统的随机梯度下降不同。随机梯度下降保持单一的学习率(即 alpha)更新所有的权重,学习率在训练过程中并不会改变。而 Adam 通过计算梯度的一阶矩估计和二阶矩估计而为不同的参数设计独立的自适应性学习率。

【以下关于优化算法特点描述正确的是】
随机梯度下降(SGD)是一种较为常见的优化算法,经常应用于大规模和稀疏机器学习问题当中。相对于非随机算法,SGD 能更有效的利用信息,在一定程度上加快了训练速度。

Momentum模拟物理里动量的概念,使参数更新的方向不仅由当前的梯度决定,也与此前累积的下降方向有关。可以加速sgd在正确方向的更新,并且抑制震荡。

Adagrad把所有梯度平方和开根号来除当前的梯度,在学习率方面进行了约束,每个分量有各自不同的学习率。

RMSProp中的衰减系数,让参数更新只关注最近一段时间窗口内的梯度,一定程度上可以避免因分母积累得太大而导致的学习率逐渐为0,进而提前结束训练的情况。

6.支持向量机
【核函数的作用】
核函数隐含着一个从低维空间到高维空间的映射,这个映射可以把低维空间中线性不可分的两类点变成线性可分的。

【什么是支持向量机,SVM与LR的区别?】
支持向量机为一个二分类模型,它的基本模型定义为特征空间上的间隔最大的线性分类器。而它的学习策略为最大化分类间隔,最终可转化为凸二次规划问题求解。

LR是参数模型,SVM为非参数模型。LR采用的损失函数为logistical loss,而SVM采用的是hingeloss。在学习分类器的时候,SVM只考虑与分类最相关的少数支持向量点。LR的模型相对简单,在进行大规模线性分类时比较方便。

1)LR是参数模型,SVM是非参数模型。
2)从目标函数来看,区别在于逻辑回归采用的是logistical loss,SVM采用的是hinge loss.这两个损失函数的目的都是增加对分类影响较大的数据点的权重,减少与分类关系较小的数据点的权重。
3)SVM的处理方法是只考虑support vectors,也就是和分类最相关的少数点,去学习分类器。而逻辑回归通过非线性映射,大大减小了离分类平面较远的点的权重,相对提升了与分类最相关的数据点的权重。
4)逻辑回归相对来说模型更简单,好理解,特别是大规模线性分类时比较方便。而SVM的理解和优化相对来说复杂一些,SVM转化为对偶问题后,分类只需要计算与少数几个支持向量的距离,这个在进行复杂核函数计算时优势很明显,能够大大简化模型和计算。
5)logic 能做的 svm能做,但可能在准确率上有问题,svm能做的logic有的做不了。

【SVM中什么时候用线性核什么时候用高斯核?】
当数据的特征提取的较好,所包含的信息量足够大,很多问题是线性可分的那么可以采用线性核。若特征数较少,样本数适中,对于时间不敏感,遇到的问题是线性不可分的时候可以使用高斯核来达到更好的效果。

【问题:SVM的作用,基本实现原理】
SVM可以用于解决二分类或者多分类问题,此处以二分类为例。SVM的目标是寻找一个最优化超平面在空间中分割两类数据,这个最优化超平面需要满足的条件是:离其最近的点到其的距离最大化,这些点被称为支持向量。
解析:建议练习推导SVM,从基本式的推导,到拉格朗日对偶问题。

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

特征维数相关→对偶函数→变量个数有关→变量个数即支持向量远远小于特征维数→好

对偶将原始问题中的约束转为了对偶问题中的等式约束,而且更加方便了核函数的引入,同时也改变了问题的复杂度,在原始问题下,求解问题的复杂度只与样本的维度有关,在对偶问题下,只与样本的数量有关。

【SVM的物理意义是什么】
构造一个最优化的超平面在空间中分割数据

【核函数的种类和应用场景】
线性核、多项式核、高斯核。
特征维数高选择线性核
样本数量可观、特征少选择高斯核(非线性核)
样本数量非常多选择线性核(避免造成庞大的计算量)

【SVM和全部数据有关还是和局部数据有关?】
SVM只和分类界限上的支持向量点有关,换而言之只和局部数据有关。

【下面关于SVM算法叙述正确的是】
SVM在解决小样本、非线性及高维模式识别问题中具有优势
SVM是一种基于结构风险最小化准则的算法
SVM求得的解为全局唯一最优解
SVM最终分类结果只与少数支持向量有关

7.LSTM解决了RNN的什么问题,如何解决
RNN是一类以序列数据为输入,在序列的演进方向进行递归,且所有节点单元按照链式连接的递归神经网络,RNN每一层的隐状态都由前一层的隐状态经过变换和激活函数得到。反向传播求导时最终得到的导数会包含每一步梯度的连乘,这会引起梯度爆炸或梯度消失。所以RNN很难处理"长程依赖",即无法学到序列中蕴含的间隔较长的规律。

LSTM引入了包含遗忘门、输入门、输出门的cell状态结构

【LSTM和RNN的区别】
LSTM结构更为复杂,在RNN中,将过去的输出和当前的输入concatenate到一起,通过tanh来控制两者的输出,它只考虑最近时刻的状态。在RNN中有两个输入和一个输出。

而LSTM为了能记住长期的状态,在RNN的基础上增加了一路输入和一路输出,增加的这一路就是细胞状态,也就是途中最上面的一条通路。事实上整个LSTM分成了三个部分:

1)哪些细胞状态应该被遗忘

2)哪些新的状态应该被加入

3)根据当前的状态和现在的输入,输出应该是什么

下面来分别讨论:

1)哪些细胞状态应该被遗忘

这部分功能是通过sigmoid函数实现的,也就是最左边的通路。根据输入和上一时刻的输出来决定当前细胞状态是否有需要被遗忘的内容。举个例子,如果之前细胞状态中有主语,而输入中又有了主语,那么原来存在的主语就应该被遗忘。concatenate的输入和上一时刻的输出经过sigmoid函数后,越接近于0被遗忘的越多,越接近于1被遗忘的越少。

2)哪些新的状态应该被加入

继续上面的例子,新进来的主语自然就是应该被加入到细胞状态的内容,同理也是靠sigmoid函数来决定应该记住哪些内容。但是值得一提的是,需要被记住的内容并不是直接concatenate的输入和上一时刻的输出,还要经过tanh,这点应该也是和RNN保持一致。并且需要注意,此处的sigmoid和前一步的sigmoid层的w和b不同,是分别训练的层。细胞状态在忘记了该忘记的,记住了该记住的之后,就可以作为下一时刻的细胞状态输入了。

3)根据当前的状态和现在的输入,输出应该是什么

这是最右侧的通路,也是通过sigmoid函数做门,对第二步求得的状态做tanh后的结果过滤,从而得到最终的预测结果。事实上,LSTM就是在RNN的基础上,增加了对过去状态的过滤,从而可以选择哪些状态对当前更有影响,而不是简单的选择最近的状态。

【LSTM中用到以下哪些激活函数】
sigmoid
tanh

8.说说CNN的优点、缺点
优点:
共享卷积核,可以方便处理高维数据
自动进行特征提取,无需手动设计特征

缺点:
池化层会丢失大量信息
自动进行特征提取,也就造成了模型可解释性差,更类似一个黑盒
需要大批量数据进行训练

9.L1不可导的时候该怎么办
当损失函数不可导,梯度下降不再有效,可以使用坐标轴下降法,梯度下降是沿着当前点的负梯度方向进行参数更新,而坐标轴下降法是沿着坐标轴的方向,假设有m个特征个数,坐标轴下降法进参数更新的时候,先固定m-1个值,然后再求另外一个的局部最优解,从而避免损失函数不可导问题。
使用Proximal Algorithm对L1进行求解,此方法是去优化损失函数上界结果。

10.概率和似然的区别
概率是指在给定参数的情况下,样本的随机向量X=x的可能性。而似然表示的是在给定样本X=x的情况下,参数为真实值的可能性。一般情况,对随机变量的取值用概率表示。而在非贝叶斯统计的情况下,参数为一个实数而不是随机变量,一般用似然来表示。

11.矩阵正定性的判断,Hessian矩阵正定性在梯度下降中的应用
若矩阵所有特征值均不小于0,则判定为半正定。若矩阵所有特征值均大于0,则判定为正定。在判断优化算法的可行性时Hessian矩阵的正定性起到了很大的作用,若Hessian正定,则函数的二阶偏导恒大于0,函数的变化率处于递增状态,在牛顿法等梯度下降的方法中,Hessian矩阵的正定性可以很容易的判断函数是否可收敛到局部或全局最优解

12.交叉熵、logistic回归
优点:使用逻辑函数得到概率,并结合交叉熵当损失函数时,在模型效果差的时候学习速度比较快,在模型效果好的时候学习速度变慢。

缺点:Deng [4]在2019年提出了ArcFace Loss,并在论文里说了Softmax Loss的两个缺点:1、随着分类数目的增大,分类层的线性变化矩阵参数也随着增大;2、对于封闭集分类问题,学习到的特征是可分离的,但对于开放集人脸识别问题,所学特征却没有足够的区分性。对于人脸识别问题,首先人脸数目(对应分类数目)是很多的,而且会不断有新的人脸进来,不是一个封闭集分类问题。

另外,sigmoid(softmax)+cross-entropy loss 擅长于学习类间的信息,因为它采用了类间竞争机制,它只关心对于正确标签预测概率的准确性,忽略了其他非正确标签的差异,导致学习到的特征比较散。基于这个问题的优化有很多,比如对softmax进行改进,如L-Softmax、SM-Softmax、AM-Softmax等。

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

方式二:根据每个类别都建立一个二分类器,本类别的样本标签定义为0,其它分类样本标签定义为1,则有多少个类别就构造多少个逻辑回归分类器。若所有类别之间有明显的互斥则使用softmax分类器,若所有类别不互斥有交叉的情况则构造相应类别个数的逻辑回归分类器。

14.欧氏距离、曼哈顿距离、余弦距离、切比雪夫距离

欧氏距离

曼哈顿距离

切比雪夫距离

余弦距离

15.问题:训练集中类别不均衡,哪个参数最不准确?
准确度(Accuracy)
解析:举例,对于二分类问题来说,正负样例比相差较大为99:1,模型更容易被训练成预测较大占比的类别。因为模型只需要对每个样例按照0.99的概率预测正类,该模型就能达到99%的准确率。

16.如果数据有问题,怎么处理;
1.上下采样平衡正负样例比;2.考虑缺失值;3.数据归一化

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

使用正确的评估标准,当数据不平衡时可以采用精度,调用度,F1得分,MCC,AUC等评估指标。

重新采样数据集,如欠采样和过采样。欠采样通过减少冗余类的大小来平衡数据集。当数据量不足时采用过采样,尝试通过增加稀有样本的数量来平衡数据集,通过使用重复,自举,SMOTE等方法生成新的样本。

以正确的方式使用K-fold交叉验证,组合不同的重采样数据集,对多数类进行聚类。

17.LR和线性回归的区别
线性回归用来做预测,LR用来做分类。线性回归是来拟合函数,LR是来预测函数。线性回归用最小二乘法来计算参数,LR用最大似然估计来计算参数。线性回归更容易受到异常值的影响,而LR对异常值有较好的稳定性。

【以下哪些是LR模型的典型特点】
计算简单
需要精细的特征工程
难以构建高阶特征

18.分类算法列一下有多少种?应用场景。
单一的分类方法主要包括:
LR逻辑回归,SVM支持向量机,DT决策树、NB朴素贝叶斯、NN人工神经网络、K-近邻;

集成学习算法:基于Bagging和Boosting算法思想,RF随机森林,GBDT,Adaboost,XGboost。

19.为什么高斯核能够拟合无穷维度
因为将泰勒展开式代入高斯核,将会得到一个无穷维度的映射。

20.问题:Loss Function有哪些,怎么用?
平方损失(预测问题)
交叉熵(分类问题)
hinge损失(SVM支持向量机)
CART回归树的残差损失

21.k-means
【算法流程】
从数据集中随机选择k个聚类样本作为初始的聚类中心,然后计算数据集中每个样本到这k个聚类中心的距离,并将此样本分到距离最小的聚类中心所对应的类中。将所有样本归类后,对于每个类别重新计算每个类别的聚类中心即每个类中所有样本的质心,重复以上操作直到聚类中心不变为止。

【KMeans有什么缺点,K怎么确定】
在k-means算法中,用质心来表示cluster;且容易证明k-means算法收敛等同于所有质心不再发生变化。
基本的k-means算法流程如下:
选取k个初始质心(作为初始cluster);

repeat: 对每个样本点,计算得到距其最近的质心,将其类别标为该质心所对应的cluster; 重新计算k个cluser对应的质心;

until 质心不再发生变化

k-means存在缺点:

1)k-means是局部最优的,容易受到初始质心的影响;比如在下图中,因选择初始质心不恰当而造成次优的聚类结果。

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

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

法2:(Calinski-Harabasz准则)

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

重复计算一下过程,直到质心不再改变
计算样本与每个质心之间的相似度,将样本归类到最相似的类中
重新计算质心
输出最终的质心以及每个类

22.HMM隐马尔可夫模型的参数估计方法是?
期望最大化(Expectation-Maximum,EM)算法

期望最大化算法(Expectation-Maximization, EM)是一种用于无监督学习的迭代算法,用于估计具有潜在变量的概率模型的参数。

该算法基于两个步骤的交替迭代:E步骤(Expectation),用当前参数估计每个数据点属于每个潜在类别的概率,M步骤(Maximization),使用上一步中计算得到的期望概率来最大化似然函数,从而更新参数。

EM算法通常用于处理缺失数据问题,其中潜在变量表示缺失的数据。在这种情况下,EM算法可以通过在缺失值上求期望来估计参数。

EM算法也可以用于聚类问题,其中每个数据点被分配到一个潜在的聚类中心,并且EM算法的目标是最大化似然函数以确定聚类中心。

虽然EM算法不保证收敛到全局最优解,但它通常是一种有效的方法,并且在许多概率建模问题中被广泛使用。

23.如何防止过拟合?
1.早停法;
2.l1和l2正则化;
3.神经网络的dropout;
4.决策树剪枝;
5.SVM的松弛变量;
6.集成学习
7.增加数据
8.通过特征选择减少特征数量

1).在训练和建立模型的时候,从相对简单的模型开始,不要一开始就把特征做的非常多,模型参数跳的非常复杂。
2).增加样本,要覆盖全部的数据类型。数据经过清洗之后再进行模型训练,防止噪声数据干扰模型。
3).正则化。在模型算法中添加惩罚函数来防止过拟合。常见的有L1,L2正则化。
4).集成学习方法bagging(如随机森林)能有效防止过拟合
5).减少特征个数(不是太推荐)注意:降维不能解决过拟合。降维只是减小了特征的维度,并没有减小特征所有的信息。

24.Focal Loss 介绍一下

Focal loss主要是为了解决one-stage目标检测中正负样本比例严重失衡的问题。该损失函数降低了大量简单负样本在训练中所占的权重,也可理解为一种困难样本挖掘。

首先在原有的基础上加了一个因子,其中gamma>0使得减少易分类样本的损失。使得更关注于困难的、错分的样本。

例如gamma为2,对于正类样本而言,预测结果为0.95肯定是简单样本,所以(1-0.95)的gamma次方就会很小,这时损失函数值就变得更小。而预测概率为0.3的样本其损失相对很大。对于负类样本而言同样,预测0.1的结果应当远比预测0.7的样本损失值要小得多。对于预测概率为0.5时,损失只减少了0.25倍,所以更加关注于这种难以区分的样本。这样减少了简单样本的影响,大量预测概率很小的样本叠加起来后的效应才可能比较有效。

此外,加入平衡因子alpha,用来平衡正负样本本身的比例不均:

25.AUC的理解
Auc体现出容忍样本倾斜的能力,只反应模型对正负样本排序能力的强弱,而其直观含以上是任意取一个正样本和负样本,正样本的得分大于负样本的概率。

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

常见的特征选择方式:

1)、去除方差较小的特征

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

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

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

27.L1和L2正则
L范数(L1 norm)是指向量中各个元素绝对值之和,也有个美称叫“稀疏规则算子”(Lasso regularization)。比如 向量A=[1,-1,3],那么A的L1范数为 |1|+|-1|+|3|.简单总结一下就是: L1范数: 为x向量各个元素绝对值之和。

L2范数:为x向量各个元素平方和的1/2次方,L2范数又称Euclidean范数或者Frobenius范数Lp范数:为x向量各个元素绝对值p次方和的1/p次方.

在支持向量机学习过程中,L1范数实际是一种对于成本函数求解最优的过程,因此,L1范数正则化通过向成本函数中添加L1范数,使得学习得到的结果满足稀疏化,从而方便人类提取特征,即L1范数可以使权值稀疏,方便特征提取

L2范数可以防止过拟合,提升模型的泛化能力。

L1和L2的差别,为什么一个让绝对值最小,一个让平方最小,会有那么大的差别呢?看导数一个是1一个是w便知, 在靠进零附近, L1以匀速下降到零, 而L2则完全停下来了. 这说明L1是将不重要的特征(或者说, 重要性不在一个数量级上)尽快剔除, L2则是把特征贡献尽量压缩最小但不至于为零. 两者一起作用, 就是把重要性在一个数量级(重要性最高的)的那些特征一起平等共事(简言之, 不养闲人也不要超人)。

28.特征工程的问题
特征工程包括数据与特征处理、特征选择和降维三部分。

数据与特征处理包括:
1.数据选择、清洗、采样

数据格式化;

数据清洗,填充缺失值、去掉脏数据,将不可信的样本丢掉,缺省值极多的字段考虑不用;

采样:针对正负样本不平衡的情况,当正样本远大于负样本时,且量都很大时,使用下采样,量不大时,可采集更多的数据或oversampling或修改损失函数;采样过程中可利用分层抽样保持不同类别数据的比例。

2.不同类型数据的特征处理

数值型:幅度调整/归一化、log等变化、统计值(例如max、min、mean、std)、离散化、分桶等

类别型:one-hot编码等

时间型:提取出连续值的持续时间和间隔时间;提取出离散值的“年”、“月”、“日”、“一年中哪个星期/季度”、“一周中的星期几”、“工作日/周末”等信息

文本型:使用If-idf特征

统计型:加减平均、分位线、次序、比例

意义:

对数据进行预处理,可提高数据质量,提高挖掘质量。对数据进行清洗可填充缺失值、光滑噪声数据,识别和删除离群点数据,保证数据的一致性;

使用正确的采样方法可解决因数据不平衡带来的预测偏差;

对不同的数据类型进行不同的特征处理有助于提高特征的可用性,例如对数值型数据进行归一化可将数据转化到统一量纲下;对类别型数据,可用one-hot编码方法将类别数据数字化,数字化特征之后可更用来计算距离、相似性等;可从时间型数据当中提取中更多的时间特征,例如年、月和日等,这些特征对于业务场景以及模型的预测往往有很大的帮助。统计型特征处理有助于从业务场景中挖掘更丰富的信息。

特征选择包括:

1.Filter:使用方差、Pearson相关系数、互信息等方法过滤特征,评估单个特征和结果值之间的相关程度,留下Top相关的特征部分。

2.Wrapper:可利用“递归特征删除算法”,把特征选择看做一个特征子集搜索问题,筛选各种特征子集,用模型评估效果。

3.Embedded:可利用正则化方式选择特征,使用带惩罚项的基模型,除了选择出特征外,同时也进行了降纬。

意义:

-剔除对结果预测不大的特征,减小冗余,选择有意义的特征输入模型,提高计算性能。

降维:

方法:主成分分析法(PCA)和线性判别分析(LDA)

意义:通过PCA或LDA方法,将较高纬度样本空间映射到较低维度的样本空间,从而达到降纬的目的,减少模型的训练时间,提高模型的计算性能。

29.Tensorflow的工作原理
Tensorflow是用数据流图来进行数值计算的,而数据流图是描述有向图的数值计算过程。在有向图中,节点表示为数学运算,边表示传输多维数据,节点也可以被分配到计算设备上从而并行的执行操作。

30.BatchNormalization的作用
神经网络在训练的时候随着网络层数的加深,激活函数的输入值的整体分布逐渐往激活函数的取值区间上下限靠近,从而导致在反向传播时低层的神经网络的梯度消失。而BatchNormalization的作用是通过规范化的手段,将越来越偏的分布拉回到标准化的分布,使得激活函数的输入值落在激活函数对输入比较敏感的区域,从而使梯度变大,加快学习收敛速度,避免梯度消失的问题

BN层的作用是把一个batch内的所有数据,从不规范的分布拉到正态分布。这样做的好处是使得数据能够分布在激活函数的敏感区域,敏感区域即为梯度较大的区域,因此在反向传播的时候能够较快反馈误差传播。

31.梯度消失
在神经网络中,当前面隐藏层的学习速率低于后面隐藏层的学习速率,即随着隐藏层数目的增加,分类准确率反而下降了。这种现象叫做消失的梯度问题。

32.训练过程中,若一个模型不收敛,那么是否说明这个模型无效?导致模型不收敛的原因有哪些?
并不能说明这个模型无效,导致模型不收敛的原因可能有数据分类的标注不准确,样本的信息量太大导致模型不足以fit整个样本空间。学习率设置的太大容易产生震荡,太小会导致不收敛。可能复杂的分类任务用了简单的模型。数据没有进行归一化的操作。

33.Relu比Sigmoid的效果好在哪里?
Sigmoid的导数只有在0的附近时有较好的激活性,而在正负饱和区域的梯度趋向于0,从而产生梯度弥散的现象,而relu在大于0的部分梯度为常数,所以不会有梯度弥散现象。Relu的导数计算的更快。Relu在负半区的导数为0,所以神经元激活值为负时,梯度为0,此神经元不参与训练,具有稀疏性。

34.Attention机制的作用
减少处理高维输入数据的计算负担,结构化的选取输入的子集,从而降低数据的维度。让系统更加容易的找到输入的数据中与当前输出信息相关的有用信息,从而提高输出的质量。帮助类似于decoder这样的模型框架更好的学到多种内容模态之间的相互关系。

35.Lstm和Gru的原理
Lstm由输入门,遗忘门,输出门和一个cell组成。第一步是决定从cell状态中丢弃什么信息,然后在决定有多少新的信息进入到cell状态中,最终基于目前的cell状态决定输出什么样的信息。

Gru由重置门和更新门组成,其输入为前一时刻隐藏层的输出和当前的输入,输出为下一时刻隐藏层的信息。重置门用来计算候选隐藏层的输出,其作用是控制保留多少前一时刻的隐藏层。更新门的作用是控制加入多少候选隐藏层的输出信息,从而得到当前隐藏层的输出。

与GRU区别:
1)GRU和LSTM的性能在很多任务上不分伯仲。
2)GRU 参数更少因此更容易收敛,但是数据集很大的情况下,LSTM表达性能更好。
3)从结构上来说,GRU只有两个门(update和reset),LSTM有三个门(forget,input,output),GRU直接将hidden state 传给下一个单元,而LSTM则用memory cell 把hidden state 包装起来。

36.什么是dropout
在神经网络的训练过程中,对于神经单元按一定的概率将其随机从网络中丢弃,从而达到对于每个mini-batch都是在训练不同网络的效果,防止过拟合。

DropConnect的原理 防止过拟合方法的一种,与dropout不同的是,它不是按概率将隐藏层的节点输出清0,而是对每个节点与之相连的输入权值以一定的概率清0。

37.GAN网络的思想
GAN用一个生成模型和一个判别模型,判别模型用于判断给定的图片是不是真实的图片,生成模型自己生成一张图片和想要的图片很像,开始时两个模型都没有训练,然后两个模型一起进行对抗训练,生成模型产生图片去欺骗判别模型,判别模型去判别真假,最终两个模型在训练过程中,能力越来越强最终达到稳态。

GAN同时要训练一个生成网络(Generator)和一个判别网络,前者输入一个noise变量z,输出一个伪图片数据G(z;θg)G(z;θg),后者输入一个图片(real image)以及伪图片(fake image)数据x,输出一个表示该输入是自然图片或者伪造图片的二分类置信度D(x;θd)D(x;θd),理想情况下,判别器D需要尽可能准确的判断输入数据到底是一个真实的图片还是某种伪造的图片,而生成器G又需要尽最大可能去欺骗D,让D把自己产生的伪造图片全部判断成真实的图片。

38.1*1的卷积作用
实现跨通道的交互和信息整合,实现卷积核通道数的降维和升维,可以实现多个feature map的线性组合,而且可是实现与全连接层的等价效果。

39.梯度消失梯度爆炸怎么解决
1)使用 ReLU、LReLU、ELU、maxout 等激活函数
sigmoid函数的梯度随着x的增大或减小和消失,而ReLU不会。

2)使用批规范化

通过规范化操作将输出信号x规范化到均值为0,方差为1保证网络的稳定性。从上述分析分可以看到,反向传播式子中有w的存在,所以w的大小影响了梯度的消失和爆炸,Batch Normalization 就是通过对每一层的输出规范为均值和方差一致的方法,消除了w带来的放大缩小的影响,进而解决梯度消失和爆炸的问题。

40.算法题:topK给出3种解法

1)局部淘汰法 – 借助“冒泡排序”获取TopK
思路:(1)可以避免对所有数据进行排序,只排序部分;(2)冒泡排序是每一轮排序都会获得一个最大值,则K轮排序即可获得TopK。

时间复杂度空间复杂度:(1)时间复杂度:排序一轮是O(N),则K次排序总时间复杂度为:O(KN)。(2)空间复杂度:O(K),用来存放获得的topK,也可以O(1)遍历原数组的最后K个元素即可。

2)局部淘汰法 – 借助数据结构""获取TopK

思路:(1)堆:分为大顶堆(堆顶元素大于其他所有元素)和小顶堆(堆顶其他元素小于所有其他元素)。(2)我们使用小顶堆来实现。(3)取出K个元素放在另外的数组中,对这K个元素进行建堆。(4)然后循环从K下标位置遍历数据,只要元素大于堆顶,我们就将堆顶赋值为该元素,然后重新调整为小顶堆。(5)循环完毕后,K个元素的堆数组就是我们所需要的TopK。

时间复杂度与空间复杂度:(1)时间复杂度:每次对K个元素进行建堆,时间复杂度为:O(KlogK),加上N-K次的循环,则总时间复杂度为O((K+(N-K))logK),即O(NlogK),其中K为想要获取的TopK的数量N为总数据量。(2)空间复杂度:O(K),只需要新建一个K大小的数组用来存储topK即可

3)分治法 – 借助”快速排序“方法获取TopK

思路:(1)比如有10亿的数据,找处Top1000,我们先将10亿的数据分成1000份,每份100万条数据。(2)在每一份中找出对应的Top 1000,整合到一个数组中,得到100万条数据,这样过滤掉了999%%的数据。(3)使用快速排序对这100万条数据进行”一轮“排序,一轮排序之后指针的位置指向的数字假设为S,会将数组分为两部分,一部分大于S记作Si,一部分小于S记作Sj。(4)如果Si元素个数大于1000,我们对Si数组再进行一轮排序,再次将Si分成了Si和Sj。如果Si的元素小于1000,则我们需要在Sj中获取1000-count(Si)个元素的,也就是对Sj进行排序(5)如此递归下去即可获得TopK。

时间复杂度与空间复杂度:(1)时间复杂度:一份获取前TopK的时间复杂度:O((N/n)logK)。则所有份数为:O(NlogK),但是分治法我们会使用多核多机的资源,比如我们有S个线程同时处理。则时间复杂度为:O((N/S)logK)。之后进行快排序,一次的时间复杂度为:O(N),假设排序了M次之后得到结果,则时间复杂度为:O(MN)。所以 ,总时间复杂度大约为O(MN+(N/S)logK) 。(2)空间复杂度:需要每一份一个数组,则空间复杂度为O(N)。

41.Python
【什么是python的生成器?】
python生成器是一个返回可以迭代对象的函数,可以被用作控制循环的迭代行为。生成器类似于返回值为数组的一个函数,这个函数可以接受参数,可以被调用,一般的函数会返回包括所有数值的数组,生成器一次只能返回一个值,这样消耗的内存将会大大减小。

【python中is和= =的区别】
is是用来判断两个变量引用的对象是否为同一个,==用于判断引用对象的值是否相等。可以通过id()函数查看引用对象的地址。

【python中dict和list的区别,dict的内部实现】
dict查找速度快,占用的内存较大,list查找速度慢,占用内存较小,dict不能用来存储有序集合。Dict用{}表示,list用[]表示。
dict是通过hash表实现的,dict为一个数组,数组的索引键是通过hash函数处理后得到的,hash函数的目的是使键值均匀的分布在数组中。

42.C++
【C++中static关键字的作用】
同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性,所以加了static关键字的变量和函数可对其它源文件隐藏。还可以保持变量内容的持久性。用static前缀作为关键字的变量默认的初始值为0。

43.深拷贝与浅拷贝的区别
深复制和浅复制最根本的区别在于是否是真正获取了一个对象的复制实体,而不是引用。

浅复制 —-只是拷贝了基本类型的数据,而引用类型数据,复制后也是会发生引用,我们把这种拷贝叫做“(浅复制)浅拷贝”,换句话说,浅复制仅仅是指向被复制的内存地址,如果原地址中对象被改变了,那么浅复制出来的对象也会相应改变。

深复制 —-在计算机中开辟了一块新的内存地址用于存放复制的对象。

44.死锁

1、什么是死锁?

指两个或两个以上的线程或进程在执行程序的过程中,因争夺资源或者程序推进顺序不当而相互等待的一个现象。

2、死锁产生的必要条件?

互斥条件、请求和保持条件、不剥夺条件、环路等待条件

3、处理死锁的基本方法?

预防死锁、避免死锁(银行家算法)、检测死锁(资源分配)、解除死锁:剥夺资源、撤销进程

45.word2vec

【Word2Vec中skip-gram是什么,Negative Sampling怎么做】
Word2Vec通过学习文本然后用词向量的方式表征词的语义信息,然后使得语义相似的单词在嵌入式空间中的距离很近。

而在Word2Vec模型中有Skip-Gram和CBOW两种模式,Skip-Gram是给定输入单词来预测上下文,而CBOW与之相反,是给定上下文来预测输入单词。

Negative Sampling是对于给定的词,并生成其负采样词集合的一种策略,已知有一个词,这个词可以看做一个正例,而它的上下文词集可以看做是负例,但是负例的样本太多,而在语料库中,各个词出现的频率是不一样的,所以在采样时可以要求高频词选中的概率较大,低频词选中的概率较小,这样就转化为一个带权采样问题,大幅度提高了模型的性能。

【FastText和Glovec原理】
FastText是将句子中的每个词通过一个lookup层映射成词向量,对词向量叠加取平均作为句子的向量,然后直接用线性分类器进行分类,FastText中没有非线性的隐藏层,结构相对简单而且模型训练的更快。

Glovec融合了矩阵分解和全局统计信息的优势,统计语料库的词-词之间的共现矩阵,加快模型的训练速度而且又可以控制词的相对权重。

【word2vec实施过程】

词向量其实是将词映射到一个语义空间,得到的向量。而word2vec是借用神经网络的方式实现的,考虑文本的上下文关系,有两种模型CBOW和Skip-gram,这两种模型在训练的过程中类似。Skip-gram模型是用一个词语作为输入,来预测它周围的上下文,CBOW模型是拿一个词语的上下文作为输入,来预测这个词语本身。
词向量训练的预处理步骤:

1.对输入的文本生成一个词汇表,每个词统计词频,按照词频从高到低排序,取最频繁的V个词,构成一个词汇表。每个词存在一个one-hot向量,向量的维度是V,如果该词在词汇表中出现过,则向量中词汇表中对应的位置为1,其他位置全为0。如果词汇表中不出现,则向量为全0

2.将输入文本的每个词都生成一个one-hot向量,此处注意保留每个词的原始位置,因为是上下文相关的

3.确定词向量的维数N

Skip-gram处理步骤:

1.确定窗口大小window,对每个词生成2*window个训练样本,(i, i-window),(i, i-window+1),…,(i, i+window-1),(i, i+window)

2.确定batch_size,注意batch_size的大小必须是2*window的整数倍,这确保每个batch包含了一个词汇对应的所有样本

3.训练算法有两种:层次Softmax和Negative Sampling

4.神经网络迭代训练一定次数,得到输入层到隐藏层的参数矩阵,矩阵中每一行的转置即是对应词的词向量

CBOW的处理步骤:

1.确定窗口大小window,对每个词生成2*window个训练样本,(i-window, i),(i-window+1, i),…,(i+window-1, i),(i+window, i)

2.确定batch_size,注意batch_size的大小必须是2*window的整数倍,这确保每个batch包含了一个词汇对应的所有样本

3.训练算法有两种:层次Softmax和Negative Sampling

4.神经网络迭代训练一定次数,得到输入层到隐藏层的参数矩阵,矩阵中每一行的转置即是对应词的词向量

参数矩阵解释:

对输入层到隐藏层的参数包含W和b,我们需要的是W,这里的W是一个矩阵,shape=(N,V)。其中V是上文所述的词表的大小,N是需要生成的词向量的维数。N同样也是隐藏层(第一层)中的隐藏节点个数。

每次一个batch_size输入其实一个矩阵(batch_size, V),记为X,隐藏层输出为Y,公式为。所有的输入共享一个W,每次迭代的时候都在修改W,由于one-hot的性质,每次修改W只修改1对应的那一行。而这一行也就是词向量(转置后)
神经网络像是一个黑盒子,这其中的概念很难理解,这里给出我对词向量训练的个人理解:对于每个词s,训练数据对应的标记是另一个词t,训练其实是想找到一种映射关系,让s映射到t。但很显然我们不是希望找到一个线性函数,使得给定s一定能得到t,我们希望的是能够通过s得到一类词T,包含t。对于T中的每个t,由于在s上下文中出现的频次不同,自然能得到一个概率,频次越高说明s与t相关性越高。

对于词向量,或者说参数矩阵W,可以认为是一个将词映射到语义空间的桥梁,s与t相关性越高,则认为其在语义空间中越近,那么对应的桥梁也越靠近。如果用向量来理解的话就是向量之前的夹角越小,我们使用向量来表示这个词的信息,重要的是得到了语义信息。在实际应用中,生成一段文本,我们可以判断词与词的向量之间相似度,如果过低则就需要怀疑是否正确了。

46.目前处理非均衡数据分类问题的策略包括
过采样
欠采样
代价敏感学习
集成学习

47.下列关于k折交叉验证哪些选项正确?
增大k会导致得到交叉验证结果时间变长
增大k会导致交叉验证结果的置信度增加
如果k=N,那它就是留一法验证,其中N是观测数量。

48.与BP网络对比,CNN网络具有的不同点是
权值共享
局部连接

49.dropout
加入dropout,会使神经网络的训练时间变长
dropout跟bagging操作的效果类似

50.下面哪些属于推荐算法样本特征的典型特点
高维、稀疏

51.神经网络训练过程中哪些现象表明可能出现了梯度爆炸
模型的损失函数值在训练过程中变成NaN值
在更新的时损失有较大的变化
每个节点和层的误差梯度值持续大于1.0

52.图像分类问题中,哪些方法可以解决数据不均衡问题
欠采样
过采样
数据增强
使用新评价指标

53.以下算法中既可以用于分类又可以用于回归的有
SVM
随机森林
决策树

54.以下哪些属于NLP中常用的数据增强方式?
回译
同义词替换
随机插入

55.以下哪些属于决策树的特征?
对异常点不敏感
可解释性强

56.NLP技术领域中的“MASK”方法可有效解决哪些问题?
防止泄露标签信息
处理非定长序列时用于区分出无效字
使池化等操作计算更准确

57.关于堆数据结构,下面描述中正确的有
可以用堆实现优先队列(priority_queue)
使用堆可以实现排序算法,复杂度为N * log N
从M个元素中查找最小的N个元素时,使用大顶堆的效率比使用小顶堆更高
堆数据结构可以用数组方式存储,存储的是一棵完全二叉树

58.利用SGD训练神经网络,发现模型loss一直不下降(变化幅度较小),可以修改算法的哪些步骤()

改变激活函数
改变权重的初始化

59.中缀表达式转后缀表达式
后缀表达式

60.在人脸识别算法中,通常用来衡量人脸特征相似度的方法有
欧氏距离
余弦距离

61.数据不平衡问题的解决方法有
对数据进行采样
进行特殊的加权
考虑数据的先验分布
采用对数据不平衡不敏感的算法

62.以下网络中属于轻量级网络的有
MobileNet
ShuffleNet
SqueezeNet

63.知识点
红黑树插入操作的平均时间复杂度为0(log n),最坏时间复杂度为0(log n)
归并排序的最差情况复杂度O(nlogn)
堆排序的最差情况复杂度O(nlogn)
不论线性表采用顺序存储结构还是链式存储结构,删除值为X的结点的时间复杂度均为O(n)

64.使用logistic回归对样本进行分类,得到训练样本的准确率和测试样本的准确率。现在,在数据中增加一个新的特征,其它特征保持不变。然后重新训练测试。则下列说法正确的是?

训练样本准确率一定增加或保持不变

65.逻辑回归(Logistic regression)和单层感知器(perceptron)的有什么不同?
激活函数

66.以下属于模型评估指标的有?
准确率
精确率
召回率
均方根误差

67.以下基于核算法的是?
判别分析
支持向量机
径向基函数

68.预测实验里,测试集合的Label是[0,0,0,1,1,1],某个模型的输出值是[0.2,0.8,0.65,0.7,0.9,0.6],那么这个模型在该测试集合上的AUC是()

3个正样本,3个负样本,一共有9个正负样本对,其中正样本预测概率大于负样本预测概率的有(0.2,0.7),(0.2,0.9),(0.2,0.6),(0.8,0.9),(0.65,0.7),(0.65,0.9)一共6个,因此AUC为6/9=2/3

69.一个无向图中包含10个顶点,其中4个顶点的度为2,4个顶点的度为3,2个顶点的度为4,请问这个图有()条边。

无向图总度数为边数的两倍,由题可知,总度数为24+34+2*4=28,因此总共有边14条

70.softmax(X+c)的结果与softmax(X)的结果一致(其中X是向量,c是常量)
向量中每个元素加上同一个常数后并不影响最大值,因此不会改变softmax的结果

71.HashMap与HashTable相关以下描述正确的是
二者都可以进行数组扩容
二者都是以链表来作为解决冲突方案
二者都是以散列表数据结构存储数据

72.深度网络反向传播中,第N层发生梯度消失,则?
<N层的网络梯度消失

73.解决维数灾难的一个重要途径是降维,亦称“维数约简”,即通过某种数学变换将原始高维属性空间转变为一个低维“子空间”。那么,常用的降维方法有哪些
MDS多维缩放
PCA主成分分析
LDA线性判别分析
流行学习
LASSO
聚类分析
小波分析法
拉普拉斯特征映射

74.在《Attention Is All You Need》谷歌提出了Transformer,以下哪些结构出现在了原文中的Transformer里 。
Multi-Head Attention
positional encoding
feed-forward network

75.在双向链表中,删除指针p所指向的结点时需要的操作是
p->next->prior=p->prior; p->prior->next=p->next

76.互斥条件、请求和保持条件、不剥夺条件和环路等待条件这四个条件只要其中任意一个条件不满足就不会出现死锁

77.按照二叉树的定义,4个节点的二叉树有多少种?
f(n) = (2n)! / n!(n+1)!

78.在机器学习中,下列关于各算法对应的损失函数正确的是
最小二乘-Square loss
SVM-Hinge Loss
Logistic Regression-(log-Loss)
AdaBoost-指数损失函数

79.机器学习中做特征选择时,可能用到的方法有?
卡方
信息增益
平均互信息
期望交叉熵

80.数据挖掘的挖掘方法包括:
聚类分析
回归分析
神经网络
决策树算法

81.在分类问题中,我们经常会遇到正负样本数据量不等的情况,比如正样本为10w条数据,负样本只有1w条数据,以下合适的处理方法是

将负样本重复10次,生成10w样本量,打乱顺序参与分类(重采样)
从10w正样本中随机抽取1w参与分类(欠采样)
将负样本每个权重设置为10,正样本权重为1,参与训练过程(权重调整)
直接训练模型,预测的时候调节阈值(阈值偏移)

82.以下()属于线性分类器最佳准则?
感知准则函数
支持向量机
Fisher准则

83.当分配给一个进程的页面数增加时,页故障数可能增大也可能变小,下述算法符合这种情况的是

FIFO算法

84.下面哪些算法模型可以用来完成命名实体的任务
HMM
CRF
LSTM
seq2seq

85.以下方法属于集成方法的是
bagging
stacking
blending
boosting

86.每次使用K-means算法得到的聚类结果可能会不一样

87.下列有关增量模型描述正确的
把待开发的软件系统模块化,将每个模块作为一个增量组件,从而分批次地分析、设计、编码和测试这些增量组件

88.关系型数据库创建表都有主键。以下对主键描述正确的是
主键是唯一、不为空值的列

89.如何在多线程中避免发生死锁?
允许进程同时访问某些资源。
允许进程强行从占有者那里夺取某些资源。
进程在运行前一次性地向系统申请它所需要的全部资源。
把资源事先分类编号,按号分配,使进程在申请,占用资源时不会形成环路。

90.在C++中,引用和指针的区别是
引用总是指向一个对象,指针可能不指向对象
sizeof 引用得到的是所指向的变量(对象)的大小,而 sizeof 指针得到的是指针变量本身的大小
引用创建时必须初始化,而指针则可以在任何时候被初始化

91.根据卡塔兰数的思想,n元素固定顺序入栈,对应的出栈次数a=C(2n,n)/(n+1)

92.聚类是典型的无监督学习方法,谱聚类是很好的聚类算法,往往可以得到不错的聚类结果(缺点是需要计算特征值和特征向量,速度较慢);主成分分析PCA是使用无标签的数据直接做降维,属于无监督学习。主题模型LDA只使用文本数据本身,在给定主题数目K和超参数αβ的前提下,可以直接学习到主题分布和词分布,属于无监督学习。而线性判别分析LDA使用标签计算类内散列矩阵和类间散列矩阵,是有监督学习算法。需要注意的是,机器学习中有两个算法的简称都是LDA,使用时需要注意上下文。

93.常用的划分测试集和训练集的划分方法:留出法、交叉验证法、自助法

94.下面哪些是基于核的机器学习算法?
Radial Basis Function
Linear Discrimimate Analysis
Support Vector Machine

95.影响聚类算法效果的主要原因有:
特征选取
模式相似性测度
分类准则

96.下列是caffe支持的loss优化的方法的是
Adam
SGD
AdaDelta
Nesterov

97.欠拟合
训练误差和验证误差都很大。
解决:增加特征项;增加模型复杂度,如使用核函数;减小正则化系数;集成学习方法。

98.在AdaBoost算法中,所有被分错的样本的权重更新比例相同
给定n个数据点,如果其中一半用于训练,一般用于测试,则训练误差和测试误差之间的差别会随着n的增加而减少

99.下列哪些方法可以用来对高维数据进行降维:
LASSO
主成分分析法
聚类分析
小波分析法
线性判别法
拉普拉斯特征映射

100.每个神经元可以有一个或多个输入,和一个或多个输出。

101.bagging能实现跟神经网络中Dropout的类似效果

102.假设你需要调整超参数来最小化代价函数(cost function),会使用下列哪项技术?
穷举搜索
随机搜索
Bayesian优化

103.当在卷积神经网络中加入池化层(pooling layer)时,平移变换的不变性会被保留

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/99855
推荐阅读