机器学习与深度学习常见面试问题与答案

点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

本文转自|OpenCV学堂

第2章 数学知识

1.计算下面函数的一阶导数和二阶导数

根据基本函数,复合函数,四则运算的求导公式有

 

2.计算下面两个向量的内积

根据内积的定义

3.计算下面向量的1范数和2范数

其1范数为

其2范数为

4.计算下面两个矩阵的乘积:

根据矩阵乘法的定义有

5.计算下面多元函数的偏导数

对各个变量的偏导数分别为

6.计算下面多元函数的梯度

根据上一题的结果

7.计算下面多元函数的雅克比矩阵

根据雅克比矩阵的定义有

8.计算下面多元函数的Hessian矩阵

首先计算一阶偏导数

然后计算各二阶偏导数

根据Hessian矩阵的定义有

9.计算下面函数的所有极值点,并指明是极大值还是极小值:

函数的一阶导数为

解方程

可以得到驻点

函数的二阶导数为

在驻点处的二阶导数为

因此是极小值点,是极大值点。

10.推导多元函数梯度下降法的迭代公式。

根据多元函数泰勒公式,如果忽略一次以上的项,函数在点x处可以展开为

对上式变形,函数的增量与自变量增量、函数梯度的关系为

如果令则有

即函数值减小。即有梯度下降法每次的迭代增量为其中α为人工设定的接近于的正数,称为步长或学习率。其作用是保证在x的邻域内,从而可以忽略泰勒公式中的项。

使用该增量则有

函数值下降。从初始点开始,反复使用如下迭代公式

只要没有到达梯度为0的点,函数值会沿序列递减,最终收敛到梯度为0的点。从出发,用式1进行迭代,会形成一个函数值递减的序列

11.梯度下降法为什么要在迭代公式中使用步长系数?

其作用是保证在x的邻域内,即控制增量的步长,从而可以忽略泰勒公式中的项。否则不能保证每次迭代时函数值下降。

12.梯度下降法如何判断是否收敛?

迭代终止的条件是函数的梯度值为0(实际实现时是接近于0即可),此时认为已经达到极值点。可以通过判定梯度的二范数是否充分接近于0而实现。

13.推导多元函数牛顿法的迭代公式。

根据Fermat定理,函数在点x处取得极值的必要条件是梯度为0

对于一般的函数,直接求解此方程组存在困难。对目标函数在处作二阶泰勒展开

忽略二次以上的项,将目标函数近似成二次函数,等式两边同时对x求梯度,可得

其中为在处的Hessian矩阵。令函数的梯度为0,有

解这个线性方程组可以得到

如果将梯度向量简写为g,Hessian矩阵简记为H,式1可以简写为

在泰勒公式中忽略了高阶项将函数做了近似,因此这个解不一定是目标函数的驻点,需要反复用式2进行迭代。从初始点处开始,计算函数在当前点处的Hessian矩阵和梯度向量,然后用下面的公式进行迭代

直至收敛到驻点处。迭代终止的条件是梯度的模接近于0,或达到指定的迭代次数。其中α是人工设置的学习率。需要学习率的原因与梯度下降法相同,是为了保证能够忽略泰勒公式中的高阶无穷小项。

 

14.如果步长系数充分小,牛顿法在每次迭代时能保证函数值下降吗?

不能。

 

15.梯度下降法和牛顿法能保证找到函数的极小值点吗,为什么?

不能,可能收敛到鞍点,不是极值点。

 

16.解释一元函数极值判别法则。

假设为函数的驻点,可分为以下三种情况。

情况一:在该点处的二阶导数大于0,则为函数的极小值点;

情况二:在该点处的二阶导数小于0,则为极大值点;

情况三:在该点处的二阶导数等于0,则情况不定,可能是极值点,也可能不是极值点。

 

17.解释多元函数极值判别法则。

假设多元函数在点M的梯度为0,即M是函数的驻点。其Hessian矩阵有如下几种情况。

情况一:Hessian矩阵正定,函数在该点有极小值。

情况二:Hessian矩阵负定,函数在该点有极大值。

情况三:Hessian矩阵不定,则不是极值点,称为鞍点。

Hessian矩阵正定类似于一元函数的二阶导数大于0,负定则类似于一元函数的二阶导数小于0。

 

18.什么是鞍点?

Hessian矩阵不定的点称为鞍点,它不是函数的极值点。

 

19.解释什么是局部极小值,什么是全局极小值。

局部极值点。假设是一个可行解,如果对可行域内所有点x都有,则称为全局极小值。

全局极值点。对于可行解,如果存在其邻域,使得该邻域内的所有点即所有满足的点x,都有,则称为局部极小值。

20.用拉格朗日乘数法求解如下极值问题

构造拉格朗日乘子函数

对所有变量求偏导数,并令其为0

可以解得

21.什么是凸集?

对于n维空间中的点集C,如果对该集合中的任意两点x和y,以及实数,都有则称该集合称为凸集。凸集的形状是凸的,没有凹进去的地方。

 

22.什么是凸函数,如何判断一个一元函数是不是凸函数,如何判断一个多元函数是不是凸函数?

对于函数f(x),对于其定义域内的任意两点x和y,以及任意的实数,都有

则函数f(x)为凸函数。

一元函数是凸函数的二阶判定规则为其二阶导数大于等于0,即对于多元函数则根据Hessian矩阵判定。如果函数的Hessian矩阵半正定则函数是凸函数。

22.什么是凸优化?

如果一个最优化问题的可行域是凸集且目标函数是凸函数,则该问题为凸优化问题。

23.证明凸优化问题的局部最优解一定是全局最优解。

假设x是一个局部最优解但不是全局最优解,即存在一个可行解y

根据局部最优解的定义,不存在满足并且的点。选择一个点

其中

则有

即该点x在的邻域内。另外有

这与x是局部最优解矛盾。如果一个局部最优解不是全局最优解,在它的任何邻域内还可以找到函数值比该点更小的点,这与该点是局部最优解矛盾。

24.对于如下最优化问题:

构造广义拉格朗日乘子函数,将该问题转化为对偶问题。

首先构造拉格朗日乘子函数

对偶问题为先控制原始优化变量x,然拉格朗日乘子函数取极小值,然后控制拉格朗日乘子变量,让拉格朗日乘子函数取极大值。

