均从网上搜集而来,非本人面经,这里做简单整理,这里侧重于机器学习
PCA和SVD区别和联系:
从目的上来说:
SVD是一种矩阵分解方法,相当于因式分解,他的目的纯粹就是将一个矩阵拆分成多个矩阵相乘的形式。
PCA从名字上就从方法上来说:找到矩阵的主成分,也就意味这从一出生这就是个降维的方法
从方法上来说:
SVD可以获取另一个方向上的主成分,而PCA只能获得单个方向上的主成分
从应用上来说:
SVD更适于输入稀疏矩阵。因为PCA需要进行去均值化处理,所以不可避免的破坏了矩阵的稀疏性
为什么用PCA而不是SVD,因为PCA转成协方差矩阵,是对称矩阵,特征值分解比SVD奇异值分解的计算量小的多
KD Tree
是一种分割k维数据空间的数据结构。主要应用于多维空间关键数据的搜索
原理:我们不比较全部的k维数据,而是选择其中某一个维度比较,根据这个维度进行空间划分。那接下来,我们需要做的是两件事:
判断出在哪一个维度比较,也就是说,我们所要切割的面在哪一个维度上。当然这种切割需要遵循一个基本要求,那就是尽量通过这个维度的切割,使得数据集均分(为二);
判断以哪个数据条目分依据划分。上面我们说,要使得数据集均分为二,那当然要选择一个合适的数据项,充当这个划分的“点”。
思路:
- 确定划分维度:这里维度的确定需要注意的是尽量要使得这个维度上所有数据项数值的分布尽可能地有大方差,也就是说,数据在这个维度上尽可能分散。这就好比是我们切东西,如果你切的是一根黄瓜,当让横着切要比竖着切更容易。所以我们应该先对所有维度的数值计算方差,选择方差最大的那个维度;
- 选择充当切割标准的数据项:那么只需要求得这个维度上所有数值的中位数即可;
步骤:
1.对于一个由n维数据构成的数据集,我们首先寻找方差最大的那个维度,设这个维度是dd,然后找出在维度dd上所有数据项的中位数mm,按mm划分数据集,一分为二,记这两个数据子集为Dl,Dr。建立树节点,存储这次划分的情况(记录划分的维度dd以及中位数mm);
2.对Dl,Dr重复进行以上的划分,并且将新生成的树节点设置为上一次划分的左右孩子;
3.递归地进行以上两步,直到不能再划分为止(所谓不能划分是说当前节点中包含的数据项的数量小于了我们事先规定的阈值,不失一般性,我在此篇博客中默认这个阈值是2,也就是说所有叶子节点包含的数据项不会多于2条),不能再划分时,将对应的数据保存至最后的节点中,这些最后的节点也就是叶子节点。
参考:https://blog.csdn.net/guoziqing506/java/article/details/54692392
判别式模型、生成式模型
判别式模型是直接对条件概率p(y|x;θ)建模。常见的判别式模型有 线性回归模型、线性判别分析、支持向量机SVM、神经网络等。
生成式模型则会对x和y的联合分布p(x,y)建模,然后通过贝叶斯公式来求得p(yi|x),然后选取使得p(yi|x)最大的yi。常见的生成式模型有 隐马尔可夫模型HMM、朴素贝叶斯模型、高斯混合模型GMM、LDA等。
生成模型将学习数据类别,而判别模型将简单地学习不同类别数据之间的区别
优缺点比较:
1.生成式模型最终得到的错误率会比判别式模型高, 但是其需要更少的训练样本就可以使错误率收敛
2.生成式模型更容易拟合, 比如在朴素贝叶斯中只需要计下数就可以, 而判别式模型通常都需要解决凸优化问题
3.生成式模型可以更好地利用无标签数据(比如DBN), 而判别式模型不可以
4.当添加新的类别时, 生成式模型不需要全部重新训练, 只需要计算新的类别
5.生成式模型可以体现更多数据本身的分布信息,其普适性更广。
6.两者的联系是:由生成式模型可以得到判别式模型,但由判别式模型不能得到生成式模型。
sin函数作为激活函数问题
拿sin之类的函数去做激活函数,应当非常慎重,容易出现梯度消失的情况。而且激活函数要求单调的,不然很难优化。
L0 loss
计算非零个数,用于产生稀疏性,但是在实际研究中很少用,因为L0范数很难优化求解,是一个NP-hard问题,因此更多情况下我们是使用L1范数
梯度下降和牛顿法
梯度下降法更新参数的方式为目标函数在当前参数取值下的梯度值,前面再加上一个步长控制参数alpha。
牛顿法最初是为了求解函数值为零的时候变量的取值问题的。
梯度下降的目的是直接求解目标函数极小值,而牛顿法则变相地通过求解目标函数一阶导为零的参数值,进而求得目标函数最小值。
通过比较牛顿法和梯度下降法的迭代公式,可以发现两者及其相似。海森矩阵的逆就好比梯度下降法的学习率参数alpha。牛顿法收敛速度相比梯度下降法很快,而且由于海森矩阵的的逆在迭代中不断减小,起到逐渐缩小步长的效果。
牛顿法的缺点就是计算海森矩阵的逆比较困难,消耗时间和计算资源。
参考:https://blog.csdn.net/njustzj001/article/details/47402497
SVM核函数
如果特征的数量大到和样本数量差不多,则选用LR或者线性核的SVM;
如果特征的数量小,样本的数量正常,则选用SVM+高斯核函数;
如果特征的数量小,而样本的数量很大,则需要手工添加一些特征从而变成第一种情况。
SVM为什么转换成对偶问题
1.对偶问题将原始问题中的约束转为了对偶问题中的等式约束
2.方便核函数的引入
3.改变了问题的复杂度。由求特征向量w转化为求比例系数a,在原始问题下,求解的复杂度与样本的维度有关,即w的维度。在对偶问题下,只与样本数量有关。
4.求解更高效,因为只用求解比例系数a,而比例系数a只有支持向量才为非0,其他全为0.
若约束条件比较复杂,则很难求解,因此我们希望把带约束的优化问题转化为无约束的优化问题。
SVM为什么要引入对偶算法,原始问题无法求解吗?
先说结论:可以求解,SVM的本质上为凸二次优化即QP问题,大部分求解QP问题的包都可以对原始的SVM问题进行求解
lr为什么是凸优化问题
损失函数是凸函数,加入正则后是严格凸函数
Softmax反向传播推导,求导,Sigmoid求导
https://blog.csdn.net/oBrightLamp/article/details/83959185
https://zhuanlan.zhihu.com/p/37740860
https://zhuanlan.zhihu.com/p/37773135
https://www.jianshu.com/p/c02a1fbffad6
BP反向传播推导
1.https://zhuanlan.zhihu.com/p/32819991
2.https://juejin.im/entry/6844903586132918280
SVM KKT条件
KKT用来解决不等式约束优化问题,对应求解拉格朗日时的约束,见:https://blog.csdn.net/TaoTaoFu/article/details/56843224
为什么使用Softmax而不是多个logistic
使用 SoftMax 回归或者是多个 Logistic 回归二分类解决多分类问题,取决于类别之间是否互斥,不是互斥,使用多个Logistic 回归分类器更为合适
样本不平衡问题
Loss对不同样本设置不同权重;每个batch对不同样本均匀采样
SVM多分类
LR和SVM的联系和区别
联系:
1、LR和SVM都可以处理分类问题,且一般都用于处理线性二分类问题(在改进的情况下可以处理多分类问题)
2、两个方法都可以增加不同的正则化项,如l1、l2等等。所以在很多实验中,两种算法的结果是很接近的。
3、LR和SVM都可以用来做非线性分类,只要加核函数就好。
4、LR和SVM都是线性模型,当然这里我们不要考虑核函数
5、都属于判别模型
区别:
1、LR是参数模型,SVM是非参数模型。
2、从目标函数来看,区别在于逻辑回归采用的是logistical loss,SVM采用的是hinge loss,这两个损失函数的目的都是增加对分类影响较大的数据点的权重,减少与分类关系较小的数据点的权重。(Hinge loss是为了使分类正确)
3、逻辑回归相对来说模型更简单,好理解,特别是大规模线性分类时比较方便。而SVM的理解和优化相对来说复杂一些,SVM转化为对偶问题后,分类只需要计算与少数几个支持向量的距离,这个在进行复杂核函数计算时优势很明显,能够大大简化模型和计算。
4、SVM不直接依赖数据分布,而LR则依赖,因为SVM只与支持向量那几个点有关系,而LR和所有点都有关系。
5、SVM依赖penalty系数,实验中需要做CV
6、SVM本身是结构风险最小化模型,而LR是经验风险最小化模型
手写Kmeans KNN
从K-means里我们可以看出它其实就是EM的体现,E步是将每个数据点分配到距离它本身最近的一个簇类中,M步更新参数(中心点)来使J最小化,把K-Means看做EM算法的特例,EM算法是可以保证收敛的。
https://blog.csdn.net/orangefly0214/article/details/86538865
https://blog.csdn.net/sinat_35512245/article/details/55051306
为什么svm可以用核函数,lr不可以?
理论上可以,在加L2正则的逻辑回归上,w可以表示为输入x的加权和,就可以表示成点积的形式,从而使用核函数。而平时不用主要原因是1.逻辑回归本身处理的都是些高维稀疏的问题 2.计算时 逻辑回归在优化参数时所有样本点都参与了贡献,svm则只取离分离超平面最近的支持向量样本。导致使用核函数的逻辑回归计算量增大。
KL散度和交叉熵损失有什么不同?关系是啥?
交叉熵是KL的一种特殊形式,即KL里去掉熵后得到,两者都具有不对称性。因为KL用来衡量两个数据之间分布的差异性,因为训练数据的熵已知,所以只需要让训练数据和训练模型的交叉熵最小,就可以得到模型参数,这就是为什么使用的是交叉熵
https://blog.csdn.net/Dby_freedom/article/details/83374650
SVM的解是唯一的吗?
线性可分支持向量机利用间隔最大化求得最优分离超平面,解是唯一的。
Kmeans的K如何选择
各个点到cluster中心的距离的平方的和,当K变化时,曲线出现拐点的地方即为目标K,也叫elbow方法。
SVM 解决类别不平衡问题
SVM可以解决类别不平衡问题,SVM的超平面只与支持向量有关,因此原离决策超平面的数据的多少并不重要
1)、对正例和负例赋予不同的C值,例如正例远少于负例,则正例的C值取得较大,这种方法的缺点是可能会偏离原始数据的概率分布;
2)、对训练集的数据进行预处理即对数量少的样本以某种策略进行采样,增加其数量或者减少数量多的样本,典型的方法如:随机插入法,缺点是可能出现overfitting,较好的是:Synthetic Minority Over-sampling TEchnique(SMOTE),其缺点是只能应用在具体的特征空间中,不适合处理那些无法用特征向量表示的问题,当然增加样本也意味着训练时间可能增加;
3)、基于核函数的不平衡数据处理。
极大似然估计
极大似然估计,通俗理解来说,就是利用已知的样本结果信息,反推最具有可能(最大概率)导致这些样本结果出现的模型参数值!
换句话说,极大似然估计提供了一种给定观察数据来评估模型参数的方法,即:“模型已定,参数未知”。
求最大似然估计量的一般步骤:
1)写出似然函数;
2)对似然函数取对数,并整理;
3)求导数;
4)解似然方程。
LR用交叉熵而不是MSE
1.MSE导致梯度反传为0(https://blog.csdn.net/liuweiyuxiang/article/details/100812623)
2.交叉熵损失函数由最大似然估计推出
3.交叉熵损失函数忽略其他分类的权重