机器学习面试复习知识点

1:有监督和无监督学习的区别

  • 有监督学习:对有标记的训练样本进行学习,以尽可能对训练样本集外的数据进行分类预测。(LR,SVM,BP,RF,DBRT)
  • 无监督学习:对未标记的训练样本进行学习,比如发现这些样本的结构知识,分布情况等。(KMeans,DL)
  • 半监督学习:所给的训练样本一部分是有标签的一部分是没有标签的,若我们先使用有标记的样本数据集训练出一个学习器,再基于该学习器对未标记的样本进行预测,从中挑选出不确定性高或分类置信度低的样本来咨询专家并进行打标,最后使用扩充后的训练集重新训练学习器,这样便能大幅度降低标记成本,这便是主动学习(active learning),其目标是使用尽量少的/有价值的咨询来获得更好的性能

2:正则化

  • 正则化是针对过拟合提出的,就是在损失函数后边加一个正则项(正则项实际上是一个模型参数向量的范数)和一个系数。可以防止模型训练过度复杂,有效降低过拟合的风险。

3:过拟合

  • 训练误差逐步降低,而测试误差却越来越高,这种现象说明模型过拟合了,往往由于模型的复杂度过高引起。
  • 产生的原因:(1)参数太多,会导致模型复杂度上升,容易产生过拟合;(2)权值学习迭代次数过多(Overtraining),拟合了训练数据中的噪声点或者过度拟合了训练样本中没有代表性的特征。
  • 解决办法:(1)交叉验证法;(2)减少特征;(3)增加训练样本;(4)正则化;(5)权值衰减;

4:泛化能力

  • 指模型对未知数据的预测能力。

5:生成模型和判别模型

  • 判别模型:由数据直接学习决策函数Y = F(X)或者条件概率分布P(Y|X)。如KNN,决策树等等。直接面对预测,往往准确率较高,较容易简化模型。
  • 生成模型:由数据学习联合概率分布P(X,Y),然后求出条件概率分布P(Y|X)作为预测的模型。(朴素贝叶斯)
  • 朴素贝叶斯公式:P(Y|X) = \frac{P(X,Y)}{P(X)} = \frac{P(X|Y)*P(Y)}{P(X)}

6:朴素贝叶斯和贝叶斯的区别

  • 在贝叶斯公式中的A和B,我们习惯于称之为事件A,事件B.但是事实上,这个A,B我们可以拓展为类别,观测量这样更好理解。假如我获得一组观测量(特征)F={f1 ,f2,,,fn},想判断该组特征属于k个类别中的某一类C={c1 ,c2,,,ck}。那么简单来讲,如果我们获得在这组特征的情况下的各个类别的概率Pi=P(ci|F), 则最大概率的那个类别即为这组特征的分类估计。那么根据贝叶斯公式:P(C_i|F) = \frac{P(C_i,F)}{P(F)} = \frac{P(F|C_i)*P(C_i)}{P(F)},“朴素”体现在当A,B两个事件独立的时候,则有: P(A,B) = P(A\cap B) = P(A)*P(B),此处,假设特征F都是独立,则

                                                 P(C_i,F) = P(F|C_i)*P(C_i)

                                                                 = P(F,C_i)

                                                                 = P(f1,f2,f3,...,fn,C_i)

                                                                 = P(f1|C_i)*P(f2|C_i)*P(f3|C_i)*...*P(fn|C_i)*P(C_i)

  • 于是朴素贝叶斯分类器可以表示为后验概率最大化,即:

            y=f(x_1,x_2,x_3,...,x_n)=\underset{c_k}{argmax}P(Y=c_k|X=x)=\underset{c_k}{argmax}\small P(Y = c_k)\prod_{i = 1}^{n}P(F_i = x_i|Y = c_k)

