降维与度量学习是数据分析与机器学习中的两个重要主题,主要用于高维数据处理、特征选择以及数据关系的建模。
一、降维
1. 什么是降维?
降维是将高维数据映射到低维空间的过程,同时尽量保持数据的主要信息和结构。
-
目标:简化数据表示,降低计算复杂度,去除冗余特征。
-
应用场景:
- 数据可视化:将高维数据映射到 2D 或 3D 空间。
- 数据压缩:减少特征维度,降低存储需求。
- 降噪:去掉无关或冗余信息,提升模型性能。
2. 常见降维方法
(1)主成分分析(PCA)
通过线性变换将数据投影到方差最大的方向上,找到信息量最大的低维子空间。
- 核心思想:通过特征值分解或奇异值分解(SVD)找到主成分。
- 优点:简单、高效。
- 缺点:仅适用于线性关系,受噪声影响较大。
示例代码:
python
from sklearn.decomposition import PCA
import numpy as np
# 示例数据
X = np.random.rand(100, 5) # 100个样本,5个特征
# PCA降维到2维
pca = PCA(n_components=2)
X_reduced = pca.fit_transform(X)
print("原始维度:", X.shape)
print("降维后:", X_reduced.shape)
(2)线性判别分析(LDA)
利用标签信息,通过最大化类间方差与类内方差的比值找到最优投影方向。
- 优点:适用于分类任务,考虑类别信息。
- 缺点:仅适合线性分布的数据。
(3)t-SNE(t-分布随机邻域嵌入)
一种非线性降维方法,适合将高维数据映射到 2D 或 3D,用于可视化。
- 优点:适合非线性数据,能够揭示复杂结构。
- 缺点:计算复杂度高,不适合大规模数据。
3. 降维中的注意事项
-
信息损失:
- 降维可能导致部分特征丢失。
- 在选择降维方法时需要权衡精度与效率。
-
维度诅咒:
- 高维数据中的距离度量和统计特性可能失效。
- 降维可以缓解这一问题。
-
特征选择 vs 特征提取:
- 特征选择:选择部分原始特征。
- 特征提取:生成新的低维特征。
二、度量学习
1. 什么是度量学习?
度量学习是一种学习合适的距离函数的技术,以更好地反映数据的语义关系。
-
目标:找到合适的度量(如距离函数),使相似样本的距离更近,不同样本的距离更远。
-
应用场景:
- 分类任务(如 k 近邻)。
- 聚类任务。
- 图像、文本检索。
2. 常见方法
(1)欧几里得距离(默认度量)
直接计算样本在特征空间的几何距离。

(2)马氏距离
衡量样本之间的相似性,考虑到数据分布的协方差结构。

(3)对比损失(Contrastive Loss)
用于学习嵌入空间中样本间的距离关系。

3. 结合度量学习的应用
(1)k 近邻分类(kNN)
kNN 默认使用欧几里得距离,通过度量学习 可以学习 自定义距离提升分类性能。
1. KNN 的基本步骤
-
确定距离度量:
-
计算待分类样本与训练集中每个样本之间的距离。
-
常见的距离度量方法:
- 欧几里得距离
- 曼哈顿距离
- 马氏距离
- 自定义距离
-
-
选择最近的 K 个邻居:
- 根据距离从小到大排序,选择 K 个最近的邻居。
-
投票或加权:
- 分类任务:邻居中占多数的类别作为预测结果。
- 回归任务:邻居的平均值或加权平均值作为预测值。
2. 举例说明
假设有以下样本数据:
训练集:
样本编号 | 特征 X1 | 特征 X2 | 类别 |
---|---|---|---|
A | 1.0 | 2.0 | 0 |
B | 2.0 | 3.0 | 0 |
C | 3.0 | 3.0 | 1 |
D | 6.0 | 5.0 | 1 |
E | 7.0 | 8.0 | 1 |
测试样本:
特征为 (4.0,4.0)
预测过程:
- 计算距离(使用欧几里得距离):

-
找到最近的 5 个邻居:
- 最近邻居:C(1.41),B(2.24),D(2.24),A(3.61),E(5.0)。
-
统计类别:
- 类别 0:2 次(A, B)。
- 类别 1:3 次(C, D, E)。
-
预测结果:
- 投票多数的类别是 1,因此测试样本的预测类别为 1。
示例代码:
python
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
# 加载数据集
data = load_iris()
X, y = data.data, data.target
# 数据预处理
scaler = StandardScaler()
X = scaler.fit_transform(X)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建 KNN 分类器
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train, y_train)
# 预测
y_pred = knn.predict(X_test)
print("测试集准确率:", knn.score(X_test, y_test))
三、降维与度量学习的关系
-
降维为度量学习提供基础:
- 降维可以将高维数据映射到低维空间,为后续距离计算或度量学习提供更简单的表示。
-
度量学习增强降维效果:
- 通过学习更合适的距离函数,使降维后的空间结构更接近语义关系。
总结
- 降维:简化高维数据、提取主要特征。
- 度量学习:优化数据点间的距离关系。
- 结合应用:降维后的数据更易被用于度量学习,而度量学习可以提升降维后的分类与聚类效果。