字节数据挖掘实习生二面:
1、自我介绍
2、算法题
给定正浮点数 x,err;计算 x 的平方根 res;满足收敛条件 |x ^ 0.5 - res| <= err;
def sqrt(x,err):
l,p = 0,x
if x<1:
l,p = x,1
while 1:
q = (l+p)/2
if abs(q*q - x)<=err:
return q
else:
if q*q>x:
p=q
else:
l=q
3、数据话题;题外话:如何做爬虫?遇到的问题
巴拉巴拉,403,伪装,cookie等
4、我们部门NLP工作会比较少,我们需要的是一个确定型的结果,NLP主要是概率型的结果;
解释了概率型模型
5、你能简述一下句子的一个含义?你会用一个什么样的方法去做文本;
解释了词带模型, word2vec(CBOW,skip-gram),Bert,robert编码
6、word2vec需要一个窗口,后面bert等模型都解决了这一个问题;他是怎么解决的呢?
解释了词编码原理
7、把两个词的概率乘起来,这样就是一个最大似然概率的思想,这就出现独立性的问题和依赖性的问题;那因为文本间词关系又是相互依赖的,最大似然又要求样本件相互独立;他是怎么解决这个问题的呢?
巴拉巴拉,将其简化成马尔可夫链,下一个链只和上一个链相关;就将依赖问题转化成独立问题进行简化;
8、你有什么要问的?
9、大概什么时候能实习,实习时间;
部门是做;给予API接口、文本等信息,进行数据挖掘,预测是否是非法用户等;(例如检测爬虫等)
可能需要提前掌握的内容是 sql语法;
字节数据挖掘实习生一面:
1、 自我介绍
2、 LR损失函数?它是怎么来的;什么是最大似然函数;为什么用最大似然函数来推loss function;为什么不用最小二乘法?
image.png
3、SVM和LR,你有仔细的对比过?他们本质上有什么区别?
相同点:
1) LR和SVM都是分类算法(SVM也可以用与回归)
2) 如果不考虑核函数,LR和SVM都是线性分类算法,也就是说他们的分类决策面都是线性的。
3) LR和SVM都是有监督模型
4) LR和SVM都是判别模型。 判别式模型(Discriminative Model)是直接对条件概率p(y|x;θ)建模。常见的判别式模型有线性回归模型、线性判别分析、支持向量机SVM、神经网络、boosting、条件随机场等。
生成式模型(Generative Model)则会对x和y的联合分布p(x,y)建模,然后通过贝叶斯公式来求得p(yi|x),然后选取使得p(yi|x)最大的yi
不同点:
1)本质上是其loss function不同
2) 支持向量机只考虑局部的边界线附近的点,而逻辑回归考虑全局(远离的点对边界线的确定也起作用,虽然作用会相对小一些)
3)在解决非线性问题时,支持向量机采用核函数的机制,而LR通常不采用核函数的方法(通过上面的第二点不同点可以了解,在计算决策面时,SVM算法里只有少数几个代表支持向量的样本参与了计算,也就是只有少数几个样本需要参与核计算。然而,LR算法里,每个样本点都必须参与决策面的计算过程,也就是说,假设我们在LR里也运用核函数的原理,那么每个样本点都必须参与核计算,这带来的计算复杂度是相当高的。所以,在具体应用时,LR很少运用核函数机制)
4) 线性SVM依赖数据表达的距离测度,所以需要对数据先做normalization,LR不受其影响,一个基于概率,一个基于距离!
5)SVM的损失函数就自带正则(损失函数中的1/2||w||^2项),这就是为什么SVM是结构风险最小化算法的原因,而LR必须另外在损失函数上添加正则项。
4、 Linear SVM(线性核)本质上是一种线性分类的办法?
不是,如果不考虑核函数,它才是线性分类算法;
5、SVM核函数的作用?
映射函数的作用是将低维空间的数据映射到高维空间中,
核函数表示的是映射之后高维空间中两个矢量的点积。
6、LR可以用核函数解决线性不可分数据?
从工程/复杂度上来说,可以用的,但为什么不用呢,因为计算量太大了,需要每个点两两计算核函数;SVM因为转化成对偶问题,只需要计算少量的点就可以了;他的计算量和SVM相比就不是一个数量级上的了。
7、交叉墒公式,写一下
image.png8、MSE和交叉墒这两种方式有啥不一样的?
第一点:MSE无差别得关注全部类别上预测概率和真实概率的差.交叉熵关注的是正确类别的预测概率. 举个例子, 实际标签是[1,0,0],模型预测得到的概率是[0.9,0.4,0.3],那么交叉熵损失函数的结果是 1log(0.9)+0log(0.4)+0log(0.3),而MSE则都得全部算一遍。
第二点:交叉熵更有利于梯度更新。MSE会收敛的慢一些,因为它求导的结果相比于交叉熵还多乘以一个sigmod函数,但是交叉熵梯度中不再含有sigmoid的导数,有的是sigmoid的值和实际值之间的差,也就满足了我们之前所说的错误越大,下降的越快的要求,
第三点:MSE是假设数据符合高斯分布时,模型概率分布的负条件对数似然;交叉熵是假设模型分布为多项式分布时,模型分布的负条件对数似然。还有一点要说明,MSE对残差大的样例惩罚更大些.,比如真实标签分别是(1, 0, 0).模型1的预测标签是(0.8, 0.2, 0),模型2的是(0.9, 0.1, 0). 但MSE-based算出来模型1的误差是MSE-based算出模型2的4倍,而交叉熵-based算出来模型1的误差是交叉熵-based算出来模型2的2倍左右.对于模型1和模型2输出的结果。
9、 做梯度更新,你觉得用交叉墒更有利,还是MSE更有利;那个收敛速度快一点;
8题(2)问
10、正则表达式,解释一下;L1和L2,原理;
简单
11、AUC,用一句话描述?ROC的横轴和纵轴分别是什么?样本不均衡适合用AUC?多分类的AUC怎么计算的呢?
简单;每种类别下,都可以得到m个测试样本为该类别的概率(矩阵P中的列)。所以,根据概率矩阵P和标签矩阵L中对应的每一列,可以计算出各个阈值下的假正例率(FPR)和真正例率(TPR),从而绘制出一条ROC曲线。这样总共可以绘制出n条ROC曲线。最后对n条ROC曲线取平均,即可得到最终的ROC曲线。
12、有用过spark或者H相关的内容?数据挖掘相关的?
13、算法题
数组 nums:-1,其他是正整数。
-1 -> 数组的头部;
其他元素 -> 保持原来的顺序;
• 输入: [-1,3,-1,4,2]
• 输出: [-1,-1,3,4,2]
class S:
def solve(self,nums):
n = len(nums)
j=0
for i in range(n):
if nums[i]==-1:
nums[i],num[j] = nums[j],nums[I]
j+=1
return nums
网友评论