找实习以及面试期间机器学习基础总结

部分问题是其他大佬博主总结的,答案大部分是自己的理解,也有面试的时候遇到的问题,不定期更新

基本知识:

1)最小二乘法

最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。最小二乘法还可用于曲线拟合。其他一些优化问题也可通过最小化能量或最大化熵用最小二乘法来表达。


最小二乘法的原则是以“残差平方和最小”确定直线位置。用最小二乘法除了计算比较方便外,得到的估计量还具有优良特性。这种方法对异常值非常敏感。


2)深度学习中的激活函数,优缺点

 

3)深度学习中的梯度消失和梯度扩散

梯度消失:

梯度扩散:

4)相似度度量的方法

1. 欧氏距离

2. 曼哈顿距离

3. 切比雪夫距离

4. 闵可夫斯基距离

5. 标准化欧氏距离

6. 马氏距离

7. 夹角余弦

8. 汉明距离

9. 杰卡德距离 & 杰卡德相似系数

10. 相关系数 & 相关距离

11. 信息熵

5)过拟合的定义,原因,解决策略:http://blog.csdn.net/a819825294/article/details/51239686

方差与偏差的trade off  / 经验风险最小化和结构风险最小化的trade off

定义:(机器学习周志华)理想的模型是在新样本上能表现的很好的学习器,所以应该从训练样本中尽可能学习出适用于所有潜在样本的“普遍特征”,当学习器把训练样本学习的“太好”,很可能已经把训练样本自身的一些特点当作了所有潜在样本都会有的一些性质,这样就会导致泛化性能下降,也叫过拟合;欠拟合:指对训练样本的一般性质尚未学习好

产生的原因:

(1)     建模样本质量差:样本数量太少,噪声数据干扰过大,样本数据不能有效足够代表业务逻辑或业务场景;

(2)     模型选择错误

(3)     参数太多,模型复杂度太高

(4)     决策树:剪枝操作

(5)     神经网络:迭代次数太多

解决方案:

(1)     添加正则项。L1正则更加容易产生稀疏解、L2正则倾向于让参数w趋向于0

(2)     决策树:预剪枝:提前结束分裂;后剪枝:利用验证集剪枝

(3)     交叉验证

(4)     提前结束迭代训练,减少基学习器个数

(5)     ···

6)交叉验证

https://mp.weixin.qq.com/s?__biz=MzIzODExMDE5MA==&mid=400415610&idx=1&sn=381dd64fbdc7c130a6314fb65815d4e1#rd

7)监督与非监督区别:

监督学习训练数据是有标记的,例如回归,分类问题

半监督学习:监督学习与无监督学习相结合的一种学习方法。它主要考虑如何利用少量的标注样本和大量的未标注样本进行训练和分类的问题

无监督学习训练数据无标记,用于发现训练样本集中的结构性知识,例如聚类问题

8)L1L2区别

http://blog.csdn.net/jinping_shi/article/details/52433975

正则化方法:损失函数后面添加的额外项,用来惩罚模型的复杂度,通常是L1正则化和L2正则化,或者也叫L1范式,L2范式

L0正则化向量中非零元素的个数

L1 正则化模型参数绝对值之和对应的默认误差服从正太分布,参数服从拉普拉斯分布

L2 正则化模型参数的平方和对应的默认误差服从正太分布,参数服从高斯分布

线性回归中,使用L1正则化的模型叫Lasso回归,使用L2正则化的叫岭回归

L1正则化可以产生稀疏权值矩阵,即产生一个稀疏模型,稀疏模型指很多元素为0,表示特征对模型的贡献度,因此可以用于特征选择

L2正则化可以防止模型过拟合(overfitting);一定程度上,L1也可以防止过拟合;拟合过程中通常都倾向于让权值尽可能小,最后构造一个所有参数都比较小的模型。因为一般认为参数值小的模型比较简单,能适应不同的数据集,也在一定程度上避免了过拟合现象。可以设想一下对于一个线性回归方程,若参数很大,那么只要数据偏移一点点,就会对结果造成很大的影响;但如果参数足够小,数据偏移得多一点也不会对结果造成什么影响,专业一点的说法是『抗扰动能力强』

9)生成模型和判别模型区别

