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

接着上回写的《总结:常见算法工程师面试题目整理(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分种,对面的面试管也很耐心的听完了,并且还给予了很多点的反馈,个人觉得非常受到尊重,我下面细节梳理一下。
首先,我个人非常赞同阿里现在的推荐算法这边的设计思路:
推荐=人+场景+物
其中,
人=新用户+老用户+综合特征+...
场景=属性偏好+周期属性+黏度偏好+...
物=相关性+物品价值+特殊属性+...
接下来,我简单的剖析三个最常见也最重要的问题:

  • 冷启动
    很多人有一种错觉,只要业务上线时间长了就不存在所谓的冷启动问题,实则不是,新用户是持续进入的、流失用户也是在增长的、很多盲目用户(没有有价值行为)等等都可以归纳为冷启动问题,这类问题的核心在于你可用的数据很少,甚至没有,我这边采取的是热门推荐的方法。
    然而在热门推荐的算法中,我这边推荐一些方法:
    威尔逊区间法:综合考虑总的行为用户中,支持率与支持总数的平衡
    hacker new排序:综合考虑时间对支持率的影响
    pagerank排序:考虑用户流向下的页面权重排序
    梯度效率排序:考虑商品增速下的支持率的影响
    ...
    方法很多,但是核心的一点是热门推荐是冷启动及实时推荐必不可少的一环,优化好实时推荐的算法是占到一个好的推荐算法的30%以上的权重的,切忌0推荐
  • 不同种算法产生的推荐内容互不冲突


    这个是苏宁易购的首页推荐位,1、2、3分别是三个推荐位,我们在做算法的时候常常会特别注意,不能用太多相关性比较高的变量,会产生共线性,但在推荐内容上,“58同城”的算法推荐团队之前有一份研究证明,同一个页面上由不同算法产出的推荐结果不存在相互影响。
    所以,我非常赞同不同的算法产出不同的结果同时展示,因为我们不知道对目标用户是概率模型、距离模型、线性模型等不同模型中哪个产出的结果更加合适。
    关于常用的推荐算法,我之前梳理过,这边也不再多加重复,需要仔细研究的可看我上面的图,或者看我之前的文章:《深度学习下的电商商品推荐》、《偏RSVD及扩展的矩阵分解方法》等等

  • 你的对象是用户,不是冰冷的数字
    我在苏宁呆的时间不长,但是我有个感觉,身边算法工程师很容易把自己陷入数字陷阱,近乎疯狂去用各种算法去拟合当前的用户数据,以求得得到高的ctr或者转化率。
    不同的推荐场景需要使用不同的用户行为。举例假设存在经典的关系:买了炸鸡和番茄酱的用户,接下来的一周有35%的用户会来买汽水。所以,很多工程师会选择只要买了炸鸡和番茄酱的用户,就弹窗汽水,因为就35%的百分比而言,是非常高的支持度了。其实只要有用户画像的支持就会发现,这35%的用户中,80%的都是年龄在青少年,如果在推送之前做一个简单的逻辑判断只针对所有青少年进行推送汽水的话,35%轻而易举的上升到了70%,这是任何算都无法比拟的。


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

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

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

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

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

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

个人不喜欢这种问题。

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

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



然后举了几个例子:

  • 针对error递归的问题,l1,l2正则化
  • 扩充数据量,使得数据更加符合真实分布
  • bagging等算法技巧

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


l2以:

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

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

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



根据贝叶斯定律:


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

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

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


欢迎大家关注我的个人bolg,更多代码内容欢迎follow我的个人Github,如果有任何算法、代码疑问都欢迎通过公众号发消息给我哦。

少年,扫一下嘛

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容