首先对求偏导数,并令其为0,可以解得

然后对求偏导数,并令其为0,可以解得

将这些解代入拉格朗日乘子函数,可以得到

由于,拉格朗日乘子函数可以简化为

由于拉格朗日乘子变量必须大于等于0,因此对偶问题为

25.一维正态分布的概率密度函数为

给定一组样本。用最大似然估计求解正态分布的均值和方差。

对于正态分布,有样本集。该样本集的似然函数为

对数似然函数为

对μ和求偏导数,得到似然方程组为

解得

26.如何判断一个矩阵是否为正定矩阵?

如果对于任意非0向量都有

则称A为半正定矩阵。如果将上面的不等式严格成立,称为正定矩阵。判定矩阵正定可以根据上面的定义。另外一种常用的方式是判定其所有特征值是否都为正,如果为正,则为正定矩阵。

 

27.解释最速下降法的原理。

梯度下降法中步长是固定的,最速下降法是对梯度下降法的改进,它动态确定步长值。最速下降法同样沿着梯度相反的方向进行迭代,但每次需要计算最佳步长α。

定义最速下降法的搜索方向为

在该方向上寻找使得函数值最小的步长,通过求解如下一元函数优化问题实现

优化变量是α。实现时有两种方案。第一种方案是将α的取值离散化,即取典型值,分别计算取这些值的目标函数值然后确定最优值。或直接求解上面目标函数的驻点,对于有些情况可得到解析解。

28.解释坐标下降法的原理。

坐标下降法是一种分治法。对于多元函数的优化问题,坐标下降法每次只对一个变量进行优化,依次优化每一个变量,直至收敛。假设要求解的优化问题为

算法在每次迭代时依次选择进行优化,每次求解单个变量的优化问题。

29.一维正态分布的概率密度函数为

按照定义计算其数学期望与方差。

首先计算数学期望。使用换元法,令

则有

根据数学期望的定义,有

上式第5步成立是因为是奇函数,它在(-∞,+∞)内的积分为0。第6步利用了下面的结论

下面计算方差,同样令,则有

上式第5步利用了分布积分法。第6步成立是因为

30.两个离散型概率分布的KL散度定义为:

(1)证明下面的不等式,当想x>0时:

(2)利用该不等式证明KL散度非负,即

首先证明(2),根据定义有

接下来证明(1)。利用导数可以证明某些不等式,其思路是证明在某一点处是函数的极大值或极小值点。下面证明当时下面不等式成立

构造函数

其导数为

当x<1时有,函数单调减,在x>1时有,函数单调增。1是该函数的极小值点,且f(1)=0,因此不等式成立。

31.对于离散型概率分布,证明当其为均匀分布时熵有最大值。

对于离散型随机变量,熵是如下多元函数

其中为随机变量取第i个值的概率。由于是概率分布,因此有如下约束

对数函数的定义域非负,因此可以去掉上面的不等式约束。构造拉格朗日乘子函数

和乘子变量偏导数并令其为0,可以得到下面的方程组

可以解得=1/n。此时熵的值为

进一步可以证明该值是极大值。熵函数的二阶偏导数为

它的Hessian矩阵是如下的对角阵

由于>0,Hessian矩阵负定,因此熵函数是凹函数。故=1/n时熵有极大值。

32.对于连续型概率分布,已知其数学期望为μ,方差为。用变分法证明当此分布为正态分布时熵有最大值。

给定数学期望与方差即有如下等式约束

为了保证p(x)是一个概率密度函数,还有如下约束

熵对应的泛函为

这是一个带等式约束的泛函极值问题。构造拉格朗日乘子泛函

根据欧拉-拉格朗日方程,由于泛函的核没有p(x)的导数项,对p(x)有如下微分方程

对乘子变量求偏导数可以得到

根据式1可以解得

将其代入式2可以解得

最终解得

此即正态分布的概率密度函数。

33.对于两个离散型概率分布,证明当二者相等时交叉熵有极小值。

假设第一个概率分布已知,即对于概率分布p(x),随机变量X即取第i个值的概率为常数,假设对于概率分布q(x),随机变量X取第i值的概率为。此时交叉熵为如下形式的多元函数

概率分布有如下约束条件

构造拉格朗日乘子函数

对所有变量求偏导数,并令偏导数为0,可以得到下面的方程组

由于是一个概率分布,因此有

联立方程1与式2可以解得

因此在两个概率分布相等的时候交叉熵有极值。接下来证明这个极值是极小值。交叉熵函数的Hessian矩阵为

该矩阵正定,因此交叉熵函数是凸函数,上面的极值是极小值。

34.为什么在实际的机器学习应用中经常假设样本数据服从正态分布?

主要原因是:

1.由中心极限定理保证,多个独立同分布的随机变量之和服从正态分布。

2.正态分布的各种积分,包括数学期望,方差,协方差,边缘分布,条件分布都易于计算,可以得到解析解。

3.给定数学期望和方差,正态分布的熵最大。

35.什么是随机事件独立,什么是随机向量独立?

如果则称随机事件A和B独立。随机事件独立意味着一个事件是否发生并不影响另外一个事件。如果随机事件A和B独立,条件概率的定义以及随机事件相互独立的定义有

将上面的定义进行推广,如果n个随机事件i=1,...n相互独立,则它们同时发生的概率等于它们各自发生的概率的乘积

随机变量之间的独立性与随机事件类似。对于二维随机向量,如果满足

则称随机变量x和y相互独立,随机事件独立性的定义一致。推广到n维随机向量,如果满足

则称这些随机变量相互独立。

36.什么是弱对偶?什么是强对偶?

弱对偶定理:如果原问题和对偶问题都存在最优解,则对偶问题的最优值不大于原问题的最优值,即:

如果原问题对最优解的函数值与对偶问题的最优解的函数值相等,则为强对偶。

37.证明弱对偶定理。

对任意的x和λ,v根据定义,对于对偶问题有

对于原问题有

因此对任意的x和λ,v有

由于原问题和对偶问题的最优值存在,有

因此弱对偶成立。

38.简述Slater条件。

