10.1 k近邻学习
基本思想:对于测试的样本,基于某种距离度量找到训练集中和测试样本最靠近的k个训练样本,然后基于这k个训练样本来预测。值得注意的是,在分类任务中可使用投票法,回归任务中可使用平均法,此外,还可以进行加权平均或加权投票。
给定测试样本x,设其最近邻样本为z,那么最近邻分类器出错的概率就是x和z类别标记不同的概率,即
对于任意的测试样本,总是能够在任意近的范围内找到训练样本z。令表示贝叶斯最优分类器的结果,有
通过上式可以得出,最近邻分类器的泛化错误率不超过贝叶斯最优分类器错误率的两倍。
10.2 低维嵌入
降维就是通过某种数学变换将高维属性空间转变为低维子空间,从而提高样本密度,也更容易求解距离。如图10.1所示,原始高维空间中的样本点,在低维嵌入子空间中更容易学习

假设m个样本在原始空间的距离矩阵为,其第
行
列的元素
为样本
到
的距离。我们要做的是获得样本在
维空间的表示
,且
。令
,其中B是降维后样本的内积矩阵,
,故有
令Z被中心化,即。那么矩阵B的行和列之和均为零,即
,故
,
,
,
其中tr(.)表示矩阵的迹,,令
,
,
,
可得
,
通过上式可知,可通过降维前后保持距离不变矩阵D求内积矩阵B。求出矩阵的B的特征向量矩阵V,即,其中
,且
。假设其中有
个非零特征值,则Z可表达为
可取个最大特征向量组成对角矩阵
,则Z可表达为
最后进行线性变换,给定d维空间中的样本,变换之后得到
维空间的样本
,
其中是变换矩阵,
是新样本在新空间中的表达。
是原属性向量
在新坐标
中的坐标向量。
降维效果通常是比较降维前后学习器的性能来体现的,如果性能有所提高,那么降维起了作用,当降维到二维或者三维,那么可以可以利用可视化技术来判断降维效果。
10.3 主成分分析
对于正交属性空间中的样本点,若存在这样的超平面,则具有这样的性质
最近重构性:样本点到这个超平面的距离足够近;
最大可分性:样本点在这个超平面上的投影尽可能分开。
假设数据样本已经中心化,即;且投影变换后的新坐标系为
,其中
是标准正交基向量,
,
。如果将维度降低到
,则样本点
在低维坐标系中投影是
,其中
是
在低维坐标系下第
维的坐标。用
重构
,则
。
与
之间的距离为
根据最近重构性,上式被最小化,由于是标准正交基,
是协方差矩阵,故有
10.4 核化线性降维
如下图所示,从二维空间中采样后以S形曲面映射到三维空间中,若采用线性降维方法,那么将丢失原本的低维结构。
核化线性降维是基于核技巧对线性降维方法进行核化,接下来进行核主成分分析(简称KPCA)。假定高维空间中把数据投影到又W确定的超平面上,即
,
其中是样本点
在高维特征空间中的像,可得
,
其中,假设
通过映射
产生
,即
则
,
.
通常情况下,的具体形式我们不得而知,于是引入核函数
.
简化可得
,
其中是
对应的核矩阵,
,
。对上式进行特征值分解,取
最大的
个特征值对应的特征向量。对于新样本x,其投影后的第j维坐标为
,
其中已经过规范化,
是
的第
个分量。
10.5 流形学习
流形学习是一类借鉴了拓扑流形概念的降维方法,如果低维流形嵌入到高维空间中,那么其分布虽然看上去十分复杂,但在局部上仍具有欧式空间的性质。接下来介绍一种著名的流形学习。
等度量映射的观点是,高维空间上的直线距离在低维上不可达,而应是流体上的本真距离。如下图所示,想象一只虫子从一点爬到另一点,不能脱离曲面行走,那么红色曲线才是最短路径。
那么,怎样来计算测地线距离呢?我们对每个点基于欧氏距离找到其近邻点,以此建立一个近邻连接图,计算近邻连接图上两点之间的最短路径,可以采用Dijkstra算法或者Floyd算法。
10.6 实验
主成分分析算法的实现步骤
1.准备数据。准备你要进行PCA的数据集,可以使用任何可用的数据集,如鸢尾花数据集、手写数字数据集等。
2.标准化数据。在进行 PCA 前,通常需要对数据进行标准化,使每个特征的均值为 0,标准差为 1。
3.计算协方差矩阵。计算标准化后数据的协方差矩阵,以便理解特征之间的关系。
4.可视化结果。可以使用 matplotlib 进行可视化,查看降维后的数据。
import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn.datasets import load_iris
# 加载示例数据集,使用鸢尾花数据集
data = load_iris()
X = data.data
y = data.target
# PCA 降维
pca = PCA(n_components=2)
X_reduced = pca.fit_transform(X)
# 可视化结果
plt.figure(figsize=(8, 6))
scatter = plt.scatter(X_reduced[:, 0], X_reduced[:, 1], c=y, cmap='viridis', edgecolor='k')
plt.title('PCA Low-Dimensional Embedding of Iris Dataset')
plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')
plt.colorbar(scatter, label='Classes')
plt.show()
运行上述代码,其运行结果如下: