西瓜书 第十章 降维与度量学习

10.1k近邻学习

k近邻(简称KNN)学习:给定测试样本,基于某种距离度量找出训练集中与其最靠近的k个训练样本,然后基于这k个“邻居”的信息来进行预测。
预测:①(分类任务)投票法,将选择的k个样本中出现最多次的类作为预测结果。
            ②(回归任务)平均法,将k个样本的输出值求平均作为结果。
            ③(回归任务)加权平均法,基于距离远近将k个输出结果加权后作为结果,距离越近权重越大。
懒惰学习:在学习阶段将样本保存起来,收到测试样本后再进行处理。k近邻学习就是其代表,
急切学习:在训练阶段就对样本进行学习处理的方法。

k近邻学习器中k值不同会导致结果的不同,且计算距离方式不同。找出的近邻也会不同从而导致结果的不同,下面暂时假设距离计算“恰当”,我们来看一下不同的k值对结果的影响:
k近邻学习器示例.png

那么对于训练时间开销为0的懒惰学习器其性能如何呢?
对于k=1的最近邻分类器,给定测试样本x,若其最近邻样本为z,则其错误率为x与z标记不一样,即
在假设样本独立同分布的情况下,最后得到的结果是最近邻分类器的错误率不超过贝叶斯最优分类器的错误率的两倍。

10.2低维嵌入

在学习中,我们常常会遇到在高维度的情况下样本稀疏(难以近邻的样本)距离计算困难等问题,被称为“维度灾难”
缓解维度灾难的两个途径:①降维。②特征选择
降维又称为“维数简约”,即通过某种数学变换将原始高维属性空间转变为一个低维“子空间”。

多维缩放(MDS)

目标:原始空间中样本之间的距离在低维空间中得以保持,从而得到在低维空间的样本矩阵。

假定m个样本之间的距离矩阵,其中第i行j列的元素为样本的距离,我们的目标是获得样本在d'维空间的表示,d'且任意两个样本在d'维空间中的欧式距离等于原始空间中的距离,即。
降维后的内积矩阵B:

1.PNG

令降维后的样本矩阵Z被中心化:
2.png

3.png

将上面的等式整理后,我们可以得到降维后样本矩阵Z的内积矩阵B中元素与原始维度中距离矩阵中元素的关系: ,所以我们可以通过矩阵D来求得内积矩阵B。
对矩阵B做特征值分解, ,其中 特征值构成的对角矩阵,有d个非零特征值,降到d'维取其d'个非零特征值,用 表示,则

MDS算法.png

MDS算法,由于降维主要与其他学习方法一起使用,作为数据处理的第一步,很少单独使用,所以这里我就不详细的列出实例,有兴趣的可以参考一下链接的代码实例。

线性降维

定义:基于线性变换来进行降维的方法。

给定d维空间的样本,变换之后得到d'≤d维度空间中的样本其中变换矩阵,是样本在新空间中的表达。

10.3主成分分析(PCA)

PCA本质上是线性降维的一种,通过线性变换,将原空间中的样本投影到低维空间。这是如何实现的呢?PCA是利用一组新的坐标系来投影变换,这组坐标系中的每个基向量都是标准正交基向量。
而要用一个超平面来恰当的表示高维样本似乎有点困难,即要样本在超平面上表现出来而且还要足够分散,所以超平面具有以下两个性质:①最近重构性:样本点到这个超平面的距离足够近,即样本点在超平面附件。②最大可分性:样本点在这个超平面上的投影足够分散,即样本点投影后坐标具有可分性。

基于上面两个性质我们可以得到PCA的两种代价推导:
①基于重构性推导

我先简单介绍一下数学上推导的思路,假设存在一个新坐标系,通过线性变换可以将X样本集合投影到一个新的超平面,而若是舍弃坐标系的部分坐标,即可以将样本投影到低维度的超平面了,然后基于求到的低维度样本坐标,我们通过重构,即将低维度的坐标通过线性变换使其映射到原空间中,通过重构后的坐标来和最开始的样本集合X比较距离大小,即重构后的坐标要尽量的接近原空间坐标。于是我们得到了PCA的优化目标,通过对目标求解就可以得到。

公式和推导.PNG

②基于最大可分性推导

最大可分性就是要样本投影到新坐标系后尽可能分开,即投影后样本点之间的方差最大化。
投影后样本点的协方差矩阵是,所以优化目标为:

2.png

上面的过程为数学推导求PCA最优目标的推导过程,实际上我们在求新坐标时并不需要如此复杂,只需将进行特征值分解即可求出解。

PCA算法.png

那么我们用多少低维维度更合适呢?即d'为多少?
d'可以是人为定义,如果事先的任务已经明确需要多少维度的空间;也可以通过d'值不同的低维空间来对一些开销较小的学习器进行交叉验证,获得较好的d'值。
下面以鸢尾花数据为例,进行降维分类,代码如下:


鸢尾花数据集.png
import matplotlib.pyplot as plt      #加载matplotlib用于数据可视化
from sklearn.decomposition import PCA   #加载PAC算法
from sklearn.datasets import load_iris   #导入鸢尾花数据