7:线性分类器与非线性分类器的区别和优劣

  • 如果模型是参数w的线性函数,并且存在线性分类面,那么就是线性分类器,否则不是。
  • 常见的线性分类器有:LR,贝叶斯分类器,单层感知机,线性回归。
  • 常见的非线性分类器:决策树,RF,GBDT,多层感知机。
  • SVM既有线性也有非线性,主要看核函数(线性核还是高斯核)

8:特征维数比数据样本还多时(或者说当特征维数很高时),选择什么样的分类器比较合适

  • 线性分类器,因为维度很高时,数据一般在维度空间内会比较稀疏,很有可能线性可分。(可以xi想象一下在三维空间内只有两个点和在二维平面内有四个点的情况)。

9:ill-condition病态问题

  • 训练完的模型测试样本稍作修改,就会得到差别很大的结果,就是病态问题。

10:L1和L2正则的区别

  • L1是在loss function后边加上模型参数的1范数,也就是||w|| = \small \sum_{i=1}^{ }|w_i|,等于各个特征的绝对值之和。    
  • L2是在loss function后边加上模型参数的2范数,也就是||w||^2 = \small \sum_{i=1}^{ }w_i^2,等于各个特征的平方和,物理意义就是向量的模。
  • L1和L2采用不同的方式降低权重,L1会降低 |权重|,L2会降低 权重^2,L1和L2有不同的导数,L1的导数为k(常数),L2的导数为2*权重,权值更新过程中,如果使用L1正则化,w0会减去一个常数,不过,由于减去的是绝对值,L1 在 0 处具有不连续性,这会导致与 0 相交的减法结果变为 0。例如,如果减法使权重从 +0.1 变为 -0.2,L1 便会将权重设为 0,起到减少特征的作用0;而用L2时在权值更新时不会使权值变为0但是会使权值变小,L1会趋向于产生少量的特征,而其他的特征都是0,而L2会选择更多的特征,这些特征都会接近于0。L1在特征选择时候非常有用,而L2就只是一种规则化而已。

11:特征向量归一化方法

  • 线性函数转换:y = (x-min_val) / (max_val - min_val)。
  • 对数函数转换:y = log10 (x)。
  • 0均值标准化:\small y = \frac{x-\mu }{\sigma }
  • 三角函数转换:因为三角函数取值为(0,1),所以也可以用三角函数转换。

12:为什么参数值减小后的模型可以缓解过拟合

  • 过拟合的模型会经过曲面的每个点,也就是说在较小的区间内,里面可能会有较大的曲率,这里的导数会很大,在线性模型如:\small y = w_1x+w_2x+w_3x+...+w_ix + b中,曲面的导数,就是权值向量,当权值减小时,说明曲面的曲率会降低,从而模型就更简单,所以能环境过拟合现象。

13:SVM中RBF核函数与高斯核函数的比较

  • 径向基核函数 (Radial Basis Function),就是某种沿径向对称的标量函数。 通常定义为空间中任一点x到某一中心xc之间欧氏距离单调函数 , 可记作 k(||x-xc||), 其作用往往是局部的 , 即当x远离xc时函数取值很小。

  • 高斯核函数是径向基核函数的一种。

14:KMeans初始类类簇中心点的选取

  • 选择的K个中心点彼此距离尽可能远。首先随机选取一个点作为初始点,然后选择距离与该点最远的那个点作为中心点,再选择距离前两个点最远的点作为第三个中心点,依次类推,直至选取到K个点。
  • 选用层次聚类或者Canopy算法进行初始聚类。

15:ROC曲线和AUC

  • ROC:

  • X轴是误检率FRP(False Positice Rate)
  • y轴是召回率TPR(True Positive Rate )
  • 那么平面的上点(X,Y):

        (0,1)表示所有的positive的样本都预测出来了,分类效果最好

        (0,0)表示预测的结果全部为negitive

        (1,0)表示预测的错过全部分错了,分类效果最差

        (1,1)表示预测的结果全部为positive