生成模型由数据学习联合概率分布,然后求出条件概率分布作为预测模型,例如:朴素贝叶斯,lda,隐马尔可夫模型

判别模型由数据直接学习决策函数或者条件概率分布作为预测的模型,例如:k邻近法,决策树,罗辑思特回归SVM

10)                 偏差bias和方差variance的概念

偏差:描述的是预测值(估计值)的期望与真实值之间的差距。偏差越大,越偏离真实数据

方差:方差针对的是科学采样的多个数据集训练的多个模型,多个模型的预测值的变化范围,离散程度,也就是离其期望值的距离。方差越大,数据的分布越分散

训练次数不足的时候,学习器的拟合能力不够强,训练数据的扰动不足以使学习器产生显著的变化,这个时候偏差主导了泛化错误率:偏差大,方差小,泛化错误率大,欠拟合

训练次数过多,训练数据的特异性被学习器拟合,方差逐渐主导泛化误差,偏差小,方差大,泛化误差大,过拟合

方差-偏差trade-off:减小泛化误差,泛化误差可以分解为方差+偏差+实际误差分布

11)                 如何解决机器学习中数据样本不平衡问题?http://www.cnblogs.com/zhaokui/p/5101301.html

1.        采样方法是通过对训练集进行处理使其从不平衡的数据集变成平衡的数据集,在大部分情况下会对最终的结果带来提升。

采样分为上采样(Oversampling)和下采样(Undersampling);上采样后的数据集中会反复出现一些样本,训练出来的模型会有一定的过拟合;而下采样的缺点显而易见,那就是最终的训练集丢失了数据,模型只学到了总体模式的一部分

2.        数据合成

3.        加权

12)                 查准率P,召回率R,F1,AUC

P:预测为正例的数据中,真正例的比例

R:所有实际正例中,预测为正例的比例

F1: 2*P*R/(P+R)

AUC:

13)                 SVM的核函数如何选择

n为特征数,m为训练样本数。

(1)如果相较于m而言,n要大许多,即训练集数据量不够支持我们训练一个复杂的非线性模型,我们选用逻辑回归模型或者不带核函数的支持向量机。

(2)如果n较小,而且m大小中等,例如n在 1-1000 之间,而m在10-10000 之间,使用高斯核函数的支持向量机。

(3)如果n较小,而m较大,例如n在1-1000之间,而m大于50000,则使用支持向量机会非常慢,解决方案是创造、增加更多的特征,然后使用逻辑回归或不带核函数的支持向量机。

14)                 SVM为什么适合处理高维特征

SVM引入核函数,用来计算两个向量在隐式映射过后的空间中的内积,核函数能简化映射空间中的内积运算,而且刚好“碰巧”的是,在我们的 SVM 里需要计算的地方数据向量总是以内积的形式出现的。于是就可以通过核函数计算两个向量在隐式映射过后的空间中的内积,就相当于在从底维输入空间映射到的高维特征空间中的内积计算。

应用核函数的展开定理,不需要知道非线性映射的显式表达式;由于是在高维特征空间中建立线性学习机,所以与线性模型相比不但几乎不增加计算的复杂性,而且在某种程度上避免了“维数灾”。这一切要归功于核的展开和计算理论。因此人们又称SVM方法为基于核的一种方法。核方法研究是比SVM更为广泛和深刻的研究领域。

15)                 SVM的MapReduce实现原理

16)                 决策树,CART

ID3使用信息增益来查找最好特征的和分割点

C4.5使用信息增益比来查找最好特征和分割点

CART做回归时用平方误差最小化(最小化均方差),分类时用基尼指数最小化准则

前剪枝

后剪枝:使用测试集,从底向上对非叶子结点考察,若去除刺节点能提高泛化性能,就剪枝

在tree ensemble中,参数对应了树的结构,以及每个叶子节点上面的预测分数

17)                 为什么LR需要归一化或者取对数,为什么LR把特征离散化后效果更好

 

18)                 xgboost相比传统gbdt有何不同?xgboost为什么快?xgboost如何支持并行?

l   传统GBDT以CART作为基分类器,xgboost还支持线性分类器,这个时候xgboost相当于带L1和L2正则化项的逻辑斯蒂回归(分类问题)或者线性回归(回归问题)。

