机器学习之旅个人收藏机器学习与数据挖掘

总结:常见算法工程师面试题目整理(二)

2017-09-06  本文已影响2619人  slade_sal

接着上回写的《总结:常见算法工程师面试题目整理(1)》,继续填接下来的坑。

11.boost算法的思路是什么样的?讲一下你对adaboost 和 gbdt的了解?

答:
boost的核心思想不同于bagging,它在基于样本预测结果对照与真实值得差距,进行修正,再预测再修正,逐步靠近正确值。

我对adaboost和gbdt了解的也不算很全面:大概的梳理如下:
不足:
1.adaboost存在异常点敏感的问题
2.gbdt一定程度上优化了adaboost异常点敏感的问题,但是存在难以并行的缺点
3.两者的目标都是优化bias,必然导致训练出来的数据var的不稳定

亮点:
1.发现非线性的特征关系,网格化的切分feature
2.拟合的效果相较于其他分类器更加精准,且训练参数较少

Adaboost:

adaboost初始数据权重都是1/M,然后通过训练每一个弱分类器Classifier使得在每一次y_pred误差最小,得到每一个弱Classifier的权重方法对:(αi,yi)然后提高错分了的数据的权重,降低正确分类的数据权重,循环训练,最后组合最后若干次的训练弱Classifier对,得到强分类器。
其中,αi由误差决定:

该弱分类器分类错误率em越大,则该若分类器作用越小。
1.剖析了原理之后,我们发现,这样做对异常点非常敏感,异常点非常容易错分,会影响后续若干个弱分类器
gbdt:

gbdt的核心在于下面这个公式:



L(y,y_pred):预测值与实际值间的误差
F(x):前若干个弱分类器的组合
关键的在于当前预测结果=对前若干个弱分类器+当前弱分类器修正,所以对前若干个分类器组合求偏导的方向进行梯度处理,保证L(x)出来的值最小。
这边结果在于你选取什么样的误差函数:


Loss即为损失函数,Derivative即为导数
除此之外,在每一步弱分类器构建的同时,它还考虑了正则化:
Ω=入T+μ*linalg.norm(f(xi))
T为子叶节点数目,同时也对预测结果得分的值进行了l1或者l2压缩,避免过拟合。

我个人更喜欢用xgboost,在求解速度上,对异常值处理上面都要比gbdt要快,而且基于R、python版本都有package。

12.听说你做过用户关系,你用的什么方法?社群算法有了解,讲讲什么叫做Modularity Q?

1.我用的是Jaccard相关。
比如,用户1一共收过150个红包,发了100个红包,其中20个被用户2抢过
用户2一共收过100个红包,发了50个红包,其中30个被用户1抢过
similarity(user1=>user2)=(30+20)/(150+100)
similarity(user2=>user1)=(30+20)/(50+100)
similarity(user2=>user1)=(30+20+30+20)/(150+100+50+100)

2.社区算法主要是用来衡量用户关系网中,不同用户、链接、信息之间的相似程度。
本来这边我准备讲pagerank的,结果被打断了,说需要讲内部结构相关的,其实我觉得PageRank这边来描述更加合适。不过,无所谓,我这边谈的是一个很基本的叫做:Kernighan-Lin算法(后面简称了KL算法)
KL算法中,先随机切分原数据集群,得到不同社区集,随机交换不同社区集内的不同点,观察优化值得变化程度是否为正向,循环即可。


共需执行次数:循环次数x集群A内点的个数x集群B内点的个数

感觉这边答的不行,被嫌弃了,有知道的大神可以自行去研究一下相关的社区算法,我这边只了解PageRank和LK。

3.Q-modularity:


这个简单,E:关系点连接线之间的个数,I:关系点连接线两端都在社群内的数量,O:关系点连接线有至少一端在社群外的连接线的数量

这个指标是用来衡量社群划分的稳定性的,讲真我也没用过,只是在周志华的算法的书上看过。

13.如果让你设计一套推荐算法,请说出你的思路?


讲真,这个点,我起码说了有25分种,对面的面试管也很耐心的听完了,并且还给予了很多点的反馈,个人觉得非常受到尊重,我下面细节梳理一下。
首先,我个人非常赞同阿里现在的推荐算法这边的设计思路:
推荐=人+场景+物
其中,
人=新用户+老用户+综合特征+...
场景=属性偏好+周期属性+黏度偏好+...
物=相关性+物品价值+特殊属性+...
接下来,我简单的剖析三个最常见也最重要的问题:

最上方的橙黄色的横条中,橙色代表原始的目标用户,黄色代表非目标用户,假设我们知道黑色方框所框选的用户的转化率达到最小置信度的时候,我们可以通过特征映射、非线性分解、用户画像刻画等不同方法得到左右完全不同的新的用户分布,在同样的用户框选占比下,效果也是完全不同的。
真实推荐中,比如针对用户冬装推荐,我不仅仅以用户近期的搜索、浏览、购买商品等行为判断用户的偏好,我也根据他夏天的购买风格款式、他的年龄、生理性别、浏览性别等综合判断他可能会买什么。推荐算法才不会是冷漠的。

至于想要了解具体实现算法及创新的一些想法可以看上方的脑图,但是我觉得那并不是最重要。

14.什么是P、NP、NP-Hard、NP-Complete问题?

P:很快可以得出解的问题
NP:一定有解,但可很快速验证答案的问题

后面两个我没答出来,网上搜了下,分享下:
NP-Hard:比所有的NP问题都难的问题
NP-Complete:满足两点:

  1. 是NP-Hard的问题
  2. 是NP问题

个人不喜欢这种问题。

15.常见的防止过拟合的方法是什么?为什么l1、l2正则会防止过拟合?

当被问了第一个问题的时候,我愣了下,因为我觉得挺简单的,为什么要问这个,我感觉接下来有坑。
我回答的是:
先甩出了下面的图解释了一波欠拟合、正常、过拟合:



然后举了几个例子:

当问到为什么的时候,我觉得自己回答的不好,有点蛋疼:
我说的是,l1以:


l2以:

l1中函数与约束点偏向相切于四个端点,端点处压缩了某个特征=0;l2中函数与约束点偏向相切于圆,会造成某些特征值压缩的接近于0;
根据奥卡姆剃刀原理,当两个假说具有完全相同的解释力和预测力时,我们以那个较为简单的假说作为讨论依据,而通常过拟合的模型的特征维度过高过多,所以一定程度可以缓解过拟合。

面试管以一种奇怪的眼神看着我,然后表示他其实想让我通过先验概率解释,不过我这样说仿佛也有道理。我回来之后就研究了一下,比如l2,大致如下:
首先,我们确定两点:
l2,其实就给了系数w一个期望是0,协方差矩阵是 1/alpha的先验分布。l1对应的是Laplace先验。

我们相当于是给模型参数w设置一个协方差为1/alpha 的零均值高斯分布先验。



根据贝叶斯定律:


这一步我没看懂,我计算了半天也没由最大似然估计算出下面这个式子,有会的朋友可以私信我一下。

有了上面的式子就很简单了,alpha在0-正无穷之间,如果a接近0的话,左侧及为正常的MSE也就是没有做任何的惩罚。如果alpha越大的话,说明预测值越接近真实值的同时,协方差也控制的很小,模型越平稳,Var也越小,所以整体的模型更加有效,避免了过拟合导致训练数据拟合效果很差的问题。

到这里,我觉得常见的算法题目都讲完了,很多简单的知识点我没有提,上面这些算是比较经典的,我没答出来的,希望对大家有所帮助,最后谢谢大家的阅读。

上一篇下一篇

猜你喜欢

热点阅读