一个凸优化问题如果存在一个候选x使得所有不等式约束都是严格满足的,即对于所有的i都有,不等式不取等号。则存在使得它们分别为原问题和对偶问题的最优解,并且:

Slater条件是强对偶成立的充分条件而不是必要条件。

39.简述KKT条件。

KKT(Karush-Kuhn-Tucker)条件用于求解带有等式和不等式约束的优化问题,是拉格朗日乘数法的推广,是取得极值的一阶必要条件。对于如下带有等式和不等式约束的优化问题

和拉格朗日对偶的做法类似,为其构造乘子函数

μ和λ称为KKT乘子。最优解满足如下条件

 等式约束和不等式约束是本身应该满足的约束,和之前的拉格朗日乘数法一样。只多了关于的方程

这可以分两种情况讨论。如果要满足的条件,则有。此时极值在不等式约束围成的区域内部取得。如果的取值自由,只要满足大于等于0即可,此时极值在不等式围成的区域的边界点处取得。KKT条件只是取得极值的必要条件而非充分条件。如果一个最优化问题是凸优化问题,则KKT条件是取得极小值的充分条件。

40.解释蒙特卡洛算法的原理。为什么蒙特卡洛算法能够收敛?

蒙特卡洛算法是一种随机算法,借助于随机数计算某些难以计算的数学期望和定积分。假设随机向量服从概率分布p(x)。则其数学期望定义为

如果用蒙特卡洛算法计算,非常简单。首先从概率分布p(x)抽取N个样本。然后计算

就是数学期望的估计值。在这里。随机抽取的样本频率蕴含了随机变量的概率值p(x)。根据大数定律,如果样本独立同分布,则它们的平均值收敛到数学期望μ。即下面的极限成立

从而保证蒙特卡洛算法收敛。

41.解释熵的概念。

熵(entropy)是信息论中最基本的一个概念,定义于一个随机变量之上,用于对概率分布的随机性程度进行度量,反映了一组数据所包含的信息量的大小。

对于离散型随机变量,熵定义为

对于连续型随机变量,熵(也称为微分熵,differential entropy)定义为

将求和换成了定积分。

第3章 基本概念

1.名词解释:有监督学习,无监督学习。

有监督学习算法有训练过程,算法用训练集进行学习,用学习得到的模型进行预测。通常所见的机器学习应用,如图像识别、语音识别等都属于有监督学习问题。有监督学习的样本由输入值与标签值组成

(x,y)

其中x为样本的特征向量,是机器学习模型的输入值;y为标签值,是模型的输出值。对于训练集,样本的标签值是由人工事先标注好的,例如为每张手写数字图像关联一个其对应的数字。

有监督学习的目标是给定训练样本集,根据它确定假设空间中的映射函数(也称为假设)

y=h(x)

无监督学习对无标签的样本进行分析,发现样本集的结构或者分布规律。其典型代表是聚类,表示学习,以及数据降维。

聚类也是分类问题,但无训练过程。算法把一批没有标签的样本划分成多个类,使得在某种相似度指标下每一类中的样本之间尽量相似,不同类的样本之间尽量不同。且类别事先未定义。

无监督学习的另一类典型算法是表示学习,它从样本中自动学习出有用的特征,用于分类或聚类任务。

数据降维算法将n维空间中的向量x通过函数映射到更低维的m维空间中,在这里m<<n

y=h(x)

2.什么是分类问题,什么是回归问题?

对于有监督学习,如果样本标签是整数则称为分类问题。此时的目标是确定样本的类别,以整数编号。预测函数是向量到整数的映射

此时的机器学习模型称为分类器。分类问题的样本标签通常从0或1开始,以整数编号。

如果标签值是连续实数则称为回归问题。此时预测函数是向量到实数的映射

例如根据一个人的学历、工作年限等特征预测其收入,是典型的回归问题,收入是实数值而不是类别标签。

2.列举常见的有监督学习算法。

贝叶斯分类器,决策树,支持向量机,boosting算法

3.列举常见的无监督学习算法。

k均值算法,PCA,t-SNE,层次聚类

 

4.简述强化学习的原理。

强化学习模拟人的行为,源自于行为主义心理学。类似于有监督学习,通过对状态-动作-回报值序列进行学习,可以得到一个称为策略函数的模型,用于确定在每种状态下要执行的动作。训练时,对正确的动作做出奖励,对错误的动作进行惩罚,训练完成之后用得到的模型进行预测。

5.什么是生成模型?什么是判别模型?

假设x为特征向量,y为该样本的标签值。如果机器学习算法对样本特征向量和标签的联合概率分布p(x,y)建模,则称为生成模型。如果对条件概率p(y丨x)进行建模,则称为判别模型。不使用概率模型的分类算法也属于判别模型,它直接预测样本的标签值而不关心样本的概率分布,这种情况的预测函数为

y=f(x)

这三种模型也分别被称为生成学习,条件学习,以及判别学习。

还有另外一种定义标准。生成模型对条件概率p(x丨y)建模,判别模型对条件概率p(y丨x)建模。前者不仅可以通过贝叶斯公式用于分类问题,还可用于根据标签值y(也称为隐变量)生成随机的样本数据x,而后者则只能用于根据样本特征向量的值判断它的标签值的分类任务。

 

6.概率模型一定是生成模型吗?

不一定,logistic回归和softmax回归都是概率模型,但不是生成模型。

 

7.不定项选择。下面那些算法是生成模型?_____BGI______哪些算法是判别模型?_____ACDEFH_____

A.决策树    B.贝叶斯分类器    C.全连接神经网络  D.支持向量机   E. logistic回归

F. AdaBoost算法   G.隐马尔可夫模型    H.条件随机场    I.受限玻尔兹曼机

8.如何判断是否发生过拟合?

模型在训练集上精度高,但在测试集上精度低。

9.发生过拟合的原因有哪些,应该怎么解决?

引起过拟合的可能原因有:

1.模型本身过于复杂,拟合了训练样本集中的噪声。此时需要选用更简单的模型,或者对模型进行裁剪。

2.训练样本太少或者缺乏代表性。此时需要增加样本数,或者增加样本的多样性。

3.训练样本噪声的干扰,导致模型拟合了这些噪声,这时需要剔除噪声数据或者改用对噪声不敏感的模型。

10.列举常见的正则化方法。

L1正则化

