面试整理

1.自我介绍

2.介绍推荐系统架构

image

3.LR原理 loss推导

LR是在线性模型的基础上,对特征进行线性组合,在通过sigmoid函数映射成结果是0和1的概率

lnL(w)=∑[yi*wx(i)-ln(1+e^{wx(i)}]

loss=-1/N *lnL(w)

公式推导

二项LR的条件概率如下:


P(Y=1|x)=\frac{e^{w*x}}{1+e^{w*x}}

P(Y=0|x)=\frac{1}{1+e^{w*x}}

事件发生概率为p,时间发生的几率为

odds=\frac{p}{1-p}

取对数几率

log(p)=log\frac{p}{1-p}

对于逻辑回归而言,Y=1的对数几率就是

\log(\frac{P(Y=1|x)}{1-P(Y=1|x)})=wx

常常使用极大似然估计法来求解,即找到一组参数,使得在这组参数下,我们的数据的似然度(概率)最大

设P(Y=1|x)=πx P(Y=0|x)=1-πx

似然函数

L(w)=\prod[π(x_i)^{y_i}][1-π(x_i)^{1-y_i}]

对数似然函数

lnL(w)=\sum[y_i\ln(π(x_i))+(1-y_i)ln(1-π(x_i))]
      
      =\sum[y_i\ln(\frac{π(x_i)}{1-π(x_i)}+\ln(1-π(x_i))]
      
      =\sum[y_i*wx_i-\ln(1+e^{wx_i})]

如果取整个数据集上的平均对数似然损失,我们恰好可以得到:

J(w)=-\frac{1}{N}*lnL(w)

LR如何防止过拟合

  1. 加入正则项p=1,2,标识L1,L2范数
  2. 特征降维(PCA,LDA)

LR 为什么使用sigmoid

  1. 由最大熵推导
  2. 一般概率都趋于正态分布,sigmoid函数与正态分布相似

LR如何输入非线性特征

  1. one-hot编码
  2. FM算法

LR为什么要对连续特征做离散化处理

  1. 离散特征增加减少都容易,易于模型的快速迭代
  2. 系数向量的內积乘法运算速度快
  3. 离散化后的特征对异常数据有更好的鲁棒性
  4. 简化了LR模型,降低了模型过拟合的风险

4.XGBoost原理

首先说一下GBDT,GBDT是一个boosting算法,每次学习前面t-1颗树的残差
XGBoost进行了一系列优化 比如损失函数进行了二阶泰勒展开、目标函数加入正则项等

决策树原理
决策树是一个树形结构,一套的if else规则,常常用于分类
一个样本进来,经过层层if else规则之后,最终落到哪个叶子结点就属于该类别,决策树由特征选择、树的生成、树的剪枝散步组成

GBDT原理

前向分布的加法模型

loss为mse时候拟合残差

分类树和回归树的区别
CART启发函数{
分类树:gini,
回归:平方差
}

结点值不同:{
分类:存储的是最优分裂特征,
回归:存储的是最佳切分点
}

Xgboost和GBDT的不同:

  1. 基分类器:XGBoost不仅支持CART决策树,还支持线性分类器
  2. 导数信息:XGBoost对loss做了二阶泰勒展开
  3. XGboost对目标函数加了正则项
  4. XGBoost对缺失值进行了处理
  5. 并行化:对特征维度的并行。预先将每个特征值排好序,存储为块状结构,分裂节点可以采用多线程并行查找每个特征的最佳分割点

5.spark怎么取平均值

groupByKey

6.map Reduce原理

基础
map

p = re.compile(r'\w+')
# data_path = './data/test.txt'
data_path = './data/The_man_of_property.txt'
with open(data_path,'r', encoding='utf-8') as f:
    # for i in range(2):
    # print(f.readlines())
    for line in f.readlines():  # ['a b c\n', 'c b d']
        word_lst = line.strip().split(" ")  # ['a', 'b', 'c']
        # print(word_lst)
        for word in word_lst:
            re_word = p.findall(word)
            if len(re_word)==0:
                continue
            word = re_word[0].lower()
            print('%s,%s'%(word,1))

reduce

data_path = './data/reduce_test'
cur_word = None  # null
sum = 0
with open(data_path,'r', encoding='utf-8') as f:
    for line in f.readlines():
        word,val = line.strip().split(',')
        if cur_word == None:
            cur_word = word
        if cur_word!=word:
            print('%s,%s'%(cur_word,sum))
            cur_word=word
            sum = 0
        sum += int(val)  # sum = sum+val
    print('%s,%s' % (cur_word, sum))

7.二叉树求最大深度

def find_depth(node):
    depth = 0
    if node is not None:
        depth = 1 + max(find_depth(node.left), find_depth(node.right))
    return depth

8.简述CF计算流程

graph TD
   计算用户相似度-用余弦公式-->找出前20个相似用户
   找出前20个相似用户-->获取相似用户的物品集合
   获取相似用户的物品集合-->定义Udf过滤掉相同物品
   定义Udf过滤掉相同物品-->计算相似度
   计算相似度-->相同物品打分取sum
   相同物品打分取sum-->rating后生成推荐列表
   

计算过程
1.生成CF:{user_id:{item_id:score}}
2.协同过滤(user_CF,item_CF)
3.LR训练得到模型(保存特征映射和模型)
4.加载模型做预估(LR0.3+协同过滤0.7)

9.SVM对比LR

条件 SVM LR
相同点
算法类型 分类算法 分类算法
模型特点 有监督学习 有监督学习
模型类别 判别模型 判别模型
不同点
损失函数 1/2w^2+C∑εi lnL(w)=∑[yi*wx(i)-ln(1+e^{wx(i)}]
Normalization 线性SVM是距离度量,需要Normalization 不需要
正则化 自带 需要额外添加
核函数 不用

10.K-Means

优点:

  1. 简单快速
  2. 对处理大数据,该算法保持可伸缩性和高效性
  3. 当接近高斯分布时,效果较好
    缺点:
  4. K是预先给定的,K的选择难以估计
  5. 以来初始聚类中心的选择
    原理:
    将一堆数据聚集为K个簇,每个簇有一个中心点成为均值点

TF-IDF

TF=某词次数/总词数

IDF=log(文档总数/包含该词的文档数+1)

CNN

卷积神经网络(CNN) 属于人工神经网络的一种,它的权重共享的网络结构显著降低了模型的复杂度,减少了权值的数量。卷积神经网络可以直接将图片作为网络的输入,自动提取特征,并且对图片的变形(如平移、比例缩放、倾斜)等具有高度不变形。

局部感知:网络部分连通,每个神经元只和上一层的部分神经元相连,只感知局部,而不是整幅图像
局部像素关系紧密,较远的像素相关性弱,因此只需要局部感知,在更高层将局部的信息综合起来就得到了全局的信息

权值共享:从一个局部区域学习到的信息,应用到图像的其它地方去。即用一个相同的卷积核去卷积整幅图像,不同的特征靠多个不同的卷积核实现

1*1卷积核的作用

  1. 降维
  2. 保证feature map 不变的情况下增加非线性

pooling层的作用

  1. 整合特征,减少计算复杂度
  2. 对不同位置的特征进行聚合统计
  3. 卷积窗口有重叠,因此得到的结果有大量冗余,用pooling可以消除冗余,权值共享可以带来评议的不变形

池化层的作用:对输入的特征图进行压缩,一方面使得特征图变小,简化网络计算复杂度,一方面进行特征压缩,提取主要特征

卷积层的作用

  1. 相当于一个特征提取器来提取特征
  2. 提供了位置信息
  3. 减少了参数个数

relu函数的优点

  1. 防止梯度弥散
  2. 稀疏激活性(负半轴导数为0,不会更新梯度)
  3. 加快计算(导数好计算)

代码实现

class CNN(nn.Module):
    def __init__(self):
        super(CNN, self).__init__()
        self.layer1 = nn.Sequential(
            nn.Conv2d(1, 16, kernel_size=5, padding=2),#卷积:1 input image channel, 16 output channels, 5x5 square convolution kernel,2 zero padding)
            nn.BatchNorm2d(16),#归一化
            nn.ReLU(),#非线性激活函数ReLU
            nn.MaxPool2d(2))#池化层
        self.layer2 = nn.Sequential(
            nn.Conv2d(16, 32, kernel_size=5, padding=2),
            nn.BatchNorm2d(32),
            nn.ReLU(),
            nn.MaxPool2d(2))
        self.fc = nn.Linear(7*7*32, 10)#全连接层,in_features, out_features, bias=True
        
    def forward(self, x):
        out = self.layer1(x)
        out = self.layer2(out)
        out = out.view(out.size(0), -1)
        out = self.fc(out)
        return out
# 正常情况下, 我们都会用类进行封装一个网络        
cnn = CNN()

Spark相关

1.Spark Streaming+kafka 防止数据丢失

spark RDD 内部机制可以保证数据at-least语义

  1. Receiver方式:开启WAL(write ahead log)将从kafka接收到的数据写入到日志文件中,所有数据从失败中可恢复
  2. Direct方式:依靠checkpoint 机制来保证

2.Spark Streaming如何与kafka对接,以及如何保证数据有序

  1. Receiver方式:将kafka数据读取到Spark内存中,zookeeper管理offset,kafka topic中partition的数目与Spark streaming中partition无关
  2. Direct方式:调用kafka的低阶API,自己管理offset,kafka topic中partition的数量与Spark rdd中一致

3.kafka的优缺点

优点 缺点
支持broker横向扩展 由于批量发送,数据并非真正实时
高性能、低延迟 监控不完善

4.hive优化

  1. 排序sortBy的效率高于orderby
  2. 数据倾斜:group by设置hive.group.sviwind=true实现负载均衡
  3. 小表Join大表

5.python迭代器

  1. 对象有iter()和next()方法
  2. 优点:节省内存,缺点:一次性

6.Spark的一些算子

distinct

reduceByKey groupBykey() aggregateByKey()

sortByKey() sortBy()

join


模型跑 4个小时|迭代2000次
4-5万的活跃用户、每天4G左右的数据

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

推荐阅读更多精彩内容

  • LR和SVM的区别 相同点:1、都是监督、分类算法,且一般处理二分类问题2、两个方法都可以增加不同的正则化项,如l...
    账号已删除阅读 2,767评论 1 8
  • 作者:狗皮膏药链接:https://zhuanlan.zhihu.com/p/58434325来源:知乎 SVM:...
    孙有涵阅读 3,432评论 0 0
  • 前端面试题的简单整理,都只是大概回答,具体某些问题的具体理解后续会补上。 前端页面有哪三层构成,分别是什么?作用是...
    李欢li阅读 473评论 0 2
  • ML & DM 集成学习 模型融合 ensemble http://wakemeup.space/?p=109 E...
    章鱼哥呀阅读 1,791评论 0 6
  • 网络 像蜘蛛丝网 从城市的心脏 伸展向四面八方 覆盖天上地下 你是宅星人 虽不识对门邻居 却网友遍布世界
    长安寻阅读 161评论 0 1