1.你熟悉LR的原理吗?能手动推导一下吗?
【是什么、能干什么、是怎么实现的】
LR是基础的分类算法,能用于二元分类或多元分类。线性回归Y=qX中Y 是连续的值,如果Y是离散的值的话可以方便地和类别对应起来,比如Y=1是一类,Y=-1是另一类。例如二分类场景下,我们可以让Y做一次变换,在一个取值区间内是一类,在另一个区间内是另一类。
那么如何进行函数变换呢?sigmoid函数。 当Y>0时,>0.5; 当Y<0时,<0.5。如果把的值看作属于某一类的概率值,便可以由该值判断出样本类别。
为什么选择sigmoid函数?不仅因为它能把连续变量变换成离散值,对应于分类当中的类别,而且因为它有一个优秀的导数性质。)
模型的损失函数是什么?如何推导出来的?用的什么方法?对对数似然函数取反得到的损失函数,之所以取反是因为想最小化损失函数,似然函数最大化才能求出参数q。
推导过程:假设y为二元分类结果,只能取1或0。首先求出y的概率分布函数:P(y|x,q)=hq(x)^y+(1-hq(x))^(1-y)。然后得到对数似然函数。什么是最大似然法?以观测值为出发点,找到一个最可能产生观测值的模型参数。
训练过程是什么样的?损失函数的优化方法有很多种,这里仅介绍梯度下降法。怎么求梯度?损失函数求导(矩阵形式更方便)怎么更新参数?q=q-步长*梯度
2.项目里用了哪些聚类算法?能对这些方法的原理做一个简单的介绍吗?使用中哪些参数比较重要?它们分别适合应用于什么场景?数据量非常大的情况下如何优化?
尝试使用了kmeans、BIRCH(层次)聚类、DBSCAN(密度)聚类、谱聚类等方法。
Kmeans是一种迭代式的聚类方法。思想是让簇内的点尽量紧密,簇间的点距离尽量大。优化思路:初始点的确定、优化距离计算、大数据量下挑选部分样本点做聚类(重复多次选择最优的聚类结果)。缺点是k值选取、非凸数据集难收敛、局部最优、噪音敏感。
BIRCH聚类是一种基于树结构的聚类。聚类的过程主要是建立CF Tree(聚类特征树)的过程。聚类特征树每个节点的结构?关键参数包括叶子节点的最大CF数,中间节点的最大cf数、叶节点每个CF的最大样本半径阈值、类别数(可选)。思路是向CFT中逐个添加样本,计算距离最近的叶节点,判断是否在最近叶节点的半径范围内,如果在:(1)加入后没有超过叶结点的cf参数,成功(2)否则,分裂叶结点成两个叶结点。新的叶结点的中心是旧的叶结点中离的最远的两个点。逐层往上检查中间节点的cf个数是否超出参数限制。如果不在:建立一个新的叶结点,逐层往上检查约束。当用户限定类别数k时,是将元组按距离大小合并为k簇,否则,类别数等于cf元组的数量。
优点:可以识别噪音点,速度快、节省内存(cft存放的是cf节点和对应的指针)缺点:对高维特征的数据聚类效果不好、非凸不好。
DBSCAN的思想是同一类别的样本点分布的密度较高。聚类的过程就由密度可达关系导出的最大密度相连的样本集为一类。关键参数包括e邻域、样本e邻域内的样本个数。过程是计算出所有的核心对象,选择一个未聚类的核心对象,对该点出发找其周边密度可达的核心对象及与他们密度相连的点作为一类。重复上述过程直到所有的核心对象都完成分类。
优点是可以非凸聚类、发现异常点、结果不受初始化影响。缺点是数据量较大时寻找最近邻算法需要优化、类内样本密度不均匀聚类效果差
3.聚类的评价指标有哪些?
Silhouette index(轮廓指数,简称SI)它测量每个模式中自身簇中的模式与其他最近簇中的模式相比的相似程度。
Duun index(邓恩指数,简称DVI):任意两簇类间最短距离与任意簇的类内最大距离之比
Davies-Bouldin index(戴维森堡丁指数,简称DB或DBI): DB为任意两个类别的类内距离平均距离之和与两聚类质心间距之比的最大值
参考:http://www.turingfinance.com/clustering-countries-real-gdp-growth-part2/#quality
4.你的项目中遇到的最大的困难是什么?如何解决的?
5.(挑一个项目)快手项目简单介绍一下?其中对数据的预处理流程是什么样的?怎么样提的特征?做了哪些特征工程?是不是只有一些统计特征?
注:这里仅仅是我之前的项目无太大的参考意义,读者可以根据自己的项目准备回答。
【问题+解决方案+效果】
比赛官方给了快手APP1个月内注册的用户及他们的日志行为,来预测这些用户这一个月之后的一周是否活跃。我们首先划分出线下的训练集和测试集,把该问题定性为有监督的二分类问题。通过挖掘出150多个相关的特征,用逻辑回归、决策树集成模型来训练。最后的预测结果的AUC指标为0.912,在两千多个队伍中获得了18名的成绩。
预处理流程:(1)先观察每天的注册量、僵尸用户的数量情况,分析数据是否存在噪声。(2)检查数据是否存在缺失值。
特征挖掘:
次数维度:在特征区间登录次数/几种行为的次数、倒数前几天每天的登录次数|倒数几天的登录次数加权求和(权重衰减)、给行为类别加权(不同的行为权重不同)访问不同页面的次数及比例(以此得到是否为博主及活跃度)、
用户拍摄的视频受到的反馈(类型加权)
时间维度:最后一次启动距离end_day的时间间隔、平均登录间隔
统计特征:均值、方差
其他:用户关注的博主相关特征(博主的更新视频次数、视频质量)
6.分别解释一下OnehotEncoding、标准化、归一化、连续特征离散化?
Onehot:用n位编码n个状态,每个状态只有一个有效位为1,其他位均为0,
归一化:将数据变换成0-1之间的小数,为什么要进行归一化?各个因素可能因为量纲的问题对模型有着大小不同的影响,但是这种大小不同的影响并非反应问题的本质。目的是为了消除不同数据之间的量纲,提高不同数据之间的可比性。
标准化:是一种统计的处理,基于正态分布的假设,将数据变换为均值为0、标准差为1的状态。
7.数据不平衡问题的解决方法?(数据方面:过采样和降采样 损失函数方面:增加数量少的样本的权重)
8.主要用了哪些模型进行训练?每个模型的结果如何?
LR(baseline)<RF<GBDT<XGboost相当lightGBM<rf<gbdt<xgboost相当lightgbm< span=""></rf<gbdt<xgboost相当lightgbm<>
9.决策树模型的分类?每一类中叶子节点的分裂依据是什么?为什么提出这种分裂方法?
①ID3\②C4.5\③CART
1信息增益 偏向取值多的特征、连续值不会处理、缺失值未考虑
2信息增益比 连续特征离散化、剪枝 多叉树效率低、对数运算耗时
3基尼系数 二叉树
停止递归生成的条件:叶子节点的分裂依据的值小于阈值时。
10.你说用到了RF、adaboost、GBDT、XGboost、lightGBM等模型,你能解释一下这几种模型的原理吗?它们之间的区别是怎样的?后者对前者做了什么优化?
随机森林由多个决策树构成,某个样本的最终分类结果由所有的决策树结果投票(或其他方式)决定。特点:两个维度的随机(有放回随机采样、随机选择部分特征,每次从这些特征中寻找最佳分割点)
Adaboost:损失函数为指数函数、模型为加法模型、学习算法为前向分布算法。(4个问题:1)如何计算学习误差率e? 2) 如何得到弱学习器权重系数α? 3)如何更新样本权重D? 4) 使用何种结合策略?)
GBDT的弱学习器限定了CART回归树,GBDT回归模型的误差比较好拟合,可是GBDT分类模型的输出是离散值,该如何衡量误差呢?不使用离散的类别可以用类别的预测概率值和真实概率值的差来拟合损失,损失函数可以选择指数损失和对数损失。
GBDT、XGboost之间的区别:(模型、损失函数、优化方法等角度)
1 损失函数的优化 前梯度下降法,一阶泰勒展开式;后牛顿法,二阶泰勒展开式 xgboost工具支持自定义代价函数,只要函数一阶和二阶求导。
2 正则项 XGBOOST中加入了正则项
3 对每颗子树增加一个参数,使得每颗子树的权重降低,防止过拟合,增加这个参数叫shrinkage方法。主要是为了削弱每棵树的影响,让后面有更大的学习空间。对特征进行降采样,支持列抽样,灵感来源于随机森林,除了能降低计算量外,还能防止过拟合。
4 为什么xgboost快?xgboost的并行是在特征粒度上的。我们知道,决策树的学习最耗时的一个步骤就是对特征的值进行排序(因为要确定最佳分割点),xgboost在训练之前,预先对数据进行了排序,然后保存为block结构,后面的迭代中重复地使用这个结构,大大减小计算量。这个block结构也使得并行成为了可能,在进行节点的分裂时,需要计算每个特征的增益,最终选增益最大的那个特征去做分裂,那么各个特征的增益计算就可以开多线程进行。
5 gbdt以cart树作为基分类器,xgb支持其他基分类器
6 对缺失值的处理。对于特征的值有缺失的样本,xgboost可以自动学习出它的分裂方向。
7 可并行的近似直方图算法。树节点在进行分裂时,我们需要计算每个特征的每个分割点对应的增益,即用贪心法枚举所有可能的分割点。当数据无法一次载入内存或者在分布式情况下,贪心算法效率就会变得很低,所以xgboost还提出了一种可并行的近似直方图算法,用于高效地生成候选的分割点。
11.回归的误差很好衡量,如何衡量分类误差?
12.Bagging和boosting的联系和区别?为什么gbdt会比rf精度更高?adaboost跟随机森林的区别?
联系:都是由一些弱学习器组成的
区别:bagging的弱学习器之间没有依赖关系,可以并行训练。boosting的弱学习器之间有依赖关系,每次迭代都是在之前的学习器的基础上学习一个新的弱学习器,来进一步减小误差。
Adaboost是基于boosting框架,随机森林是bagging框架。
13.随机森林、gbdt这些模型是怎么得出特征的重要性的?
GBDT:特征j的全局重要度通过特征j在单颗树中的重要度的平均值来衡量;随机森林:基于袋外得分permutation test(随机排序测试),即在计算第 i 个特征的重要性的时候,将N个样本的第 i 个特征重新洗牌。
14.为什么对决策树模型加权融合之后结果会提升?
15.随机森林在你的项目中怎么实现的?为什么随机森林比单棵决策树要好?能从数学角度解释下吗?
随机森林相对于单颗树来讲能够避免过拟合
16.决策树如何处理缺失值的?
首先理解缺失值的情况:第一种是确定了划分的特征,而某样本恰恰缺失了该特征值选择归属的子节点,第二种是某些样本的某个特征值缺失的情况下选择划分的特征值。
第一个问题,(兼顾)假如确定了划分的特征为A,该特征的值为{a1,a2,a3},那么可以将该样本划分到所有子节点中去,将该样本按照各个子节点样本数量的比例来分配。
第二个问题,(自顾)将样本分成两部分,计算出不缺失A特征的样本数量的比例,将不缺失A特征的样本进行正常的信息增益比(或者基尼系数)计算,计算后乘以该部分样本的比例系数。
17.知道SVM的原理吗?对偶过程是如何推导出来的?LR和SVM的区别?
18.偏差和方差的区别?如何平衡两者?
19.你对模型的评价指标了解多少?ROC\PRC的公式?AUC什么意思?
20.常用的损失函数有哪些?为什么选择这些损失函数?
铰链损失(Hinge Loss)
| |
|
:主要用于支持向量机 SVM中;
交叉熵损失(Cross Entropy Loss/Softmax Loss):用于逻辑回归问题;
| |
|
平方损失(Square Loss):用于最小二乘问题;
指数损失(Exponential Loss):主要用于Adaboost集成学习算法中;
| |
|
其他特定场景有奇效的loss
21.解释一下L1和L2正则化?如何推导?两者的联系和区别?
L1正则有稀疏特征的作用,l2没有
22.能推导出来SGD参数如何更新的吗?
23.你知道哪些降维算法,能挑其中的几种讲解一下吗?
【什么是降维+为什么要降维+降维的方法】
降维就是用数据最重要的维度去表示原来的数据。
降维一方面增加计算效率、另外能降低存储空间,
降维的方法包括主成分分析PCA、线性判别分析LDA,两者的区别:前者无监督、后者有监督
PCA:
解决的问题:从高维到低维表示,信息肯定会损失一部分,如何让损失最小化。
降维的标准:样本在超平面的投影尽可能地分开。怎么用数学语言描述?使所有样本的投影方差和最大。主要运算是特征值分解。
LDA:
降维的标准:投影后类内方差最小、类间方差最大。
24.深度学习了解吗?
25.了解NLP算法吗?HMM解决了什么问题?有哪些优缺点?
26.Word2vec详细讲一下?one-hot编码的优缺点?
27.什么是词嵌入?流程是怎样的?有什么优点?
【是什么+为什么要这么做+怎么得到的】
词嵌入就是用一个向量来表示单词,例如每个单词用10维的向量表示。
为什么不用one-hot这种编码而使用词嵌入?因为词嵌入有四大优点:首先,节省空间资源,同样100维的向量独热编码只能表示100个单词,而词嵌入技术可以表示2^100个单词。第二,词嵌入可以表达单词之间的意思相似度。第三,分布式表示是全局泛化,而独热是局部泛化。第四,W2v的前提是离的近的单词是相似的。
如何由给定的句子得到其中单词的向量表示呢?Cbow模型(由上下文推中心词)和skip-gram模型(由中心词推上下文单词)。
skip-gram模型的目标函数是什么?瓶颈?如何改进的?新目标函数?模型的优缺点?
原始目标函数是由条件概率推导出来的。用的softmax模型计算每个单词出现的概率,在计算过程中会计算所有单词两两之间的向量,导致计算效率很低。
28.整个词嵌入领域的框架是什么样的?
29.降采样是什么?为什么会进行降采样?是如何做的?
W2c中正负样本[注:正样本指出现过的单词对,负样本是没有出现过的单词对]不平衡,只有少数的单词对在语料中出现过,如何处理这种不平衡?降采样是为了降低计算的复杂度(哪个环节的负责度)采取的一种解决方案。
30.能详细说说推荐有哪些评价指标吗?你项目中用的什么能写出来吗?
31.基于用户的协同过滤、商品嵌入分别具体是怎么做的?为什么后者没有前者的效果好?
基于用户的协同过滤的原理是:假设A用户买了a1,a2,a3三件商品,给用户A推荐商品时,推荐同样买过a1,a2,a3的用户们[注:可以认为是兴趣相似的用户]买的其他商品。这里需要用到倒查表{商品:买过该商品的用户集},用来快速得到哪些用户买了某件商品。基于物品的协同过滤类似,被同一批用户购买的商品被认为是相似的。
网络方面:
1.七层架构都有哪七层?从浏览器输入URL的解析过程?
2.TCP\UDP的区别?
编程方面:
1.快排
2.很大的数组找第k大的数
3.层次遍历二叉树(循环实现和递归实现)
4.非递减序列,求K第一次出现的位置?
5.树的后续遍历?
6.小于N 的素数个数?
7.判断一个链表是否有环?并找入口
8.6个数字组成的最大时间。
面试遇到的非技术问题:
1.你动手实现过哪些模型代码?有没有对其中的模型做改进?
2.你平时都怎么学习的?
3.看过哪些书?专业书+课外书
4.你的期望薪资?
5.你觉得为什么自己值这个价?
6.你做的比赛比别人好在哪些地方?
全部评论
(0) 回帖