L2正则化

决策树的剪枝算法

神经网络训练中的dropout技术,提前终止技术

11.解释ROC曲线的原理。

对于二分类问题可以通过调整分类器的灵敏度得到不同的分类结果,从而在二者之间折中。将各种灵敏度下的性能指标连成曲线可以得到ROC曲线,它能够更全面的反映算法的性能。

真阳率(TPR)即召回率,是正样本被分类器判定为正样本的比例

在目标检测任务中正样本是要检测的目标,真阳率即检测率,即目标能够被检测出来的比例。假阳率(FPR)是负样本被分类器判定为正样本的比例

对于目标检测问题假阳率即误报率。

ROC曲线的横轴为假阳率,纵轴为真阳率。当假阳率增加时真阳率会增加,它是一条增长的曲线。

12.解释精度,召回率,F1值的定义。

测试样本中正样本被分类器判定为正样本的数量记为TP,被判定为负样本的数量记为FN;负样本中被分类器判定为负样本的数量记为TN,被判定为正样本的数量记为FP。

精度定义为被判定为正样本的测试样本中,真正的正样本所占的比例

显然。召回率定义为被判定为正样本的正样本占所有正样本的比例

同样的。精度值越接近1,对正样本的分类越准确,即查的越准。召回率越接近于,正样本被正确分类的比例越大,即查的越全。

根据精度和召回率,F1值定义为

它是精度与召回率的调和平均值的倒数

F1值综合考虑了精度与召回率,其值越大则模越准确,当精度与召回率均为1时F1有最大值1。

13.解释交叉验证的原理。

交叉验证用于统计模型的精度值。k折交叉验证将样本随机、均匀地分为k份,轮流用其中的k-1份训练模型,1份用于测试模型的准确率,用k个准确率的均值作为最终的准确率。

14.什么是过拟合,什么是欠拟合?

欠拟合也称为欠学习,指模型在训练集上的精度差。导致欠拟合的常见原因有模型简单,特征数太少无法正确的建立映射关系。

过拟合也称为过学习,指模型在训练集上表精度高,但在测试集上精度低,泛化性能差。过拟合产生的根本原因是训练数据包含抽样误差,算法训练时模型拟合了抽样误差。所谓抽样误差,是指抽样得到的样本集和整体数据集之间的偏差。

 

15.什么是没有免费午餐定理?

没有任何一个机器学习模型在所有样本集上表现是最优的。如果在一个数据集上算法A优于算法B,则一定存在另外一个数据集,使得B优于A。

 

16.简述奥卡姆剃刀原理。

简单的模型通常具有更好的泛化性能。

17.推导偏差-方差分解公式。

标签值由目标函数和随机噪声决定

其中为随机噪声,其均值为0,方差为。模型的总误差为

18.证明如果采用均方误差函数,线性回归的优化问题是凸优化问题。

损失函数使用均方误差函数,定义为

将回归函数代入损失函数,可以

将权重向量和特征向量进行增广,即将w和b进行合并以简化表达,特征向量做相应的扩充,扩充后的向量为

目标函数简化为

其二阶偏导数为

其中为第k个样本的特征向量的第i个分量。目标函数的Hessian矩阵为

简写成矩阵形式为

其中X是所有样本的特征向量按照行构成的矩阵。对于任意非0向量x有

因此Hessian矩阵是半正定矩阵,目标函数是凸函数

19.推导线性回归的梯度下降迭代公式。

如果采用梯度下降法求解,损失函数对的偏导数为

20.解释混淆矩阵的概念。

对于k分类问题,混淆矩阵为kxk的矩阵,它的元素表示第i类样本被分类器判定为第j类的数量

如果所有样本都被正确分类,则该矩阵为对角阵。主对角线的元素之和为正确分类的样本数,其他元素之和为错误分类的样本数。因此对角线的值越大,分类器准确率越高。

21.解释岭回归的原理。

岭回归是带L2正则化项的线性回归,训练时优化的目标函数为

22.解释LASSO回归的原理。

LASSO回归是使用L1正则化项的线性回归,训练时的目标函数为

第4章 贝叶斯分类器

1.什么是先验概率,什么是后验概率?

贝叶斯公式

描述了先验概率和后验概率之间的关系。如果事件A是因,事件B是果,则称P(A)为先验概率,意为事先已经知道其值。P(A丨B)称为后验概率,意为事后才知道其值。条件概率P(B丨A)则称为似然函数。先验概率是根据以往经验和分析得到的概率,在随机事件发生之前即已经知道,是“原因”发生的概率。后验概率是根据“结果”信息所计算出的导致该结果的原因所出现的概率。后验概率用于在事情已经发生的条件下,分析使得这件事情发生的原因概率。

 

2.推导朴素贝叶斯分类器的预测函数。

朴素贝叶斯分类器假设特征向量的分量之间相互独立。给定样本的特征向量x,该样本属于某一类的概率为

由于假设特征向量各个分量相互独立,因此有

其中Z为归一化因子。上式的分子可以分解为类概率和该类每个特征分量的条件概率的乘积。

3.什么是拉普拉斯光滑?

在类条件概率的计算公式中,如果为0,即特征分量的某个取值在某一类在训练样本中一次都不出现,则会导致如果预测样本的特征分量取到这个值时整个分类判别函数的值为0。作为补救措施可以使用拉普拉斯平滑,具体做法是给分子和分母同时加上一个正数。如果特征分量的取值有种情况,将分母加上k,每一类的分子加上1,这样可以保证所有类的条件概率加起来还是1

对于每一个类,计算出待预测样本的各个特征分量的类条件概率,然后与类概率一起连乘,得到上面的预测值,该预测值最大的类为最后的分类结果。

4.推导正态贝叶斯分类器的预测函数。

假设特征向量服从n维正态分布,其中μ为均值向量,为协方差矩阵。类条件概率密度函数为

其中是协方差矩阵的行列式,是协方差矩阵的逆矩阵。

在预测时需要寻找具有最大条件概率的那个类,即最大化后验概率,根据贝叶斯分类器的预测公式

假设每个类的概率p(c)相等,则等价于求解该问题也就是计算每个类的p(x丨c)值然后取最大的那个。对p(x丨c)取对数,有

进一步简化为