l   传统GBDT在优化时只用到一阶导数信息,xgboost则对代价函数进行了二阶泰勒展开,同时用到了一阶和二阶导数。顺便提一下,xgboost工具支持自定义代价函数,只要函数可一阶和二阶求导。

l   xgboost在代价函数里加入了正则项,用于控制模型的复杂度。正则项里包含了树的叶子节点个数、每个叶子节点上输出的score的L2模的平方和。从Bias-variance tradeoff角度来讲,正则项降低了模型的variance,使学习出来的模型更加简单,防止过拟合,这也是xgboost优于传统GBDT的一个特性。

l   Shrinkage(缩减),相当于学习速率(xgboost中的eta)。xgboost在进行完一次迭代后,会将叶子节点的权重乘上该系数,主要是为了削弱每棵树的影响,让后面有更大的学习空间。实际应用中,一般把eta设置得小一点,然后迭代次数设置得大一点。(补充:传统GBDT的实现也有学习速率)

l   列抽样(columnsubsampling)。xgboost借鉴了随机森林的做法,支持列抽样,不仅能降低过拟合,还能减少计算,这也是xgboost异于传统gbdt的一个特性。

l   对缺失值的处理。对于特征的值有缺失的样本,xgboost可以自动学习出它的分裂方向。

l   xgboost工具支持并行。boosting不是一种串行的结构吗?怎么并行的?注意xgboost的并行不是tree粒度的并行,xgboost也是一次迭代完才能进行下一次迭代的(第t次迭代的代价函数里包含了前面t-1次迭代的预测值)。xgboost的并行是在特征粒度上的。我们知道,决策树的学习最耗时的一个步骤就是对特征的值进行排序(因为要确定最佳分割点),xgboost在训练之前,预先对数据进行了排序,然后保存为block结构,后面的迭代中重复地使用这个结构,大大减小计算量。这个block结构也使得并行成为了可能,在进行节点的分裂时,需要计算每个特征的增益,最终选增益最大的那个特征去做分裂,那么各个特征的增益计算就可以开多线程进行。

l   可并行的近似直方图算法。树节点在进行分裂时,我们需要计算每个特征的每个分割点对应的增益,即用贪心法枚举所有可能的分割点。当数据无法一次载入内存或者在分布式情况下,贪心算法效率就会变得很低,所以xgboost还提出了一种可并行的近似直方图算法,用于高效地生成候选的分割点。

 

TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降

 

 

Gradient Descent 是一种一阶优化方法,为什么这么说呢?因为它在迭代过程中不需要二阶及以上的信息。如果我们在泰勒展开时,不是一阶展开,而是二阶展开。那对应的方法就是另一个被大家所熟知的可微方程求解方法:Newton Method

 

加速迭代

为什么把特征组合之后还能提升,

反正这些基本都是增强了特征的表达能力,或者说更容易线性可分吧

 

正负样本不均衡问题:

通过观察loss function,正样本越多,正样本的权重越大

假设正负样本是1:1w,你关心的是正样本,直接学出来的模型可能就直接把样本全判别为负样本。但这显然不是你想要的结果

直觉是觉得保持1:1最好,或者说至少没坏处。那通常采用的方法就是up-sampling或者down-sampling,具体操作方法很简单,少的样本复制多份,或者多的样本只抽样一些。但我感觉前者容易过拟合,后者数据利用得又不够充分。难道咸鱼与熊掌就不可得兼?后来某大牛指点了一下,告诉我一个简单的trick:

用down-sampling,然后采样多次,训练多个模型,跟随机森林一样,求个平均即可

 

常用的距离度量方法:

欧氏距离

余弦距离

皮尔逊相关系数

 

伪代码实现:LR、梯度下降、最小二乘法、KNN、K-means;

 

算法的优缺点以及相应解决方案:k-means, KNN, apriori

 

算法原理:LR、KNN、k-means、apriori、ID3(C45,CART)、SVM、神经网络,协同过滤,em算法

 

常见问题:

 

1)svm算法的原理、如何组织训练数据、如何调节惩罚因子、如何防止过拟合、svm的泛化能力、增量学习

 

