文章目录
总结自以下经验贴:
-
https://www.nowcoder.com/discuss/167046
-
https://www.nowcoder.com/discuss/205497
-
https://github.com/elviswf/DeepLearningBookQA_cn
本总结偏向NLP和机器学习,对于计算机视觉和推荐系统等方向的面试问题不进行收集.
算法面经汇总(2)
项目
简历上的项目/比赛/实习是必聊的,甚至有的公司在一面基本只聊项目/比赛/实习,相关细节问的很多,而没怎么问通用的技术问题
⭐️ 项目中用到哪些技术 ,然后会针对这些技术的知识点来提问
⭐️ 项目中XXX(神经网络)等算法的性能为什么比不过XXX(gbdt)
以Kaggle比赛为例,为什么基于LSTM与Glove的模型架构比不过基于Bert等预训练模型?
- 预训练模型可以获得具有上下文语义的Embedding,通常来说效果比固定的Glove等要好
- 比赛的数据量较少,使用Bert等模型只需要fine-tune,而不像基于LSTM的模型还有大量的参数需要从头训练
⭐️ 项目/比赛还有什么改进空间,如果继续做下去,你会怎么做?
以Kaggle比赛为例,改进空间有:
- 尝试在领域特定语料,也就是问答数据集上进行进一步的pre-train
- 尝试加权求和多层的CLS输出,权重自动学习,这是别的队伍参考ELMO的做法
- 继续尝试半监督学习
- 继续尝试多任务学习以及自定义Loss
⭐️ 项目有什么商用价值
⭐️ 项目或比赛难点在哪,遇到了什么困难,怎么解决的
问题 | 解决方法 |
---|---|
数据量少,可用于训练的数据一共6000多条,另外public测试集数据仅占总的测试数据的13%,因此很可能遇到shakeup很严重的情况。 | (1)使用数据增强,增大数据量的同时提高模型的鲁棒性;(2)使用交叉验证、Dropout、Ensemble等方法防止过拟合 |
个别标签列有严重的类别不平衡问题 | 尝试了(1)使用class_weight自定义损失函数,但效果不好,主要是权重难确定(2)过采样,有的列有提高,有的列却下降,因为这相当于sample_weight,而每个sample有多个标签,该sample对有的标签来说是少类,对其他标签却是多类(3)后处理策略 |
⭐️ 介绍下在项目/比赛用到的评价指标
Kaggle比赛中用到的是spearman秩相关系数
⭐️ 为什么这个比赛需要用GroupKFold
https://blog.csdn.net/kancy110/article/details/74924589
GroupKFold的特点是同一组的样本不可能同时出现在同一折的测试集和训练集中。比赛的数据集中不同样本的标题可能是相同的,所以为了防止data leakage的问题,可以用标题作为分组依据,确保标题相同的样本不会同时在一个fold中的训练集和验证集中都出现。
⭐️ 在项目/比赛中学到了什么
- 多种预训练模型,如Bert、Roberta的使用
- 分层学习率,SWA等训练策略
- Github合作过程
⭐️ 画网络结构
⭐️ 选用的什么优化器
Adam
⭐️ 介绍一下SWA
⭐️ 模型融合使用了哪些模型
bert-wwm-uncased,bert-wwm-cased,bert-large-uncased,roberta-large,
⭐️ 用什么手段刷比赛的指标
Ensemble和后处理
⭐️ 对于比赛自己有什么反思,有什么不足的地方,和Top3的方案相比,主要差别在哪
-
加入比赛的时间比较迟,有些想法来不及尝试;
-
和Top3方案比,差别在没有用好半监督学习、进一步预训练、加权求和多层的CLS输出、Ensemble的模型多样性
编程
算法和数据结构
操作系统、计组、计网、数据库、数值计算
⭐️ 死锁如何产生,如何解决
⭐️ 线程和进程的原理和关系
⭐️ sql groupby的使用
给定一个表,列名如下,
user | video | time
查询每个用户第二个看得视频,请写出sql语句。
⭐️ 隔离级别
⭐️ 脏读幻读
⭐️ 代码求一个数的平方根(牛顿迭代或者二分)
⭐️ 数据库中的事务指的是什么
⭐️ 从搜谷歌到返回页面,发生了什么
python
⭐️ read readline readlines的区别
⭐️ *args **kwargs的含义与用法
⭐️ 多赋值
⭐️ 变量前面一个下划线、变量前面两个下划线、前面和后面各一个下划线(_var、__var、_var_)
⭐️ 数组,元组,集合,字典的不同作用
⭐️ 类里边的self的作用
⭐️ 遍历文件夹
⭐️ 生成器和迭代器的区别
⭐️ 什么是装饰器
⭐️ copy、deepcopy和赋值的区别
⭐️ python多线程的问题
⭐️ 垃圾回收机制
⭐️ 内存管理,内存池最大多少
⭐️ 可变不可变数据结构
⭐️ lambda与def 定义函数的区别
⭐️ 函数的参数传递
⭐️ yeild是什么,与return的区别
⭐️ python2和python3的map的差别
tensorflow、pytorch
⭐️ TF多卡训练,一个模型在一张卡上面放不下,怎么在多卡中运行(同理,pytorch如何实现多卡训练)
⭐️ TF中卷积是如何计算的(同理,可深究自己项目所使用的tf函数的实现)
⭐️ TF如何读取数据
⭐️ TF写一个全连接层
Linux
⭐️ linux找上一个使用命令
⭐️ vim定位到第一行
⭐️ awk
⭐️ nohup
数学
⭐️ 极大似然估计的原理,给定一个区间a到b的均匀分布,求极大似然估计
[1] 均匀分布参数的极大似然估计
这篇文章是求 [0,Θ]的极大似然估计,求[a,b]的极大似然估计过程与其类似。
⭐️ 全概率公式,贝叶斯公式
[1] 浅谈全概率公式和贝叶斯公式
[2] 条件概率、贝叶斯公式和全概率公式
⭐️ 最小二乘法推导
⭐️ 自助法采样:给定n个小球,有放回地采样n次。当n趋向于无穷的时候,某小球始终不被取到的概率是多少?
lim n → ∞ ( 1 − 1 n ) n = e \lim_{n\rightarrow \infty} (1-\frac1n)^n=e n→∞lim(1−n1)n=e
这就是两个重要极限之一,也是 e e e 的定义之一
⭐️ 矩阵的秩是什么
⭐️ T分布知道吗
⭐️ 极限知道吗
⭐️ 几种参数估计的联系与区别: MLE/MAP/贝叶斯
花书:P82/85/87 Chapter 5.5
⭐️ 圆上随机取三点,组成锐角三角形的概率
⭐️ 凸集的定义,凸函数定义
AI通用
⭐️ 过拟合的原因,解决办法,如何从模型结构上解决过拟合?
原因:数据太少或模型太复杂.
解决办法:
-
获取更多数据或进行数据增强
-
给目标函数添加正则化项,如 L 1 L_1 L1和 L 2 L_2 L2正则化
-
Early Stopping; 花书7.8节解释了Early Stopping为何具有正则化效果
-
Bagging等Ensemble方法
-
Dropout.
-
参数共享等简化模型的方法
-
Batch Normalization
后3种(Dropout、参数共享、BN)可以看做是在模型结构上解决过拟合的办法.
⭐️ 正则项的原理、梯度公式、L1正则化和L2正则化的区别、应用场景
见:正则项的原理、梯度公式、L1正则化和L2正则化的区别、应用场景
⭐️ 权重衰减相当于哪个正则项
[1] 权重衰减和L2正则化是一个意思吗? - SleepyBag的回答 - 知乎
[2] L2正则=Weight Decay?并不是这样 (看完AdamW后回顾这篇文章)
L2正则化是在目标函数中直接加上一个正则项,直接修改了我们的优化目标。
权值衰减是在训练的每一步结束的时候,对网络中的参数值直接裁剪一定的比例,优化目标的式子是不变的。
在使用标准的梯度下降法时二者是同一个东西,因为此时L2正则化的正则项对梯度的影响就是每次使得权值衰减一定的比例。
但是在使用一些其他优化方法的时候,就不一样了。比如说使用Adam方法时,每个参数的学习率会随着时间变化。这时如果使用L2正则化,正则项的效果也会随之变化;而如果使用权值衰减,那就与当前的学习率无关了,每次衰减的比例是固定的。
⭐️ 为什么只对权重做正则惩罚,而不对偏置做权重惩罚
花书7.1节:
⭐️ L1 loss和L2 loss的区别
[1] Differences between L1 and L2 as Loss Function and Regularization
[2] 参考资料1的翻译
[3] 讨论参考资料1所说的L2 loss更stable的帖子
-
对于细微的数据误差,L2 Loss更加稳定,因为平方会使得小于1的误差更小
-
但是L1 loss 对于数据中的异常点更加鲁棒. 如果数据集中存在异常点,其误差一般比正常点更大,假如误差大于1,这种差距就会被平方放大,因此模型会对异常点更加敏感,模型就需要调整以适应这些异常点,这将会牺牲很多正常的样本的预测精度。
-
L1范数的计算效率不如平方L2范数
⭐️ 方差-偏差分解
西瓜书 2.5节
⭐️ 数据不平衡的处理方法
[1] 如何处理数据中的「类别不平衡」
[2] 类别不平衡问题 —— 采样方法
[3] 如何处理不平衡数据集的分类任务
[4] 使用class weight和sample weight处理不平衡问题
[5] 5分钟理解Focal Loss与GHM——解决样本不平衡利器
从指标的角度:
- 使用F1值、AUC等作为指标
从数据的角度:
- 获得更多不平衡类的数据
- 随机欠采样、随机过采样、SMOTE过采样.
方法 | 优点 | 缺点 |
---|---|---|
随机欠采样 | 数据集较大时减少训练时间和资源消耗 | 可能会损失重要的信息 |
随机过采样 | 没有信息损失其一般比随机欠采样效果好 | 更容易过拟合 |
SMOTE过采样 | 降低了过拟合的风险 | 若插值得到的样本不处于类别的边界会无效或有害 [ 2 ] ^{[2]} [2] |
从算法的角度:
- 使用现有的集成模型,例如随机森林、XGBoost
- 调整分类阈值
- 自定义损失函数:sample weight、class weight、focal loss [ 5 ] ^{[5]} [5]
- 把识别小类样本的任务当做无监督的异常点检测任务
- 使用Ensemble与欠采样结合,即EasyEnsemble [ 2 ] ^{[2]} [2]
⭐️ 输入数据归一化的作用
[1] Why do we have to normalize the input for an artificial neural network?
上图来自吴恩达的机器学习视频. 进行归一化可以使得所有特征的规模接近,让代价函数更加对称,加速训练过程并降低陷入局部最优解的风险 [ 1 ] ^{[1]} [1].
⭐️ 数据增强方法
[1] NLP数据增强方法总结及实现
NLP的数据增强方法:回译、同义词替换、随机插入、随机交换、随机删除
⭐️ Bad Case 分析
统计机器学习
NLP岗的重点是(由强到弱):CRF、HMM、LR、SVM、朴素贝叶斯、Bagging、Boosting、XGBOOST、LGB、GBDT、k-means;如果只是深度学习岗,应该CRF和HMM没有那么重点考察.
LR & SVM
⭐️ LR推导,从logit定义推到损失函数,再到梯度
[1] 手推逻辑斯蒂回归——以向量形式
⭐️ 逻辑回归不能解决什么问题,其损失函数的实际意义?
什么鬼,不能解决的问题多了去了.
损失函数的实际意义是负对数似然 (Negative Log Likelihood)
⭐️ 为什么用 log \log log 损失而不是均方误差损失 MSE?或:为什么使用最大似然估计而不用最小二乘法?
[1] 逻辑回归损失函数为什么使用最大似然估计而不用最小二乘法?
[2] 最小二乘、极大似然、梯度下降有何区别?
第一个问题:
- 使用负对数似然的LR的目标函数是任意阶可导的凸函数,而使用均方误差得到的不是凸函数 [ 1 ] ^{[1]} [1]
第二个问题:
- 使用最小二乘法前提假设是标签变量 y y y 服从高斯分布,分类问题的标签符合的是二项分布,显然不适合 [ 2 ] ^{[2]} [2]
- 况且,使用最小二乘法,也就是损失函数使用均方误差,这不是凸函数 [ 1 ] ^{[1]} [1]
⭐️ 如何用LR解决非线性可分问题
[1] 逻辑斯蒂回归能否解决非线性分类问题?
[2] 机器学习之核函数逻辑回归(机器学习技法)
只用原始特征,LR无法解决不能非线性可分的问题,有两种方法可以让LR适用于非线性可分问题:
- 先把特征离散化,然后做组合特征,可以实现一定程度的非线性.
- 使用kernel trick. 对于使用了L2正则化的LR,目标函数为:
J ( θ ) = λ 2 ∥ w ∥ 2 2 − 1 m ∑ i = 1 m y i log ( h ( x i ) ) + ( 1 − y i ) log ( 1 − h ( x i ) ) = λ 2 w T w + 1 m ∑ i = 1 m y i log ( 1 + exp ( − w T x i ) ) + ( 1 − y i ) log ( 1 + exp ( w T x i ) ) \begin{aligned} J(\boldsymbol \theta) &=\frac\lambda2\Vert \boldsymbol w\Vert_2^2 -\frac1m\sum_{i=1}^m y_i\log(h(\boldsymbol x_i)) + (1-y_i)\log(1-h(\boldsymbol x_i)) \\ &=\frac\lambda2\boldsymbol w^T \boldsymbol w+\frac1m\sum_{i=1}^m y_i\log(1+\exp({-\boldsymbol w^T\boldsymbol x_i})) + (1-y_i)\log(1+\exp({\boldsymbol w^T\boldsymbol x_i})) \\ \end{aligned} J(θ)=2λ∥w∥22−m1i=1∑myilog(h(xi))+(1−yi)log(1−h(xi))=2λwTw+m1i=1∑myilog(1+exp(−wTxi))+(1−yi)log(1+exp(wTxi))
可以证明 w \boldsymbol w w的最优解可以表示为样本 x i \boldsymbol x_i xi的线性组合 [ 2 ] ^{[2]} [2], w ∗ = ∑ i = 1 m β i x i \boldsymbol w^*=\sum_{i=1}^m \beta_i \boldsymbol x_i w∗=∑i=1mβixi,其中 m m m为样本数量.
不失一般性,对 w \boldsymbol w w的求解可以转化为对 β \boldsymbol \beta β的求解:
C ( β ) = λ 2 ∑ i = 1 m ∑ j = 1 m β i β j x i T x j + 1 m ∑ i = 1 m y i log ( 1 + exp ( − ∑ j = 1 m x i T x j ) ) + ( 1 − y i ) log ( 1 + exp ( ∑ j = 1 m x i T x j ) ) = λ 2 ∑ i = 1 m ∑ j = 1 m β i β j κ ( x i , x j ) + 1 m ∑ i = 1 m y i log ( 1 + exp ( − ∑ j = 1 m β j κ ( x i , x j ) ) ) + ( 1 − y i ) log ( 1 + exp ( ∑ j = 1 m β j κ ( x i , x j ) ) ) \begin{aligned} C(\boldsymbol \beta)&=\frac\lambda2\sum_{i=1}^m\sum_{j=1}^m \beta_i \beta_j\boldsymbol x_i^T \boldsymbol x_j+\frac1m\sum_{i=1}^m y_i\log(1+\exp(-\sum_{j=1}^m\boldsymbol x_i^T \boldsymbol x_j)) + (1-y_i)\log(1+\exp(\sum_{j=1}^m\boldsymbol x_i^T \boldsymbol x_j)) \\ &=\frac\lambda2\sum_{i=1}^m\sum_{j=1}^m \beta_i \beta_j\kappa( \boldsymbol x_i, \boldsymbol x_j)+\frac1m\sum_{i=1}^m y_i\log(1+\exp(-\sum_{j=1}^m \beta_j\kappa( \boldsymbol x_i, \boldsymbol x_j))) + (1-y_i)\log(1+\exp(\sum_{j=1}^m \beta_j\kappa( \boldsymbol x_i, \boldsymbol x_j))) \\ \end{aligned} C(β)=2λi=1∑mj=1∑mβiβjxiTxj+m1i=1∑myilog(1+exp(−j=1∑mxiTxj))+(1−yi)log(1+exp(j=1∑mxiTxj))=2λi=1∑mj=1∑mβiβjκ(xi,xj)+m1i=1∑myilog(1+exp(−j=1∑mβjκ(xi,xj)))+(1−yi)log(1+exp(j=1∑mβjκ(xi,xj)))
其中 κ ( ⋅ , ⋅ ) \kappa(\cdot,\cdot) κ(⋅,⋅)为核函数.
但是注意,SVM转化为对偶问题后,求解过程只需要计算与少数几个支持向量的内积,这个在进行复杂核函数计算时优势很明显,能够大大简化计算量。而加入核函数的LR则需要两两计算核函数,计算量太过庞大。
⭐️ LR是凸问题吗
逻辑斯蒂回归的目标函数是负对数似然函数,是凸函数,所以LR是凸问题.
⭐️ 讲一讲SVM (建模思想,函数间隔和几何间隔的几何含义,损失函数推导,对偶问题推导、核函数公式和作用,为什么转为对偶问题)
见:SVM笔记
⭐️ 拉格朗日乘子法能否求解非凸的目标函数问题
[1] 拉格朗日乘子法与KKT条件详解
对于等式约束的优化问题,可以应用拉格朗日乘子法去求取最优值;
如果含有不等式约束,可以应用KKT条件去求解。KKT条件是拉格朗日乘子法的推广。
当然,这两个方法求得的结果只是必要条件,只有当目标函数是凸函数的情况下,才能保证是充分必要条件。
⭐️ SVM时间复杂度
[1] 支持向量机(Support Vector Machine,SVM)算法复杂度详解
结论:对于线性SVM分类器,算法复杂度为 O ( n s d ) O(n_sd) O(nsd),就是支持向量的个数乘以输入向量的维度。
⭐️ svm模型C参数越大,代表模型的偏差大还是方差大?
C是惩罚系数,当 C 越大的时候,分类器的准确率越高,即bias越小,但同时容错率会越低,泛化能力会变差,即方差更大.
⭐️ svm的核函数有哪些?如何选择核函数?
[1] SVM的核函数如何选取?
- Linear核:主要用于线性可分的情形。参数少,速度快,对于一般数据,分类效果已经很理想了。
- RBF核:主要用于线性不可分的情形。参数多,分类结果非常依赖于参数。有很多人是通过训练数据的交叉验证来寻找合适的参数,不过这个过程比较耗时。个人的体会是:使用libsvm,默认参数,RBF核比Linear核效果稍差。通过进行大量参数的尝试,一般能找到比linear核更好的效果。
至于到底该采用哪种核,要根据具体问题,有的数据是线性可分的,有的不可分,需要多尝试不同核不同参数。如果特征的提取的好,包含的信息量足够大,很多问题都是线性可分的。当然,如果有足够的时间去寻找RBF核参数,应该能达到更好的效果。
⭐️ SVM高斯核调参
[1] 支持向量机高斯核调参小结
使用RBF核时,SVM有两个超参数,惩罚系数 C C C和RBF核的 γ \gamma γ,使用网格搜索结合Cross Validation的结果来选择这两个参数的组合,例如两个超参都在[0.01, 0.1, 1, 10]之间选取.
⭐️ LR和SVM的区别
[2] LR和SVM的联系区别
[3] LR与SVM的区别与联系
-
损失函数不同. LR的损失函数形式上等价于交叉熵损失,相当于最小化KL散度,而SVM基于最大化几何间隔理论来得到目标函数,所以LR的解是受数据分布影响的,而SVM的解不受数据分布的影响;
-
SVM只需要考虑支持向量,而LR需要考虑所有的点,所以在SVM中,在支持向量之外添加减少任何点都对结果没有影响,而LR则是每一个点都会影响决策;
-
LR可以直接输出概率,但SVM的输出不具有概率意义;
-
在非线性可分的情况下,SVM使用核函数解决,而LR虽然也可以使用核函数,但实际应用中很少用于非线性可分的情况,计算量过大是其中一个原因;
-
LR适合于大样本量的学习,SVM适合于小样本量的学习;
-
SVM基于几何间隔最大化理论,其优化目标相当于L2正则化项,因此是结构风险最小化算法,而LR默认情况下没有正则化项,属于经验风险最小化算法;
⭐️ SVM在什么应用场景比LR好
样本量小的情况
-
如果Feature的数量很大,跟样本数量差不多,这时候选用LR或者是Linear Kernel的SVM(即近似线性可分的问题使用LR或线性核的SVM)
-
如果Feature的数量比较小,样本数量一般,不算大也不算小,选用SVM+Gaussian Kernel(即非线性可分的问题且样本数量不大时使用高斯核的SVM)
-
如果Feature的数量比较小,而样本数量很多,需要手工添加一些feature变成第一种情况
朴素贝叶斯
⭐️ 计算条件概率时,有可能出现极大似然函数为0的情况,如何解决?朴素贝叶斯如何进行平滑?
利用数据集计算类的先验概率 P ( c ) P(c) P(c) 和 特征的条件概率也就是似然 P ( x i ∣ c ) P(x_i|c) P(xi∣c)的时候,我们会使用拉普拉斯修正来做平滑,也就是假设类别和特征的先验分布都是均匀分布,估计类别的先验概率的时候,给分子加1,给分母加上类别的所有可能取值个数;在估计某个特征的条件概率(似然)的时候,给分子加1,给分母加上这个特征的所有可能取值个数。
k-means
⭐️ k-means原理
[1] K-Means聚类算法(一):算法思路
[2] K-Means笔记(三)数学原理
⭐️ k-means代码实现(15~30min)
⭐️ k-means中的k值怎么来进行确定?
1、根据先验知识,例如结合具体的业务来分析合适的K值
2、手肘法,计算不同K值下的WSS(各个点到cluster中心的距离的平方的和),取“手肘”处即斜率发生变化最大的点。
树模型
⭐️ 讲一讲树模型(决策树,RF,GBDT,XGBOOST,LightGBM)
https://blog.csdn.net/qq_28031525/article/details/70207918
https://www.zybuluo.com/yxd/note/611571
⭐️ 除了树模型,Bagging能不能接其他的基模型
⭐️ xgboost和随机森林各自的特点,差别,分析他们的不同
⭐️ xgboost和lightgbm怎么并行化
⭐️ 提升树的原理,学习到的是什么
⭐️ 回归决策树的输出是什么
⭐️ 决策树和随机森林的区别,介绍一下随机森林(RF)
RF是一种Bagging集成,使用的基学习器是决策树。另外,在决策树训练的过程中引入了随机属性选择,传统决策树在选择划分属性时是在当前结点的属性集中选择一个最优属性,而RF先从该结点的属性集中随机选择一个子集,然后再从这个子集中选出最优属性用于划分。
⭐️ 决策树使用什么指标进行划分
ID3使用信息增益,C4.5使用信息增益率,CART使用基尼系数。
⭐️ 信息增益的定义是什么,公式是什么
⭐️ 熵的定义什么,公式是什么
⭐️ XGB残差怎么用一次和二次梯度求,分裂点怎么求,思想原理是什么
⭐️ XGB实际使用中重要的超参数
⭐️ 为什么lightgbm比XGB速度更快
⭐️ xgb如何处理类别特征
⭐️ XGBoost和随机森林的特征重要性是怎么计算的
⭐️ 树模型怎么剪枝?如何处理缺失值?
⭐️ lightgbm的直方图加速讲一下?具体是怎么来做的?
⭐️ lightgbm的叶子节点是怎么分裂的?
⭐️ GBDT和随机森林的树的深度哪一个比较深?为什么?
⭐️ scikit-learn中随机森林有哪些参数需要注意
Bagging & Boosting
⭐️ bagging和boosting的原理以及区别,谁是更关注方差 ,谁是更关注偏差
HMM & CRF
⭐️ 讲一讲条件随机场
[1] HMM与CRF笔记
⭐️ CRF的原理以及实现的一些细节
[1] HMM与CRF笔记
⭐️ HMM的训练方法
[1] HMM与CRF笔记
⭐️ 有向图模型和无向图模型分别作了哪些假设?HMM做了哪些独立性假设
HMM的假设:
-
齐次马尔可夫性假设:隐藏的马尔可夫链在任意时刻的状态只依赖于其前一时刻的状态,与其他时刻的状态和观测无关.
-
观测独立性假设:任意时刻的观测仅依赖于该时刻的马尔可夫链的状态,与其他状态以及观测无关.
CRF的假设:
- 给定观测变量x的条件下,状态变量Y构成马尔可夫随机场. 在线性链CRF中,“给定x时,y满足马尔可夫性”可以表示为:
P ( y i ∣ x , y 1 , . . . , y i − 1 , y i + 1 , . . . , y n ) = P ( y i ∣ x , y i − 1 , y i + 1 ) , i = 1 , 2 , ⋯ , n P(y_i | x, y_1, ..., y_{i-1},y_{i+1},...,y_n)=P(y_i | x, y_{i-1}, y_{i+1}),\quad i=1,2,\cdots,n P(yi∣x,y1,...,yi−1,yi+1,...,yn)=P(yi∣x,yi−1,yi+1),i=1,2,⋯,n
⭐️ HMM和CRF的关系和区别
[2] 条件随机场(CRF)和隐马尔科夫模型(HMM)最大区别在哪里
- 两者都用了前后向算法和维特比算法.
- HMM是生成式模型,对 P ( x , y ) P(x, y) P(x,y) 建模,CRF是判别式模型,对 P ( y ∣ x ) P(y|x) P(y∣x) 建模.
- HMM是有向图模型,CRF是无向图模型.
- HMM的独立性假设比较严格,导致其当前的标注结果只依赖于当前的单词,以及前一个标注结果。实际上序列标注问题不仅和单个词相关,而且和观察序列的长度,单词的上下文,等等相关。而CRF没有观测独立性假设,它的特征函数接受了整个观测序列,所以可以利用上句子中单词的长距离依赖的特性。
KNN
⭐️ KNN你了解过吗?给你一个场景:有10万个点,现在有一个用户点,怎么找离这个用户点最近的100个点。
⭐️ KNN里面,如果你要自定义metric(不用内置的欧氏距离,曼哈顿距离),而kd-tree只能用内置的metric,你怎么做?
⭐️ kd树的作用,kd树是怎么构建的?它的时间复杂度是多少?为什么kd树能够比较快的找到k近邻? 用在KNN的哪个步骤里?
PCA
⭐️ PCA原理和执行步骤
⭐️ 100万左右的高维数据,怎样处理才能更好的学习
PCA、随机采样、编码(encoder)
LDA
⭐️ 讲一讲LDA算法(线性判别分析)
EM
⭐️ EM算法推导
特征工程
⭐️ 特征工程有什么常用的方法
⭐️ 特征离散化
⭐️ 特征选择的方法
评价指标
⭐️ 评价指标
⭐️ F1值的计算公式