其中是常数,对所有类都是相同。求上式的最大指等价于求下式的最小值

该值最小的那个类为最后的分类结果。其中可以根据每一类的训练样本预先计算好,和x无关,不用重复计算。预测时只需要根据样本x计算

的值,而也是在训练时计算好的,不用重复计算。

5.贝叶斯分类器是生成模型还是判别模型?

生成模型,它对p(x丨y)建模。

 

第5章 决策树

1.什么是预剪枝,什么是后剪枝?

决策树的剪枝算法可以分为两类,分别称为预剪枝和后剪枝。前者在树的训练过程中通过停止分裂对树的规模进行限制;后者先构造出一棵完整的树,然后通过某种规则消除掉部分节点,用叶子节点替代。

2.什么是属性缺失问题?

在某些情况下样本特征向量中一些分量没有值,这称为属性缺失。

 

3.对于属性缺失问题,在训练时如何生成替代分裂规则?

替代分裂的目标是对训练样本的分裂结果要和主分裂尽可能接近,即被主分裂分到左边的样本要尽量被替代分裂分到左边;被主分裂分到右边的样本要尽量被替代分裂分到右边。主分裂和替代分裂对所有训练样本的分裂结果有4种情况,分别是

LL,LR,RRL,RR

LL表示被主分裂、替代分裂都分到了左子树的样本数。LR表示被主分裂分到了左子树,被替代分裂分到了右子树的样本数。RL表示被主分裂分到了右子树,被替代分裂分到了左子树的样本数。RR表示被主分裂和替代分裂都分到了右子树的样本数。

因此LL+RR是主分裂和替代分裂的结果一致的样本数,LR+RL是主分裂和替代分裂的结果不一致的样本数。由于可以将左右子树反过来,因此给定一个特征分量,在寻找替代分裂的分裂阈值时要让LL+RR或者LR+RL最大化,最后取它们的最大值

该值对应的分裂阈值为替代分裂的分裂阈值。对于除最佳分裂所用特征之外的其他所有特征,都找出该特征的最佳分裂和上面的值。最后取该值最大的那个特征和分裂阈值作为替代分裂规则。

 

4.列举分类问题的分裂评价指标。

熵不纯度。样本集D的熵不纯度定义为

熵用来度量一组数据包含的信息量大小。当样本只属于某一类时熵最小,当样本均匀的分布于所有类中时熵最大。因此,如果能找到一个分裂让熵最小,这就是我们想要的最佳分裂。

Gini不纯度。样本集的Gini不纯度定义为

当样本属于某一类时Gini不纯度的值最小,此时最小值为0;当样本均匀的分布与每一类时Gini不纯度的值最大。

误分类不纯度。样本集的误分类不纯度定义为

之所以这样定义是因为我们会把样本判定为频率最大的那一类,因此其他样本都会被错分,故错误分类率为上面的值。和上面的两个指标一样,当样本只属于某一类时误分类不纯度有最小值0,样本均匀的属于每一类时该值最大。

5.证明当各个类出现的概率相等时,Gini不纯度有极大值;当样本全部属于某一类时,Gini不纯度有极小值。

样本集的Gini不纯度定义为

概率分布必须满足下面的约束条件

构造拉格朗日乘子函数

对所有变量求偏导数,并令其为0,得到下面的方程组

解得

6.ID3用什么指标作为分裂的评价指标?

信息增益。假设用某种分裂规则将样本集D划分为m个不相交的子集,则该划分的信息增益定义为

其意义是划分之后熵的下降值。根据这种定义,ID3训练时的优化目标为

其中T代表决策树,丨T丨为叶子节点数,为第t个叶子节点的训练样本数,为第t个叶子节点的训练样本集的熵。上式右端第一项是每个叶子节点的熵与其训练样本数的乘积,用于保证每个叶子节点的分类准确率尽可能高。第二项为正则化项,用于控制决策树的复杂度。

7.C4.5用什么指标作为分裂的评价指标?

增益率。C4.5是对ID3的改进,使用信息增益率来选择属性,克服了用信息增益选择属性时偏向选择取值多的属性的不足。另外还能够完成对连续属性的离散化处理。增益率定义为

其中G为信息增益,IV为归一化因子,定义为

m其中为类型数。

8.解释决策树训练时寻找最佳分裂的原理。

寻找最佳分裂时需要计算用每个阈值对样本集进行分裂后的指标值,寻找该值最大时对应的分裂,它就是最佳分裂。如果是数值型特征,对于每个特征将l个训练样本按照该特征的值从小到大排序,假设排序后的值为接下来从开始,依次用每个作为阈值,将样本分成左右两部分,计算分裂的指标值,该值最大的那个分裂阈值就是此特征的最佳分裂阈值。在计算出每个特征的最佳分裂阈值和上面的纯度值后,比较所有这些分裂的纯度值大小,该值最大的分裂为所有特征的最佳分裂。

 

9.对于分类问题,叶子节点的值如何设定?对于回归问题,决策树叶子节点的值如何设定?

对于分类树,将叶子节点的值设置成本节点的训练样本集中出现概率最大的那个类。即

对于回归树,则设置为本节点训练样本标签值的均值

10.决策树如何计算特征的重要性?

对每个特征分量在整个决策树中的分裂质量累加求和。对于分类树,分裂质量是Gini纯度值;对于回归树,分裂质量是每次分裂时回归误差的下降值。假设第i个特征分量的分裂质量之和为,然后对所有特征分量求和后分裂质量进行归一化

这个值即为该特征分量的重要性。其中为特征向量的维数。显然该值越大变量越重要。统计所有节点的分裂质量需要对树进行遍历,可以使用任何一种遍历算法。这样做的依据是,如果一个变量被选来做分裂则说明它对分类或者回归很重要,如果它做分裂时的分裂质量很大,说明其对分类或者回归的贡献很大。

11.CART对分类问题和回归问题分别使用什么作为分裂评价指标?

对于分类问题,训练时以基尼系数作为分裂的评价指标;对于回归问题,则用回归误差的下降值作为评价指标。样本集的Gini不纯度定义为

将类概率的计算公式代入Gini不纯度的定义,可以得到简化的计算公式

