【算法面试笔记】

特征工程

七种常用的特征工程
特征提取+数据预处理四部走

特征归一化

  1. 为啥要归一化
    百面机器学习上那个例子我觉得全
    就一个角度:
    让不同量纲的特征对最终模型有着近似、相似的影响力,可能不完全相同,保证特征之间的公平性
    以计算距离为例,很好理解,略
    以线性回归为例, w 1 x 1 + w 2 x 2 = y w_1x_1+w_2x_2=y w1x1+w2x2=y,损失就是 L = Σ i n ( w 1 x i 1 + w 2 x i 2 − y ˉ ) 2 L=\Sigma_i^n(w_1x_{i1}+w_2x_{i2}-\bar{y})^2 L=Σin(w1xi1+w2xi2yˉ)2,展开之后有 w 1 , w 2 w_1,w_2 w1,w2的二次项,还有一个交叉项,对 w 1 w_1 w1求导,倒数大概长这样 ∂ L ∂ w 1 = 2 A w 1 + B w 2 + C \frac{\partial L}{\partial w_1}=2Aw_1+Bw_2+C w1L=2Aw1+Bw2+C,A里面是对特征 x 1 x_1 x1的二次项的求和,B里面是特征 x 1 , x 2 x_1,x_2 x1,x2的乘积的和,C里面是对特征 x 1 x_1 x1的求和,那么如果两个特征量纲不一样,量纲大的那个,求得的梯度也就越大了。
    所以应该这样回答,量纲大的那个,对于梯度的影响会越大。进而导致了,可能会很难拟合获得极大值或者极小值,或者根本难以拟合。

SVD和PCA

PCA是一种降低纬度的手段,通过求 X X T XX^T XXT的特征向量,然后用特征向量来对 X X X降低纬度
SVD是一种矩阵分解的手段,通过用三个矩阵 U , Σ , V T U,\Sigma,V^T U,Σ,VT来近似表征原始矩阵 A A A;更进一步的,类比于SVD在推荐里的应用,加入 A A A的列是用户,行代表商品,因此 U U U的每一行代表用户的特征,比打分列表短,那么可以看做对打分的降维;反之 V T V^T VT的每一列可以看做商品特征。

模型评估

模型评估方法

  1. bootstrap
    会有百分之36的样本没被采样到,就求m次采样,某个样本从头到尾都没被抓出来过的概率, l i m m − > inf ⁡ ( 1 − 1 / m ) m lim_{m->\inf}(1-1/m)^m limm>inf(11/m)m

超参数调优

贝叶斯超参优化方法
贝叶斯优化 Bayesian Optimization
浅析高斯过程回归(Gaussian process regression)

看不太懂了,和概率论相关的我就想死,总之就是,先假设参数和模型(举例来说,损失大小)是呈一定关系的,假设损失是参数的一个随机过程;然后输入一个点,求一次损失,以某种策略更新一次这个随机过程的参数,再选一个点,再做一次。

概率图模型

求下面的概率图的联合概率
【算法面试笔记】_第1张图片
思路是,先分块,找贝叶斯网络里的三种结构,head-tail,tail-tail,v型,然后写独立性条件。
对于ABC这个tail-tail结构,有:
P ( A , B , C ) = P ( A ) P ( B , C ∣ A ) = P ( A ) P ( B ∣ A ) P ( C ∣ A ) \begin{aligned} P(A,B,C)=P(A)P(B,C|A)=P(A)P(B|A)P(C|A) \end{aligned} P(A,B,C)=P(A)P(B,CA)=P(A)P(BA)P(CA)对于B,C,D这个V型结构,有:
P ( B , C , D ) = P ( B ) P ( C ) P ( D ∣ B , C ) P(B,C,D)=P(B)P(C)P(D|B,C) P(B,C,D)=P(B)P(C)P(DB,C)于是
P ( A , B , C , D ) = P ( D ∣ A , B , C ) P ( A , B , C ) = P ( A , B , C , D ) / P ( B , C ) P ( A , B , C ) / P ( B , C ) P ( A , B , C ) = P ( D ∣ B , C ) P ( A ) P ( B ∣ A ) P ( C ∣ A ) \begin{aligned} P(A,B,C,D)&=P(D|A,B,C)P(A,B,C)\\ &=\frac{P(A,B,C,D)/P(B,C)}{P(A,B,C)/P(B,C)}P(A,B,C)\\ &=P(D|B,C)P(A)P(B|A)P(C|A) \end{aligned} P(A,B,C,D)=P(DA,B,C)P(A,B,C)=P(A,B,C)/P(B,C)P(A,B,C,D)/P(B,C)P(A,B,C)=P(DB,C)P(A)P(BA)P(CA)

神经网络

如何防止过拟合

1.正则化系数:极端情况下,过拟合是因为模型要拟合每个训练数据,那么模型在局部的波动就要大,对应的就是梯度比较大,也就是说系数很大。反过来讲,系数较小,说明模型对输入没特别敏感,降低了过拟合风险
2.dropout:相当于bagging的一个简单近似,每次训练的都是完整模型的一个子集,预测的时候相当于这些子集一起作用,从集成学习的角度来看,这就是在降低方差
3.batchnorm:这个东西提出是为了防止Covariate shift,如果模型要有用,最起码的保障是训练和测试的数据是独立同分布的。而神经网络往往要处理的是大量的数据,用的还是batch梯度下降,那输入的batch之间很可能分布不同,模型一会儿要拟合这种分布,一会儿又要拟合那种分布,一旦真的做到了拟合各种batch的分布,那结果就很可能是过拟合了。而做了batch norm之后,所有数据都被拉到一个固定的或者近似的分布了,起到了稳定输入的作用,模型可以去学真实的信息。另一个好处就是加速训练。