针对落在x=y上点,表示是采用随机猜测出来的结果

  • AUC被定义为ROC曲线下的面积,显然这个面积不会大于1,且一般ROC曲线会在y = x的上方,所以 0.5<AUC<1。使用AUC值作为评价标准是因为很多时候ROC曲线并不能清晰的说明哪个分类器的效果更好,而作为一个数值,对应AUC更大的分类器效果更好。

16:优化KMeans

  • 使用Kd树或者ball tree(这个树不懂),将所有的观测实例构建成一棵树,之前每个聚类中心都需要和每个观测实例点进行距离计算,现在这些聚类中心根据Kd树只需要计算附近的一个局部区域即可。

17:一个大神总结的常见机器学习算法博客:http://kubicode.me/2015/08/16/Machine%20Learning/Algorithm-Summary-for-Interview/

18:在k-means或者kNN中,我们常用欧式距离来计算最近的令居的距离,有时也用曼哈顿距离,请比较两种距离的差别

  • 欧式距离可以表示两点或者多点之间的距离,如在一个n维空间内,点\small x = (x_1,x_2,x_3,...,x_n) 和\small y = (y_1,y_2,y_3,...,y_n)两点之间的距离为 \small d(x,y) = \sqrt{(x_1 - y_1)^2 + (x_2-y_2)^2 + ,...,+(x_n-y_n)^2} = \sqrt{\sum_{i = 1}^{n}(x_i-y_i)^2} 。欧氏距离虽然很有用,但也有明显的缺点。它将样品的不同属性(即各指标或各变量量纲)之间的差别等同看待,这一点有时不能满足实际要求。
  • 曼哈顿距离也叫城市距离,也就是在欧几里得空间的固定直角坐标系上两点所形成的线段对轴产生的投影的距离总和。例如在平面上,坐标(x1, y1)的点P1与坐标(x2, y2)的点P2的曼哈顿距离为: \small |x_1-x_2|+|y_1-y_2|,通俗来讲,想象你在曼哈顿要从一个十字路口开车到另外一个十字路口,驾驶距离是两点间的直线距离吗?显然不是,除非你能穿越大楼。而实际驾驶距离就是这个“曼哈顿距离”。

19:LR和线性回归的区别和联系。

  • 线性回归:\small y = wx,LR:\small \frac{1}{1+e^{-y}} = \frac{1}{1+e^{-wx}},所以由表达式可以看出,LR是在线性回归的实数范围输出值上施加sigmoid 函数将值收敛到0~1范围内,LR实质上或者从广义上来说也是一种线性回归,但是由于普通的线性回归是在整个实数域范围内进行预测,而LR将预测值收敛于【0,1】,因而对分类问题具有较好的鲁棒性。
  • 逻辑回归是以线性回归为理论支持的,但是线性回归模型无法做到sigmoid的非线性形式,sigmoid可以轻松处理0/1分类问题。
  • 如果要用LR处理多元分类,则要把sigmoid换成大名鼎鼎的softmax了。

20:请问(决策树、Random Forest、Boosting、Adaboost)GBDT和XGBoost的区别是什么

  • 集成学习的集成对象是学习器,bagging和boosting是属于集成学习的两种方法。
  • boosting:个体学习器之间存在强依赖关系,一系列个体学习器基本都需要串行生成。bagging:个体学习器之间不存在依赖关系,一系列个体学习器可以并行生成。示意图如下:

           

                                                                                              图:boosting

                                    

                                                                                  图:boosting流程图

  • boosting是首先将所有训练样本用一个初始权重D1训练出一个弱分类器,然后根据弱分类器的误差表现来更新训练样本的权重,使得前一个弱分类器1学习误差率高的训练样本的权重变高,能在后边的弱分类器中得到更多的重视,此时样本的权重为D2,如此重复,直到训练的弱分类器数目到大指定的数目T时,最终通过策略整合,得到最终的强分类器。(Adaboost,GBDT)。
  • bagging示意图:

                    

                                                                                                图:bagging

  • bagging是假设有m个样本,针对每个分类器的训练都是,有放回的随机采样m次,训练得到弱分类器,直到训练到了指定数目的T个分类器,最后采用某种结合策略,组成qian强分类器。(random forest)
  • 决策树属于常见的学习器,其学习方法是从根建立树,也就是如何决策叶子结点分裂,ID3/C4.5决策树用信息熵计算最优分类,CART决策树用基尼指数计算最优分裂,xgboost决策树使用的是二阶泰勒展开系数计算最优分裂。
  • Adaboost属于Boosting,采用指数损失函数替代原来分类任务的0/1损失函数。
  • GBDT属于Boosting的优秀代表,对函数残差近似值进行梯度下降,用CART回归树做学习器,集成为回归模型。
  • XGBoost是Boosting的集大成者,对函数残差近似值进行梯度下降,迭代时用了二阶梯度信息,集成模型可分类也可回归,由于它可在特征粒度上并行计算,ji结构风险和工程实现都做了很多优化,泛化性能和扩展性能都比GBDT要好。