上面定义的是样本集的不纯度,我们需要评价的是分裂的好坏,因此需要根据样本集的不纯度构造出分裂的不纯度。分裂规则将节点的训练样本集分裂成左右两个子集,分裂的目标是把数据分成两部分之后这两个子集都尽可能的纯,因此我们计算左右子集的不纯度之和作为分裂的不纯度,显然求和需要加上权重,以反映左右两边的训练样本数。由此得到分裂的不纯度计算公式为

其中是左子集的不纯度,是右子集的不纯度,N是总样本数,是左子集的样本数,是右子集的样本数。

如果采用Gini不纯度指标,将Gini不纯度的计算公式代入上式可以得到

其中是左子节点中第i类样本数,是右子节点中第i类样本数。由于N是常数,要让Gini不纯度最小化等价于让下面的值最大化

这个值可以看做是Gini纯度,它的值越大,样本越纯。

 

对于回归树,衡量分裂的标准是回归误差即样本方差,每次分裂时选用使得方差最小化的那个分裂。假设节点的训练样本集有l个样本,其中为特征向量,为实数的标签值。节点的回归值为所有样本的均值,回归误差为所有样本的标签值与回归值的均方和误差,定义为

可以证明,回归值为均值的时候,上面的均方误差最小。把均值的定义带入上式,得到

根据样本集的回归误差,我们同样可以构造出分裂的回归误差。分裂的目标是最大程度的减小回归误差,因此把分裂的误差指标定义为分裂之前的回归误差减去分裂之后左右子树的回归误差

将误差的计算公式代入上式,可以得到:

由于N和是常数,要让上式最大化等价于让下式最大化

寻找最佳分裂时要计算上面的值,让该值最大化的分裂就是最佳分裂。回归树对类别型特征的处理和分类树类似,只是值的计算公式不同,其他的过程相同。

第6章 k近邻算法与距离度量学习

1.简述k近邻算法的预测算法的原理。

对于分类问题,给定l个训练样本,其中为维特征向量,为标签值,设定参数k,假设类型数为c,待分类样本的特征向量为x。预测算法的流程为

在这里表示最大的值对应的那个类i。如果k=1,k近邻算法退化成最近邻算法。

近邻算法也可以用于回归问题。假设离测试样本最近的k个训练样本的标签值为,则对样本的回归预测输出值为

2.简述k的取值对k近邻算法的影响。

如果其值太小,则容易受到噪声的影响,导致泛函性能下降,出现过拟合。如果k值等于训练样数,则对于任意的预测样本,都会将其预测为训练样本集中数量最大的类。

3.距离函数需要满足哪些数学条件?

两个向量之间的距离为,这是一个将两个维数相同的向量映射为一个实数的函数。距离函数必须满足以下4个条件。

第1个条件是非负性,即距离不能是一个负数

这意味着距离函数的值总是大于等于0。

第2个条件是对称性,即A到B的距离和B到A的距离必须相等:

这意味着距离函数是对称函数。

第3个条件是区分性,如果两点间的距离为0,则两个点必须相同

第4个条件是三角不等式

4.列举常见的距离函数。

欧氏距离。即n维欧氏空间中两点之间的距离。对于空间中有两个点x和y,它们之间的距离定义为

Chebyshev距离

Manhattan距离

Minkowski距离

Mahalanobis距离是一种概率意义上的距离,给定两个向量x和y以及矩阵S,它定义为:

有时候也会使用该距离的平方

要保证根号内的值非负,且满足区分性条件,则矩阵S必须是正定的。

Bhattacharyya距离(也称为巴氏距离)定义了两个离散型或连续型概率分布的相似性。对于离散型随机变量的分布,它的定义为:

其中为可以看作两个随机变量取某一值的概率,它们是向量xy的分量,它们的值必须非负。两个向量越相似,这个距离值越小。

5.解释距离度量学习的原理。

通过机器学习的方式得到距离函数。

6.解释LMNN算法的原理。

LMNN寻找一个变换矩阵,使得变换后每个样本的个最近邻居都和它是同一个类,而不同类型的样本通过一个大的间隔被分开。

假设原始的样本点为x,变换之后的点为y,在这里要寻找的是如下线性变换

其中L为线性变换矩阵。首先定义目标邻居的概念。一个样本的目标邻居是和该样本同类型的样本。我们希望通过学习得到的线性变换让样本最接近的邻居就是它的目标邻居表示训练样本是样本的目标邻居。这个概念不是对称的,的目标邻居不等于的目标邻居。

为了保证kNN算法能准确的分类,任意一个样本的目标邻居样本要比其他类别的样本更接近于该样本。对每个样本,我们可以将目标邻居想象成为这个样本建立起了一个边界,使得和本样本标签值不同的样本无法入侵进来。训练样本集中,侵入这个边界并且和该样本不同标签值的样本称为冒充者,这里的目标是最小化冒充者的数量。

为了增强kNN分类的泛化性能,要让冒充者离由目标邻居估计出的边界的距离尽可能的远。通过在kNN决策边界周围加上一个大的安全间隔,可以有效的提高算法的鲁棒性。

接下来定义冒充者的概念。对于训练样本,其标签值为,目标邻居为,冒充者是指那些和有不同的标签值并且满足如下不等式的样本

其中L为线性变换矩阵,左乘这个矩阵相当于对向量进行线性变换。根据上面的定义,冒充者就是闯入了一个样本的分类间隔区域并且和该样本标签值不同的样本。这个线性变换实际上确定了一种距离定义:

其中,就是Mahalanobis距离中的矩阵。训练时优化的损失函数由推损失函数和拉损失函数两部分构成。拉损失函数的作用是让和样本标签相同的样本尽可能与它接近

推损失函数的作用是把不同类型的样本推开

如果,则,否则。函数

定义为

如果两个样本类型相同,则有

因此推损失函数只对不同类型的样本起作用。总损失函数由这两部分的加权和构成

在这里μ是人工设定的参数。求解该最小化问题即可得到线性变换矩阵。

7.解释ITML算法的原理。

ITML的优化目标是在保证同类样本距离相近,不同类样本之间距离远的约束条件下,迫使度量矩阵所代表的正态分布接近于某一先验概率分布。算法使用了信息论中的KL散度,因此得名。这是一种有监督的局部度量学习算法。

