京东广告部(推荐算法一面)
问题1:逻辑回归(LR)怎么做多分类?
LR做多分类有两种思路:
第一种思路是One vs All的思想,假设有
K
K
K个类别,这时需要同时训练
K
K
K个分类器,在第一个分类器
K
1
K_1
K1中训练时,将类别为
K
1
K_1
K1的样本标签设置为1,其余样本标签设置成0,每个样本在预测时都要用
K
K
K个分类器预测一遍,那个分类器得到的概率大,则样本属于哪个类别;
缺点:很容易造成训练样本数量的不平衡,尤其在类别较多的情况下,经常容易出现正类样本的数量远远不及负类样本的数量,会造成分类器的偏向性
第二种思路是可以采用softmax作为映射函数,实现softmax多分类。softmax多分类回归是逻辑回归的一种数学拓展。Softmax回归适合处理一个样本尽可能属于一种类别的多分类问题。
问题2:说几个Python的魔法方法,说说Python装饰器是什么?
Python魔法方法:常用的有__new__(); __init__(); __del__(),这里不一一举例了。。
- __new__() 方法:先读取参数,如:类名称,args,和kwargs。然后__new()__方法把这些参数传递给类名称的__init()__方法
语法:__new__(class_name, args, kwargs) - __init__()方法:类的初始化方法或构造方法,用于全局初始化,先执行__new__()再执行__init__()
- __del()__方法:类的析构函数。在类被删除时会调用该方法
Python装饰器:Python装饰器本质上就是一个函数,这个函数的特点是可以接收其他函数的结果作为自己的参数,并将其替换成一个新的函数
问题3:介绍一下Wide&Deep和DeepFM
Wide&Deep:相比于常见的Embedding+MLP网络结构,W&D增加了Wide部分来保证模型的记忆性
- 记忆性需要用户的行为支撑,对于一些很少出现的商品或者有特定偏好的顾客,Wide部分能够记住共现的一些组合情况,在推荐时更具有针对性
- Deep部分能够泛化出从未出现或很少出现的特征组合,在推荐时能够体现出多样性
- Wide部分采用cross-product进行特征交叉,需要先验知识并且无法对数据中未出现的query-item进行预测
- Deep部分的Embedding层通过低维embedding的学习,对于未见过的特征有一定的处理能力。但是对于稀疏特征无法学得有效的低维表示。结果会导致这些很少出现的商品和高频出现的商品是没有关系的但是仍让会从embedding矩阵中学得非0表示,出现过度泛化推荐不相关的商品的现像。
- Wide部分弥补处理稀疏特征存在的缺点,Deep部分增强模型的泛化能力
DeepFM:相比于W&D模型,DeepFM的"wide"和"deep"部分共享input
- Wide部分通过FM模型实现,FM部分的隐向量随网络一起训练
- FM部分和DNN部分共享相同的embedding层:从原始特征中既学到了高阶特征交互,又不用像W&D那样需要先验知识去做交叉特征。
问题4:旋转数组找最小值(数组中无重复元素)
二分法,时间复杂度O(logN)
问题5:1-n个数放进n+1长度的列表里,有一个重复数字找出该重复数字,限制:空间复杂度O(1)
快慢指针