21:为什么xgboost要用泰勒展开,优势在哪里

  • xgboost使用了一阶和二阶偏导, 二阶导数有利于梯度下降的更快更准. 使用泰勒展开取得函数做自变量的二阶导数形式, 可以在不选定损失函数具体形式的情况下, 仅仅依靠输入数据的值就可以进行叶子分裂优化计算, 本质上也就把损失函数的选取和模型算法优化/参数选择分开了. 这种去耦合增加了xgboost的适用性, 使得它按需选取损失函数, 可以用于分类, 也可以用于回归。

22:KNN中的K值如何选取

  • 1:如果选择较小的k值,就相当于用较小的领域中的训练实例进行预测,“学习”的近似误差会减小,但缺点是“学习”的估计误差会增大,预测的结果会对接近领域的实例点非常敏感,如果邻近的点恰巧是噪声,预测就会出错,即:k值的减小就意味着整体模型变得复杂,容易发生过拟合。
  • 2:如果选择较大的k值,可以减小估计误差,近似误差会增大,这时与输入实例较远的点也会起作用,如果较远的点包含噪声,那么也会对预测结果造成影响,k值的增大,意味着整体的模型变得简单
  • 3:K=N,则完全不足取,因为此时无论输入实例是什么,都只是简单的预测它属于在训练实例中最多的累,模型过于简单,忽略了训练实例中大量有用信息。
  • 4:在实际应用中,K值一般取一个比较小的数值,例如采用交叉验证法(简单来说,就是一部分样本做训练集,一部分做测试集)来选择最优的K值。

23:哪些机器学习算法不需要做归一化处理

  • 概率模型不需要归一化,因为它们不关心变量的值,而是关心变量的分布和变量之间的条件概率,如决策树,rf,朴素贝叶斯de等。
  • adaboost,svm,lr,knn,kmeans之类de的最优化问题就是需要归一化。

24:new 和 malloc的区别。编程开发C/C++

  • malloc和free是C/C++语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存并释放内存。
  • 对于非内部数据类型的对象而言,光用malloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。
  • 因此C++需要一个能完成动态内存分配和初始化工作的运算符new,以一个能完成清理与释放内存工作的运算符delete,注意new/delete不是库函数。
  • C++程序经常要调用C函数,而C程序只能用malloc/free来管理内存。

25:简述一下GAN网络

  • GAN之所以是对抗的,是因为GAN的内部是竞争关系,一方叫generator,它的主要工作是生成图片,并且尽量使得其看上去是来自于训练样本的。另一方是discriminator,其目标是判断输入图片是否属于真实训练样本。     更直白的讲,将generator想象成假币制造商,而discriminator是警察。generator目的是尽可能把假币造的跟真的一样,从而能够骗过discriminator,即生成样本并使它看上去好像来自于真实训练样本一样。

                              

26:

猜你喜欢

转载自blog.csdn.net/jiang_ming_/article/details/82799520