传统的机器学习算法:SVM,LR,softmax,决策树,随机森林,GBDT,xgboost,adaboost,bp神经网络、朴素贝叶斯这些都必须自己手推一次或者多次;
深度学习方面:CNN、RNN、LSTM、常用激活函数(tanh、relu等)、adam优化函数、梯度消失原理或者结构应该能手画出来。
nlp方面:强烈建议tf-idf、textrank、Word2vec、注意力机制、transformer都应该非常熟悉。
一、模型和算法篇(周六)
1)逻辑回归:
1. 手推LR,对并每一步进行解释,引入sigmoid,逻辑回归的公式,极大似然,求解参数时的梯度下降法;
2. 多分类问题怎么处理(ovr-??)
2)SVM
1. SVM的原理
2. SVM为什么采用间隔最大化?
当训练数据线性可分时,存在无穷个分离超平面可以将两类数据正确分开。利用间隔最大化求得最优分离超平面,这时解是唯一的。另一方面,此时的分隔超平面所产生的分类结果对未知实例的泛化能力最强。
3. SVM怎么处理过拟合?
解决的办法是为SVM引入松弛变量,在SVM公式中的目标函数加上松弛变量的平方和,并求最小值。这样就达到了一个平衡:既希望松弛变量存在以解决异常点问题,又不希望松弛变量太大导致分类解决太差。
4. SVM有哪些可以调节的参数?
C:惩罚系数,即对误差的宽容度,C越高,说明越不能容忍误差,容易过拟合。C越小,容易欠拟合,C过大或过小,泛化能力变差;
分类算法具有样本权重class_weight:指定样本各类别的权重,主要是为了防止训练集某些类别的样本过多,导致训练的决策过于偏向这些类别。这里可以自己指定各个样本的权重,或者用"balanced",如果使用"balanced",则算法会自己计算权重,样本量少的类别所对应的样本权重会高。当然,如果你的样本类别分布没有明显的偏倚,则可以不管这个参数,选择默认的“None”;
正则化参数penalty:仅仅对线性拟合有意义,可以选择L1或L2,默认是L2正则化。如果我们需要产生稀疏化的系数的时候,用L1
5. 常用的SVM核函数,什么是核函数,为什么要用核函数,核函数怎么选择?
常用核函数有:
a. 线性核函数:没有专门需要设置的参数;
b. 多项式核函数:有三个参数。-d用来设置最高次项次数,默认值是3。-g用来设置核函数中的gamma参数,也是公式中的gamma,默认值是1/k。-r用来设置核函数中的coef0,也就是公式中的第二个r,默认值是0。
c. RBF(高斯)核函数:有一个参数,-g用来设置很函数中的gamma参数设置,也就是公式中的gamma,默认值是1/k(K是特征数);
d. sigmoid核函数:有两个参数,-g用来设置gamma,-r用来设置核函数中的coef0,也就是公式中的第二个r,默认值是0.
gamma的物理意义:
核函数主要从训练集样本、特征量上进行考虑。
6. SVM和LR的异同点:
相同点:
1)如果不考虑核函数,都是线性分类器,本质上都是求一个最佳分类超平面;
2)都是监督学习算法;
3)都是判别模型:判别模型会生成一个表示P的判别函数,而生成模型先计算联合概率P,然后通过贝叶斯公式转化为条件概率。简单说,在计算判别模型时,不会计算联合概率,而在计算生成模型时,必须先计算联合概率。
不同点:
1)loss function不同:LR基于概率理论,通过极大似然估计的方法估计出参数的值;SVM基于几何间隔最大化原理,认为存在最大几何间隔的分类面为最优分类面;
2)SVM只考虑局部的边界线附近的点,而LR考虑全局(远离的点对边界线的确定也起作用)
3)在解决非线性问题时,SVM采用核函数的机制,而LR通常不采用核函数的方法;
4)线性SVM依赖数据表达的距离测度,所以需要对数据做normalization,而LR不受其影响;
5)SVM的损失函数自带正则(损失函数中的1/2||w||^2项),这就是为什么SVM是结构风险最小化算法的原因。而LR必须另外在损失函数上添加正则项。
7. 如何使用SVM处理多分类问题?
两种办法:
OvR(one vs rest):
OvO(one-vs-one):
8. SVM损失函数;
9. SVM软间隔和硬间隔
10. 为什么SVM对缺失数据敏感?
这里说的缺失数据是指缺失某些特征数据,向量数据不完整。SVM没有处理缺失值的策略(决策树有)。而SVM希望样本在特征空间中线性可分,所以特征空间的好坏对SVM的性能很重要,缺失特征数据将影响训练结果的好坏。
3)树模型
0.决策树怎么剪枝?
1. GBDT与xgboost的区别:
改进之处:
1)显式地将树模型的复杂度作为正则项加入了损失函数中;
2)公式推导里用到了二阶导数,而GBDT只用到一阶;
3)使用了column(feature) sampling来防止过拟合,借鉴了RF的思想;
4)data事先排好序并以block的形式存储,利于并行计算;
5)GBDT以CART树作为基分类器,而xgboost还支持线性分类器;
6)shrinkage(缩减),相当于学习率(xgboost中的eta)。xgboost在进行完一次迭代后,会将叶子节点的权重乘上该系数,主要是为了削弱每棵树的影响,让后面有更大的学习空间。实际应用中,一般把eta设置的小一点,然后迭代次数设置得大一点。
2. XGBoost如何解决缺失值问题
xgboost把缺失值当做稀疏矩阵来对待,本身在节点分裂时不考虑缺失值的数值。缺失值数据会被分到左子树和右子树分别计算损失,选择较优的那一个。如果训练中没有数据缺失,预测时出现了数据缺失,那么默认被分类到右子树。
3. XGBoost中的树剪枝
4.误差分析(bagging是为了降低偏差,所以RF中决策树用较深的,boosting为了降低方差,所以GBDT中决策树用较浅的)
5. 泰勒公式XGBoost中为什么没有三阶导数(因为泰勒展开最高二阶,高阶都是零)
6. bagging和boosting的区别:这个具体化就是RF和GBDT的区别:a.样本选择方式 b.样例权重 c.预测函数 d. 并行计算
7. xgboost多分类,参数怎么设置:multi:softmax
数据不平衡的时候,xgboost可以直接训练吗?会不会有影响:会有影响,需要做采样,
讲一下xgboost的推导,大概讲讲就好;
8.
4)神经网络
1. RNN原理
2.交叉熵与softmax;
3. 神经网络处理过拟合的方法
5)集成学习
1.有哪几种方式
6)其他
1. 分类和聚类的区别
2. KNN与K-means的区别;
3. 特征选择: Filter、Wrapper、Enbedded
4. L1正则和L2正则的区别
5. 样本不均衡问题:负例采样、smote算法怎么做;
6.什么情况会导致过拟合?
7. 有序数据和无序数据的处理
二、数据结构与算法篇(周日上午)
1. 冒泡排序算法(排序算法)、手写快排,讲原理,最好、最坏时间复杂度、空间复杂度
2 写一个快排,说一下快排主要快哉哪里:快在它的思想是分而治之的思想,其实东西都是这个思想,例如分布式、hadoop等。
3. 手写二分查找算法(查找算法)
三、大数据篇(周日晚上)
1. 说说hadoop的原理:大数据这块的东西还是好好看一下,因为现在搞算法,搞机器学习、深度学习都是在大数据的背景下的,所以这以后是一个基本的技能,面试官问的也比较多。
hadoop的原理就是分而治之
map-reduce是干什么:
2. 有一个1T大小的每行只有一个词汇的文本,怎么统计词的个数
这个问题其实就是考察大数据处理中map-reduce的原理了,原理很简单,就是“分———合”的思想,就是对HDFS上的资源进行分片,map阶段将数据分成key-value对,然后在reduce阶段再对key对应的value进行计数。这样就统计出了词的个数。
四、NLP篇
1. word2vec和glove的区别,
2. 模型输入是只有word2vec吗?用别人训练好的word2vec来训练你的模型有没有影响?
3. 了解过transformer吗
4. 你觉得bert的优点是什么,说一说transformer、rnn、cnn这些模型的优缺点,比较一下这三种特征抽取器;
5.