2)神经网络参数相关。比如,参数的范围?如何防止过拟合?隐藏层点的个数多了怎样少了怎样?什么情况下参数是负数?

 

3)为什么要用逻辑回归?

 

5) 朴素贝叶斯公式

 

6) 讲em算法

 

8)说一下SVM的实现和运用过程

 

9)谈谈DNN

 

10)简单说说决策树分析

 

11)推荐系统中基于svd方法

 

12)SVM有哪些优势,(x,y,z)三个特征如何用径向基核函数抽取第四维特征

 

13)userCF和ItemCF在实际当中如何使用,提供具体操作,以及它们的优势(推荐系统)

 

14)如何用Logic regression建立一个广告点击次数预测模型

 

15)举一个适合采用层次分析法的例子

 

17)关联分析中的极大频繁项集;FP增长算法

 

18)线性分类器与非线性分类器的区别及优劣

 

19)特征比数据量还大时,选择什么样的分类器

训练集数据量不够支持我们训练一个复杂的非线性模型,我们选用逻辑回归模型或者不带核函数的支持向量机

20)对于维度很高的特征,你是选择线性还是非线性分类器

 

21) 对于维度极低的特征,你是选择线性还是非线性分类器

 

22) 如何解决过拟合问题

 

24) 随机森林的学习过程

 

25) 随机森林中的每一棵树是如何学习的

 

26) 随机森林学习算法中CART树的基尼指数是什么

 

27)支持向量机、图模型、波尔茨曼机,内存压缩、红黑树、并行度

 

28) 如何搭建一个推荐平台,给出具体的想法,

29) 实现一个中文输入法

 

30) k-mean shift的机制,能不能用伪码实现

31)实现最小二乘法。

 

机器学习、大数据相关岗位的职责

•      平台搭建类

数据计算平台搭建,基础算法实现,当然,要求支持大样本量、高维度数据,所以可能还需要底层开发、并行计算、分布式计算等方面的知识;

•      算法研究类

文本挖掘,如领域知识图谱构建、垃圾短信过滤等;

推荐,广告推荐、APP推荐、题目推荐、新闻推荐等;

排序,搜索结果排序、广告排序等;

广告投放效果分析;

互联网信用评价;

图像识别、理解。

•      数据挖掘类

商业智能,如统计报表;

用户体验分析,预测流失用户。

以上是根据本人求职季有限的接触所做的总结。有的应用方向比较成熟,业界有足够的技术积累,比如搜索、推荐,也有的方向还有很多开放性问题等待探索,比如互联网金融、互联网教育。在面试的过程中,一方面要尽力向企业展现自己的能力,另一方面也是在增进对行业发展现状与未来趋势的理解,特别是可以从一些刚起步的企业和团队那里,了解到一些有价值的一手问题

以下首先介绍面试中遇到的一些真实问题,然后谈一谈答题和面试准备上的建议。

面试问题

1.你在研究/项目/实习经历中主要用过哪些机器学习/数据挖掘的算法?文本的贝叶斯分类回归的RFGBDTxgboostSVM 


2.你熟悉的机器学习/数据挖掘算法主要有哪些?基础的机器学习算法

3.你用过哪些机器学习/数据挖掘工具或框架? 
pythonpandasscikit-learn 


•      基础知识

SVM 的推导,特性?多分类怎么处理?

LR 的推导,特性?

决策树的特性?

SVMLR、决策树的对比?

GBDT 决策森林的区别?

如何判断函数凸或非凸?

解释对偶的概念。

如何进行特征选择?

为什么会产生过拟合,有哪些方法可以预防或克服过拟合?

介绍卷积神经网络,和 DBN有什么区别?

采用 EM算法求解的模型有哪些,为什么不用牛顿法或梯度下降法?

EM算法推导解释 K-means

用过哪些聚类算法,解释密度聚类算法。

聚类算法中的距离度量有哪些?

如何进行实体识别?

解释贝叶斯公式和朴素贝叶斯分类。

写一个 Hadoop 版本的 wordcount

•      开放问题

给你公司内部群组的聊天记录,怎样区分出主管和员工?

如何评估网站内容的真实性(针对代刷、作弊类)?

深度学习在推荐系统上可能有怎样的发挥?