假设有n个中的样本点。度量矩阵为A,这里的距离采用马氏距离的平方和。如果两个样本点之间相似,则有如下的不等式约束

即它们之间的距离小于某一较小的阈值。这一约束通常用于同类的样本点之间。反之如果两个样本点之间不相似,则有如下不等式约束

其中l为一个较大的阈值μ。这一约束通常用于不同类的样本点之间。

矩阵A通常要符合某些先验知识。例如,如果数据服从正态分布,则该矩阵为正态分布协方差矩阵的逆矩阵;而对有些场景,欧氏距离平方作为距离函数有很好的效果,此时该矩阵为单位矩阵。因此可以对矩阵A正则化,迫使其尽可能接近于某一已知的马氏距离矩阵

因此需要衡量A与之间的接近程度。如果以度量矩阵作为协方差矩阵的逆矩阵,则此多维正态分布为

其中Z为归一化常数,μ为均值向量,为协方差矩阵。如果将马氏距离所作用的样本集看作服从正态分布,则可以用KL距离衡量二者的差异。根据KL散度的定义,这两个度量矩阵所代表的正态分布之间的KL散度为

因此得到如下优化问题

其中S为相似的样本对的集合,D为不相似的样本对的集合。目标函数为两个矩阵之间的KL散度,实现先验知识。由于都是常数,因此不等式约束为线性约束。

如果定义

如果假设两个正态分布的矩阵相等,则它们之间的KL散度为

从而得到如下的优化问题

8.解释NCA算法的原理。

NCA同样与近邻算法有关。在保证其优化目标是使得每个样本的同类样本被近邻算法正确分类的概率最大化,以此构造目标函数。这是一种有监督的局部度量学习算法。

首先定义每个样本点的邻居的概率分布,是其他样本所有样本是此样本邻居的概率。样本的邻居的概率定义通过softmax归一化进行计算

这两个样本点经过变换之后相距越远则此概率值越小;反之则越大。样本成为其自身的邻居的概率定义为0,即。在对样本点i进行分类时,如果采用这些邻接作为其标签值,则可以计算出样本点被正确分类的概率。定义为样本点i被正确的分类的概率,是它所有同类样本成为其邻居的概率之和

其中为i的同类样本集合,即为样本的类别标签值。NCA的优化目标是所有样本的之和

如果定义向量,则优化变量对A的梯度为

整理后可得

计算出梯度之后可用梯度下降法或其他优化算法进行迭代。

第7章 数据降维

1.使用数据降维算法的目的是什么?

数据降维算法的目标是将向量变换到低维空间中,并保持原始空间中的某些结构信息,以达到某种目的,如避免维数灾难,数据可视化。

 

2.列举常见的数据降维算法。

PCA,KPCA,LDA,KLDA,LLE,拉普拉斯特征映射,局部保持投影,等距映射,SEN,t-SNE,MDS。

 

3.常见的降维算法中,哪些是监督降维,哪些是无监督降维?

LDA和KLDA是有监督的,其他的都是无监督的。

4.什么是流形?

流形是几何中的一个概念,它是高维空间中的几何结构,即空间中的点构成的集合,可以简单的将流形理解成二维空间的曲线,三维空间的曲面在更高维空间的推广。

5.根据最小化重构误差准则推导PCA投影矩阵的计算公式。

最小化如下误差函数

为了求这个函数的极小值,对求偏导数并令其为0可以得到:

变形后得到:

由于e是单位向量,因此,最后得到:

这就是样本和均值的差对向量e做投影。现在的问题是e的值如何选确定。定义如下的散布矩阵

这个矩阵是协方差矩阵的n倍,协方差矩阵的计算公式为

将上面求得的代入目标函数中,得到只有变量e的函数

上式的后半部分和e无关,由于e是单位向量,因此有的约束,这可以写成。要求解的是一个带等式约束的极值问题,可以使用拉格朗日乘数法。构拉格朗日函数:

对e求梯度并令其为0可以得到:

即:

λ就是散度矩阵的特征值,e为它对应的特征向量,因此上面的最优化问题可以归结为矩阵的特征值和特征向量问题。矩阵S的所有特征向量给出了上面极值问题的所有极值点。矩阵S是实对称半正定矩阵。这里需要最大化的值,由于

因此λ为散度矩阵最大的特征值时,有极大值,目标函数取得极小值。将上述结论从一维推广到维,每个向量可以表示成:

在这里都是单位向量,并且相互正交,即寻找低维空间中的标准正交基。误差函数变成:

和一维情况类似,可以证明,使得该函数取最小值的为散度矩阵最大的个特征值对应的单位长度特征向量。即求解下面的优化问题:

其中tr为矩阵的迹,I为单位矩阵,该等式约束保证投影基向量是标准正交基。与一维的情况相同,其解为如下矩阵的特征值

矩阵W的列是要求解的基向量。

6.解释PCA降维算法的流程。

计算投影矩阵的流程:

1.计算样本集的均值向量。将所有向量减去均值,这称为白化。

2.计算样本集的协方差矩阵。

3.对方差矩阵进行特征值分解,得到所有特征值与特征向量。

4.将特征值从大到小排序,保留最大的一部分特征值对应的特征向量,以它们为行,形成投影矩阵。

投影算法的流程:

1.将样本减掉均值向量。

2.左乘投影矩阵,得到降维后的向量。

 

 

7.解释PCA重构算法的流程。

向量重构的流程为:

1.输入向量左乘投影矩阵的转置矩阵。

2.加上均值向量,得到重构后的结果。

 

 

8.解释LLE的原理。

局部线性嵌入将高维数据投影到低维空间中,并保持数据点之间的局部线性关系。其核心思想是每个点都可以由与它相邻的多个点的线性组合来近似重构,投影到低维空间之后要保持这种线性重构关系,即有相同的重构系数。

假设数据集由l个D维向量组成,它们分布在D维空间中的一个流形附近。每个数据点和它的邻居位于或者接近于流形的一个局部线性片段上,即可以用邻居点的线性组合来重构,组合系数刻画了局部面片的几何特性:

权重为第j个数据点对第i个点的组合权重,这些点的线性组合被用来近似重构数据点i。权重系数通过最小化下面的重构误差确定:

在这里还加上了两个约束条件:每个点只由它的邻居来重构,如果不在的邻居集合里则权重值为0。另外限定权重矩阵的每一行元素之和为1,即:

这是一个带约束的优化问题,求解该问题可以得到权重系数。假设算法将向量从D维空间的x映射为d维空间的y。每个点在d维空间中的坐标由下面的最优化问题确定:

这里的权重和上一个优化问题的值相同,在前面已经得到。优化的目标是,这个优化问题等价于求解稀疏矩阵的特征值问题。得到y之后,即完成了从D维空间到d维空间的非线性降维。

9.名词解释:图的拉普拉斯矩阵。

假设图的邻接矩阵为W,加权度矩阵为D。图拉普拉斯矩阵定义为加权度矩阵与邻接矩阵之差

10.解释t-SNE的原理。

t-SNE是对SNE的改进。t-SNE采用了对称的概率计算公式,另外在低维空间中计算样本点之间的概率时使用t分布代替了正态分布。

在SNE中是不相等的,因此概率值不对称。可以用两个样本点的联合概率替代它们之间的条件概率解决此问题。在高维空间中两个样本点的联合概率定义为

显然这个定义是对称的,即。同样的,低维空间中两个点的联合概率为

目标函数采用KL散度,定义为

但这样定义联合概率会存在异常值问题。如果某一个样本是异常点即离其他点很远,则所有的都很大,因此与有关的很小,从而导致低维空间中的对目标函数影响很小。解决方法是重新定义高维空间中的联合概率,具体为

这样能确保对所有的均有

这种方法称为对称SNE。

对称SNE虽然对SNE做了改进,但还存在拥挤问题,各类样本降维后聚集在一起而缺乏区分度。解决方法是用t分布替代高斯分布,计算低维空间中的概率值。相比于正态分布,t分布更长尾。如果在低维空间中使用t分布,则在高维空间中距离近的点,在低维空间中距离也要近;但在高维空间中距离远的点,在低维空间中距离要更远。因此可以有效的拉大各个类之间的距离。使用t分布之后,低维空间中的概率计算公式为

目标函数同样采用KL散度。目标函数对的梯度为

11.解释KPCA的原理。

核主成分分析是核技术与主成分分析相结合的产物,它使用核技术将向量映射到更高维的空间,然后用PCA进行处理。核技术用一个映射(称为核映射)将原始向量变换到另外一个空间,然后进行处理。

 

12.证明图的拉普拉斯矩阵半正定。

根据拉普拉斯矩阵的定义

,并且W是对称矩阵,有

因此拉普拉斯矩阵是半正定的。

13.解释拉普拉斯特征映射的原理。

拉普拉斯特征映射为样本集构造邻接图,计算图的拉普拉斯矩阵,对其进行特征值分解,从而完成数据降维。

算法的第一步是构造样本集的邻接图,保证距离相近的样本之间的边权重更大。

第二步是计算图的拉普拉斯矩阵。

第三步是特征映射。求解如下广义特征值和特征向量问题

假设是这个广义特征值问题的解,它们按照特征值的大小升序排列,即:

去掉值为0的特征值,用剩下的前m个特征向量来构造投影矩阵,将向量投影到以它们为基的空间中。

拉普拉斯特征映射在特定的意义下最好的保留了数据的局部信息。根据一组数据点,我们构造了带权重的图,假设这个图是联通的。首先考虑最简单的情况,将这个图映射到一条直线上,保证相连的点在映射之后靠的越近越好。假设这些点映射之后的坐标为。则目标函数可以采用下面的定义

这个目标函数意味着,如果距离很近,则也必须距离很近,否则会出现大的损失函数值,因为的值很大。反之,如果两个点距离很远,则的值很小,如果距离很远,也不会导致大的损失值。可以证明,对任意的y,下式成立

这个最优化问题可以表述为

这里的等式约束条件消除了投影向量y的缩放,因为y与ky本质上是一个投影结果。矩阵D提供了对图的顶点的一种度量,如果越大,则其对应的第i个顶点提供的信息越大,这也符合我们直观的认识,如果一个顶点连接的边的总权重越大,则其在图里起的作用也越大。上面的问题可以采用拉格朗日乘数法求解,构造拉格朗日乘子函数

对y求梯度并令梯度为0,可以得到

由此可得

下面把这个结果推广到高维,假设将向量投影到维的空间,则投影结果是一个nxm的矩阵,记为,其第i个行为第i个顶点投影后的坐标。仿照一维的情况构造目标函数

这等价于求解如下问题

这个问题的最优解还是上面广义特征值问题的解,是最小的m个广义特征值对应的特征向量。

 

14.解释等距映射的原理。

等距映射(Isomap使用了微分几何中测地线的思想,它希望数据在向低维空间映射之后能够保持流形上的测地线距离。

测地线源自于大地测量学,是地球上任意两点之间在球面上的最短路径。算法计算任意两个样本之间的测地距离,然后根据这个距离构造距离矩阵。最后通过距离矩阵求解优化问题完成数据的降维,降维之后的数据保留了原始数据点之间的距离信息。

在这里测地线距离通过图构造,是图的两个节点之间的最短距离。算法的第一步构造样本集的邻居图,这和前面介绍的两种方法相同。如果两个数据点之间的距离小于指定阈值或者其中一个节点在另外一个节点的邻居集合中,则两个节点是联通的。假设有N个样本,则邻居图有N个节点。邻居图的节点i和j之间边的权重为它们之间的距离,距离的计算公式可以有多种选择。

第二步计算图中任意两点之间的最短路径长度,可以通过经典的Dijkstra算法实现。假设最短路径长度为,由它构造如下矩阵:

其元素是所有节点对之间的最短路径长度。算法的第三步根据矩阵构造维嵌入,这通过求解如下最优化问题实现:

这个问题的解即为降维之后的向量。这个目标函数的意义是向量降维之后任意两点之间的距离要尽量的接近在原始空间中这两点之间的最短路径长度,因此可以认为降维尽量保留了数据点之间的测地距离信息。

 

 

15.PCA是有监督学习还是无监督学习?

无监督学习,因为样本集没有标签值。

 

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲

在「小白学视觉」公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲

在「小白学视觉」公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

  • 0
    点赞
  • 0
    评论
  • 3
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值