面试提问之请你介绍一下xxx方法
写在前面:相关模型的具体介绍请阅读我的另一篇博客机器学习算法岗面试与提问总结
1.请你介绍一下逻辑回归模型LR
LR(Logistic Regression)虽然是回归模型,但却是经典的分类方法。 对比一下SVM,在二分类问题中,如果你问SVM,它只会回答你该样本是正类还是负类;而你如果问LR,它则会回答你该样本是正类的概率是多少。LR分类器目的就是从训练数据特征学习出一个0/1分类模型,这个模型以样本特征的线性组合作为自变量,使用logistic函数将自变量映射到(0,1)上。因此LR分类器的求解就是求解一组权值。
2.请你介绍一下SVM
支持向量机(supportvector machine ,SVM)是一种二类分类模型.它的基本模型是定义在特征空间上的能够正确划分训练数据集并且几何间隔最大的线性分类器。支持向量机还包括核技巧,这使它成为实质上的非线性分类器。支持向量机的学习策略就是间隔最大化,可形式化为一个求解凸二次规划的问题,也等价于正则化的合页损失函数的最小化问题,支持向量机的学习算法是求解凸二次规划的最优化算法。
3.请你介绍一下决策树
决策树顾名思义它是一个树状结构的东西,通俗理解其实就是一套if else 规则,常用于分类,一个样本进来,经过层层if else规则之后最终落到哪个叶子节点,就属于该节点所在的类别。决策树的由特征选择、树的生成、树的剪枝三步组成。常见的决策树算法有ID3,C4.5,CART。
4.请你介绍一下GBDT
GBDT全称是梯度提升决策树,是监督学习中,一种常见的集成树模型,可以用于处理分类和回归问题。其中,梯度提升(一种基于函数梯度信息的Boosting方法,在每一轮迭代时,我们生成一个基学习器,基学习器的拟合目标是当前模型Loss的负梯度)是Boosting家族中的一种优化算法,GBDT使用的是CART回归树作为基学习器。
5.请你介绍一下XGBoost
Xgboost是梯度提升(Gradient Boosting)算法的高效实现,xgboost中的基学习器除了可以是CART(gbtree)也可以是线性分类器(gblinear)。XGBoost对GBDT进行了一系列优化,比如损失函数进行了二阶泰勒展开、目标函数加入正则项、支持并行和默认缺失值处理等,在可扩展性和训练速度上有了巨大的提升,但其核心思想没有大的变化。
为什么比赛用XGBoost?
答:XGBoost本质上是梯度提升算法的高效实现。梯度提升其实就是在迭代地生成一系列基学习器,每一轮迭代生成的基学习器都是去拟合当前模型损失函数的负梯度。XGBoost在梯度提升决策树模型上进行了很多的改进:比如损失函数进行了二阶泰勒展开、目标函数加入正则项、支持并行和默认缺失值处理等,在可扩展性和训练速度上有了巨大的提升,因此在比赛中表现非常好,不仅如此,它在工业界也很受青睐。
6.请你介绍一下LightGBM
LightGBM (Light Gradient Boosting Machine)包含两个关键点:light即轻量级,GBM 梯度提升机。LightGBM 是一个梯度 boosting 框架,使用基于学习算法的决策树。它可以说是分布式的,支持高效率的并行训练,并且具有以下优点:更快的训练速度、更低的内存消耗、更好的准确率、分布式支持,可以快速处理海量数据。
7.请你介绍一下朴素贝叶斯
对于给定的待分类项x,通过学习到的模型计算后验概率分布,即:在此项出现的条件下各个目标类别出现的概率,将后验概率最大的类作为x所属的类别。后验概率根据贝叶斯定理计算。关键:为避免贝叶斯定理求解时面临的组合爆炸、样本稀疏问题,引入了条件独立性假设。用于分类的特征在类确定的条件下都是条件独立的(朴素)。
8.请你介绍一下K-means
K-means算法是很典型的基于距离的聚类算法。对给定的无标记的样本数据集,事先确定聚类簇数K,采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大。该算法认为簇是由距离靠近的对象组成的,因此把得到紧凑且独立的簇作为最终目标。k-means算法特点在于:同一聚类的簇内的对象相似度较高;而不同聚类的簇内的对象相似度较小。
9.请你介绍一下KNN
KNN算法利用训练数据集对特征向量空间进行划分。KNN算法的核心思想是在一个含未知样本的空间,可以根据样本最近的k个样本的数据类型来确定未知样本的数据类型。
10.请你介绍一下什么是机器学习
从广义上来说,机器学习是一种能够赋予机器学习的能力以此让它完成直接编程无法完成的功能的方法。但从实践的意义上来说,机器学习是一种通过利用数据,训练出模型,然后使用模型预测的一种方法。
11.请你介绍一下什么是深度学习
深度学习(DeepLearning,DL)属于机器学习的子类。它的灵感来源于人类大脑的工作方式,是利用深度神经网络来解决特征表达的一种学习过程。深度神经网络本身并非是一个全新的概念,可理解为包含多个隐含层的神经网络结构。为了提高深层神经网络的训练效果,人们对神经元的连接方法以及激活函数等方面做出了调整。其目的在于建立、模拟人脑进行分析学习的神经网络,模仿人脑的机制来解释数据,如文本、图像、声音。
12.请你介绍一下什么是神经网络
神经网络是一种计算模型,由大量的节点(或神经元)直接相互关联而构成;每个节点(除输入节点外)代表一种特定的输出函数(或者认为是运算),称为激励函数;每两个节点的连接都代表该信号在传输中所占的比重(即认为该节点的“记忆值”被传递下去的比重),称为权重;网络的输出由于激励函数和权重的不同而不同,是对于某种函数的逼近或是对映射关系的近似描述;
13.请你介绍一下什么是GCN
图卷积网络可以处理不具备规则的空间结构,如,推荐系统、电子交易、分子结构等抽象出来的图谱问题。通过利用滤波器(filter)抽取出图中节点及其邻节点的特征,发现节点之间的高阶相似性。输入包括:
- 每一个节点 i 的特征描述xi,可以写成一个N*D的特征矩阵(N表示节点数,D表示输入的特征数)
- 矩阵形式的图结构的特征描述,通常是以邻接矩阵的形式(或者其他的形式)
模型会产生一个节点级别的输出Z(一个N*F的特征矩阵,其中F表示每一个节点的输出特征数)。
图卷积的核心思想是利用『边的信息』对『节点信息』进行『聚合』从而生成新的『节点表示』
14.请你介绍一下什么是GAN
GAN 有两个网络,一个是 generator,一个是 discriminator,从二人零和博弈中受启发,通过两个网络互相对抗来达到最好的生成效果。首先,有一个一代的 generator,它能生成一些很差的图片,然后有一个一代的 discriminator,它能准确的把生成的图片,和真实的图片分类,简而言之,这个 discriminator 就是一个二分类器,对生成的图片输出 0,对真实的图片输出 1。接着,开始训练出二代的 generator,它能生成稍好一点的图片,能够让一代的 discriminator 认为这些生成的图片是真实的图片。然后会训练出一个二代的 discriminator,它能准确的识别出真实的图片,和二代 generator 生成的图片。以此类推,会有三代,四代......n 代的 generator 和 discriminator,最后 discriminator 无法分辨生成的图片和真实图片,这个网络就拟合了。
附:机器学习各个算法的应用场景
EM,是一种含有隐含变量的概率模型参数的极大似然估计法。主要应用在机器学习以及计算机视觉的数据聚类领域。
LR,逻辑回归,本质也是线性回归,通过拟合拟合样本的某个曲线,然后使用逻辑函数进行区间缩放,但是一般用来分类,主要用在点击率预估、推荐系统等;
SVM,支持向量机,通过找到样本空间中的一个超平面,实现样本的分类,也可以作回归,主要用在文本分类,图像识别等领域;
NN,神经网络,通过找到某种非线性模型拟合数据,主要用在图像处理等;
NB,朴素贝叶斯,通过找到样本所属于的联合分布,然后通过贝叶斯公式,计算样本的后验概率,从而进行分类,主要用来文本分类,电子邮件垃圾过滤、新闻分类;
DT,决策树,构建一棵树,在节点按照某种规则(一般使用信息熵)来进行样本划分,实质是在样本空间进行块状的划分,主要用来分类,也有做回归,但更多的是作为弱分类器,用在model embedding中;
RF,随机森林,是由许多决策树构成的森林,每个森林中训练的样本是从整体样本中抽样得到,每个节点需要进行划分的特征也是抽样得到,这样子就使得每棵树都具有独特领域的知识,从而有更好的泛化能力;
GBDT,梯度提升决策树,实际上也是由多棵树构成,和rf不同的是,每棵树训练样本是上一棵树的残差,这体现了梯度的思想,同时最后的结构是用这所有的树进行组合或者投票得出,主要用在推荐、相关性等;
KNN,k最近邻,对于未知标签的样本,看与它最近的k个样本(使用某种距离公式,马氏距离或者欧式距离)中哪种标签最多,它就属于这类;
朴素贝叶斯(Naive Bayes)法是基于贝叶斯定理与特征条件独立假设的分类方法,对于给定的训练数据集,首先基于特征条件独立假设学习输入/输出的联合概率分布;然后基于此模型,对给定的输入x,利用贝叶斯定理求出后验概率最大的输出y。对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,就认为此待分类项属于哪个类别。
常见问题总结
- lightgbm, xgboost RF和GBDT的异同(为什么比赛选手青睐这些算法而不是其他经典机器学习算法?)
- svm损失函数推导
- 朴素贝叶斯公式推导与实现
- 处理不平衡常用方法
- 卷积层相比FC层有哪些优势?
- 非线性分类算法有哪些
- 如何判断一个算法是线性的还是非线性的?
- stacking/boosting/bagging的区别
- 手动实现堆排序
- 求AUC
- L1和L2的区别
- 实现快排
- LR的实现,优点,如何并行,特征有共线性会怎么样? 14.pca和lda
- 常见激活函数的优缺点 16.从方差和偏差的角度比较bagging和boosting
- 经验风险、期望风险、结构风险
- 分层采样和蓄水池采样,O(N)的洗牌算法
- SVM与LR的区别
- 一阶优化器,二阶优化器
- 手写kmeans
- BN/LN/WN的区别
- 实际场景下做softmax容易出现一些问题,怎么解决
- 扔鸡蛋问题(了解到O(kn)的做法即可)
- 进程和线程的区别
- Python/C++多线程,多进程如何使用
- Python迭代器,装饰器
- Bootstrap抽样
- 特征选择方法
- 野指针是什么意思
- 64匹马,八个赛道,找出最快的四匹,最坏情况下最少要比多少次(更常见的是25匹马,5个赛道找出最快的3匹)。
- 12个小球,其中有一个与其他的重量不一样,给你一个天平,最坏情况下最少称多少次可以找出重量不同的小球。
- 1000杯水中有一瓶是毒药,小老鼠喝一滴一小时就会死,给你10只小老鼠,在一小时内找出这瓶水 。
- P-R曲线和ROC曲线的区别
- 什么是凸问题?
- 常见的凸优化方法?
- CNN/RNN/LSTM的原理
- 从方差,偏差,噪声的角度解释泛化误差
- 特征工程相关。比如如何处理类别特征?onehot,tfidf会出现什么问题之类。
- 词嵌入embedding相关知识(主要是word2vector)
- 梯度爆炸/梯度消失
- 池化层,卷积层的作用
- dropout(训练和测试阶段分别如何处理)
- MLE,MAP和贝叶斯估计的区别
- DNN反向传播的推导
- LR为什么用交叉熵而不是MSE?
- 为什么LR权重可以全部初始化为0,NN不行
- 常见的几个聚类算法
- 异常检测/推荐基本方法(这个视部门业务而定)
- 判别式模型和生成式模型