路段平均车速反映了路况,在道路上布控采集车辆速度,如何对路况做出合理估计?采集数据中的异常值如何处理?

如何根据语料计算两个词词义的相似度?

在百度贴吧里发布 APP广告,问推荐策略?

如何判断自己实现的 LRKmeans算法是否正确?

100亿数字,怎么统计前100大的?

•      …… 


答题思路

•      用过什么算法?

最好是在项目/实习的大数据场景里用过,比如推荐里用过 CFLR,分类里用过 SVMGBDT

一般用法是什么,是不是自己实现的,有什么比较知名的实现,使用过程中踩过哪些坑

优缺点分析。

•      熟悉的算法有哪些?

基础算法要多说,其它算法要挑熟悉程度高的说,不光列举算法,也适当说说应用场合;

面试官和你的研究方向可能不匹配,不过在基础算法上你们还是有很多共同语言的,你说得太高大上可能效果并不好,一方面面试官还是要问基础的,另一方面一旦面试官突发奇想让你给他讲解高大上的内容,而你只是泛泛的了解,那就傻叉了。

•      用过哪些框架/算法包?

主流的分布式框架如 HadoopSparkGraphlabParameter Server 等择一或多使用了解;

通用算法包,如 mahoutscikitweka等;

专用算法包,如 OpenCVtheanotorch7ICTCLAS等。

•      基础知识

对知识进行结构化整理,比如撰写自己的 cheet sheet,我觉得面试是在有限时间内向面试官输出自己知识的过程,如果仅仅是在面试现场才开始调动知识、组织表达,总还是不如系统的梳理准备;

从面试官的角度多问自己一些问题,通过查找资料总结出全面的解答,比如如何预防或克服过拟合。

产生背景,适用场合(数据规模,特征维度,是否有 Online算法,离散/连续特征处理等角度);

原理推导(最大间隔,软间隔,对偶);

求解方法(随机梯度下降、拟牛顿法等优化算法);

优缺点,相关改进;

和其他基本方法的对比;

个人感觉高频话题是 SVMLR、决策树(决策森林)和聚类算法,要重点准备;

算法要从以下几个方面来掌握:

•      产生背景,适用场合(数据规模,特征维度,是否有 Online算法,离散/连续特征处理等角度);

•      原理推导(最大间隔,软间隔,对偶);

•      求解方法(随机梯度下降、拟牛顿法等优化算法);

•      优缺点,相关改进;

•      和其他基本方法的对比;

不能停留在能看懂的程度,还要:

•      对知识进行结构化整理,比如撰写自己的 cheet sheet,我觉得面试是在有限时间内向面试官输出自己知识的过程,如果仅仅是在面试现场才开始调动知识、组织表达,总还是不如系统的梳理准备;

•      从面试官的角度多问自己一些问题,通过查找资料总结出全面的解答,比如如何预防或克服过拟合。

•      开放问题

由于问题具有综合性和开放性,所以不仅仅考察对算法的了解,还需要足够的实战经验作基础;

先不要考虑完善性或可实现性,调动你的一切知识储备和经验储备去设计,有多少说多少,想到什么说什么,方案都是在你和面试官讨论的过程里逐步完善的,不过面试官有两种风格:引导你思考考虑不周之处 or指责你没有考虑到某些情况,遇到后者的话还请注意灵活调整答题策略;

和同学朋友开展讨论,可以从上一节列出的问题开始。

准备建议

1.基础算法复习两条线

◦                                       材料阅读 包括经典教材(比如 PRML,模式分类)、网上系列博客,系统梳理基础算法知识;

◦                                       面试反馈 面试过程中会让你发现自己的薄弱环节和知识盲区,把这些问题记录下来,在下一次面试前搞懂搞透

2.除算法知识,还应适当掌握一些系统架构方面的知识,可以从网上分享的阿里、京东、新浪微博等的架构介绍 PPT 入手,也可以从 HadoopSpark等的设计实现切入。

3.如果真的是以就业为导向就要在平时注意实战经验的积累,在科研项目、实习、比赛(Kaggle,阿里大数据竞赛等)中摸清算法特性、熟悉相关工具与模块的使用。

 

  • 7
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值