data = load_iris()         #字典形式加载数据集
y = data.target           #y为样本标签
x = data.data
pca = PCA(n_components=2)     #设置降维后维度为2
reduced_x=pca.fit_transform(x)     #对样本降维

red_x,red_y = [],[]
blue_x,blue_y = [],[]
green_x,green_y = [],[]

for i in range(len(reduced_x)):      #将降维后的数据按标签分类存入数组中
    if y[i] == 0:
        red_x.append(reduced_x[i][0])
        red_y.append(reduced_x[i][1])
    elif y[i] == 1:
        blue_x.append(reduced_x[i][0])
        blue_y.append(reduced_x[i][1])
    else:
        green_x.append(reduced_x[i][0])
        green_y.append(reduced_x[i][1])

#可视化
plt.scatter(red_x,red_y,c='r',marker='x')     #marker设置点的样式
plt.scatter(blue_x,blue_y,c='b',marker='d')
plt.scatter(green_x,green_y,c='g',marker='3')
plt.show()
运行结果.png

如上图通过将四维的数据降为二维空间从而实现聚类,正如前面所说降维并不是一个单独的算法存在,它通常与其他学习算法一起使用,使用降维先处理数据从而降低其他学习算法的开销。


10.4核化线性函数

线性降维有时候会导致部分信息丢失,如课本中将原本的二维数据映射到三维后再利用线性降维,发现原始的低维结构丢失了,原本的低维空间称为本真低维空间。

例子.png

非线性降维,为了保持本真的低维空间,如核化线性降维(KPCA)利用核技巧对线性降维进行核化。

假定我们将高维特征空间中的数据投影到上:其中是样本点在高维特征空间中的像,。
即假设将原空间的样本点x通过映射,映射到高维空间去,然后在进行PCA降维,但是因为不知道映射具体形式所以引入核函数来对x进行核处理,将原来的线性降维核化从而实现非线性降维。

数学推导过程.png

由于不知道 故引入核函数,                          (10.23)
数学推导过程.png

10.5流形学习

流形:局部与欧式空间同胚的空间,即它在局部具有欧式空间的性质,能用欧式距离来进行距离计算
流形学习:借鉴了拓扑流形概念的降维方法,基于流形这一特性,在局部建立降维映射关系,然后设法将局部映射推广到全局。而当维数降至而二维或者三维时就能对数据进行可视化展示,所以流形学习也用于可视化。主要代表方法有等度量映射和局部线性嵌入。

等度量映射

等距离度量的基本出发点:认为低维流形嵌入高维空间后,直接在高维计算直线距离是具有误导性,因为该距离是不可达的,所以我们可以用测地线距离来表示两点间的距离,因为测地线距离是两点间的本真距离。

那么测地线距离如何计算呢?
利用局部上与欧式空间同胚的性质,对每个点基于欧式距离找出其邻近点,然后就能建立一个近邻连接图,所以计算测地线距离的问题转变为计算邻近连接图上两点间的最短路径。而得到两点间距离后就可以利用MDS方法来获得样本点在低维空间中的坐标。

Isomap算法.png

【注:因为该算法利用了MDS算法来得到低维样本坐标,但是并没有给出投影向量w,所以对于新样本无从下手;解决方法是利用已有的高维坐标和低维坐标一个作为输入一个作为输出来训练一个回归学习器,来对新样本进行降维输出。】
k邻近图的构建:
①指定近邻点个数,如欧式距离最近的k个点为近邻点,称为k近邻图;
②指定距离阈值 ,距离小于阈值的点被认为是近邻点,称为 近邻图。

局部线性嵌入(LLE)

局部线性嵌入试图保持邻域内样本的线性关系。即:在原空间有该线性关系降维后也应该具有该关系。
数学推导思路:通过使样本点与其邻域样本坐标通过线性组合重构的该点间距离最小从而求出重构的系数,假设样本在低维度坐标为,该坐标与其邻域样本点通过线性组合重构的点应该距离最小,因为已知从而来求出。

过程.png
过程.png

LLE算法.png

10.6度量学习

机器学习中,对数据进行降维主要目的就是找到一个适合的低维度空间来进行训练学习,学习的性能比在原空间好;而原高维度空间容易出现维度灾难,从而使得距离计算困难。样本稀疏等问题,所以降维是解决问题的主要途径,也就是降维的目的。
度量学习则是从另一途径来解决维度灾难的,既然高维度距离计算,那就通过学习来得到一个适合的距离度量,这就是度量学习的目的学习一个合适的距离度量。

对于两个d维样本,它们的平方欧式距离为:若属性重要性不同则可以引入权重,得:其中为一个对角矩阵。

由于w的非对角元素均为0,这意味着坐标轴正交,即属性间无关.而实际问题中属性有可能相关的,所以这是的坐标轴不再正交,因此将W换为一个普通的半正定对称矩阵M,于是得到马氏距离:其中M称为“度量矩阵”。
度量学习的目的就是计算出合适的度量矩阵。在实际计算过程中我们可以将M嵌入到近邻分类器评价体系中,通过优化性能指标来求出M。

参考:https://blog.csdn.net/sdm12345/article/details/95335162
https://blog.csdn.net/qq_38825002/article/details/81356377
https://www.jianshu.com/p/2c7e8340decd

你可能感兴趣的:(西瓜书 第十章 降维与度量学习)