深度卷积神经网络

性质

稀疏连接和参数共享,《百面》上讲的足够好
我想说说inception的设计理念,面试问到过,因为稀疏连接里提到,CNN的设计是,用一个filter学一小块里存储的信息,然后下一层卷积层在上一层的基础上以同样的方式学东西,但需要注意的是原始的卷积层里每个卷积层里的filter都是固定的,比如说feature map是646416,那filter就一个比如说3316*64,那inception在这个基础上进行了创新,把每个卷积层分成几个branch,有些branch过1个filter,有的branch过两层filter,有的层学了1层,有的层学了两层,增加了信息量。

大数据处理

教你如何迅速秒杀掉:99%的海量数据处理面试题
海量数据处理之Bloom Filter详解
「每天一算法」Bitmap算法

Bitmap就是一种映射,只不过key是用bit所在的位数来表示的,value是bit内存的值来表示的

外部排序

mr最耗时的阶段是shuffle的IO

数学知识

概率

一根1米长的绳子,随机切N刀,变成(N+1)根绳子,为什么最短的一

概率解释来源于https://www.guokr.com/question/468732/, ( 1 − n x ) n − 1 (1-nx)^{n-1} (1nx)n1,假设每个最短的绳子长度为x那么这个事件就相当于,其他的 n−1 段都要大于等于 x。换句话说,每一段都得预留出了 x 的长度,只能落在余下的 1−nx 里切割出n-1段。

将一条线段任意分成三段,这三段能构成三角形三边的概率为

撕代码

剑指Offer(第二版)面试题14:剪绳子(动态规划)
连续子串和问题

在循环数组中找出和最大的连续子串:数组总和一定,那么跨收尾的最大值,就等于总和减去最小连续值

[LeetCode] Divide Two Integers 两数相除
经典算法~~快速求幂的方法
一个通用方法团灭 6 道股票问题

真的神了,dp[i-1][k][1]代表的是,在第i天之前(包括第i天)共买入了k次,并且第i天持有股票的情况下,拥有的最大收益。代表初始情况下收益为0,举例来讲,如果股票价格是[1,7,2,9],那么dp[0][1][1]代表的就是在第一天之前(包括第一天)共买入1次,并且本日持有股票的时候,拥有的最大收益,也就是-1

二叉树的遍历:先序中序后序遍历的递归与非递归实现及层序遍历

先序遍历是中左右,后续是左右中,那如果先序的时候是中右左,反过来就是后序遍历了。

最长递增子序列的三种算法
阶乘n!的结尾后面有多少个零
Leecode 207 判断环

入度为0的点,可以作为拓扑排序的头结点,如果存在环,那么环的入口的入度就一定不会被BFS减至1,因此环内的点是无法被BFS访问到的,因此当访问的节点数目小于总节点,那么就是有环了

leetcode 215. 数组中的第K个最大元素
一维消消乐
TSP旅行商

面经

阿里 达摩院 cv 算法 面经

凸优化,skip connection,KKT,XGBOOST
SVM的KKT补充,因为满足slater条件,因此是强对偶问题,因此满足 ∂ L ∂ w = 0 , ∂ L ∂ b = 0 \frac{\partial L}{\partial w}=0,\frac{\partial L}{\partial b}=0 wL=0bL=0,从而才能得到 w = ∑ α y x i , b = y j − ∑ y i α i ( x i ∗ x j ) w=\sum \alpha yx_i,b=y_j-\sum y_i \alpha_i(x_i*x_j) w=αyxib=yjyiαi(xixj)
XGBOOST:机器学习算法中 GBDT 和 XGBOOST 的区别有哪些? 这个PPT超级好,GDBT里明确的拟合梯度,做的就是梯度下降的工作,而XGBOOST并没有去直接拟合梯度,而是让泰勒展开式尽量小,有点类似于牛顿法所做的工作。每一个叶子的取值都是尝试尽量使得本叶子节点的损失值尽量小,取值方式和牛顿法一模一样,都是对泰勒展开式的扩展项导数为0。分隔标准也是看损失,看分割之后损失下降的多还是少。
XGBOOST对于连续特征是也是分块的,并且对于特征值用 h i h_i hi进行了加权,就是当前模型对于第 i i i个样本的输出的二阶导数
决策树、RF、xgboost如何处理缺失值?判断特征重要性?缺失值不敏感?

编程

python 迭代器和生成器详解

迭代器就是实现了iter和next的对象,每次调用next就是返回某一个值,就在跑一个next代码;生成器是一遍生成一遍迭代,由生成器函数返回,每当到达yield的时候,返回yield的值,然后程序在此中断,下次从此再执行。

概率论

设随机变量X1,X2,…Xn相互独立,且都服从(0,1)上的均匀分布.问:(1)求U=max{X1,X2,…Xn}数学期望.

你可能感兴趣的:(机器学习与数据挖掘)