开发也能看懂的大模型:降维和度量学习

61 阅读4分钟

降维与度量学习是数据分析与机器学习中的两个重要主题,主要用于高维数据处理、特征选择以及数据关系的建模。


一、降维

1. 什么是降维?

降维是将高维数据映射到低维空间的过程,同时尽量保持数据的主要信息和结构。

  • 目标:简化数据表示,降低计算复杂度,去除冗余特征。

  • 应用场景

    • 数据可视化:将高维数据映射到 2D 或 3D 空间。
    • 数据压缩:减少特征维度,降低存储需求。
    • 降噪:去掉无关或冗余信息,提升模型性能。

2. 常见降维方法

(1)主成分分析(PCA)

通过线性变换将数据投影到方差最大的方向上,找到信息量最大的低维子空间。

  • 核心思想:通过特征值分解或奇异值分解(SVD)找到主成分。
  • 优点:简单、高效。
  • 缺点:仅适用于线性关系,受噪声影响较大。

示例代码

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. 降维中的注意事项

  1. 信息损失

    • 降维可能导致部分特征丢失。
    • 在选择降维方法时需要权衡精度与效率。
  2. 维度诅咒

    • 高维数据中的距离度量和统计特性可能失效。
    • 降维可以缓解这一问题。
  3. 特征选择 vs 特征提取

    • 特征选择:选择部分原始特征。
    • 特征提取:生成新的低维特征。

二、度量学习

1. 什么是度量学习?

度量学习是一种学习合适的距离函数的技术,以更好地反映数据的语义关系。

  • 目标:找到合适的度量(如距离函数),使相似样本的距离更近,不同样本的距离更远。

  • 应用场景

    • 分类任务(如 k 近邻)。
    • 聚类任务。
    • 图像、文本检索。

2. 常见方法

(1)欧几里得距离(默认度量)

直接计算样本在特征空间的几何距离。

image.png

(2)马氏距离

衡量样本之间的相似性,考虑到数据分布的协方差结构。

image.png

(3)对比损失(Contrastive Loss)

用于学习嵌入空间中样本间的距离关系。

image.png

3. 结合度量学习的应用

(1)k 近邻分类(kNN)

kNN 默认使用欧几里得距离,通过度量学习 可以学习 自定义距离提升分类性能。

1. KNN 的基本步骤

  1. 确定距离度量

    • 计算待分类样本与训练集中每个样本之间的距离。

    • 常见的距离度量方法:

      • 欧几里得距离
      • 曼哈顿距离
      • 马氏距离
      • 自定义距离
  2. 选择最近的 K 个邻居

    • 根据距离从小到大排序,选择 K 个最近的邻居。
  3. 投票或加权

    • 分类任务:邻居中占多数的类别作为预测结果。
    • 回归任务:邻居的平均值或加权平均值作为预测值。

2. 举例说明

假设有以下样本数据:

训练集

样本编号特征 X1特征 X2类别
A1.02.00
B2.03.00
C3.03.01
D6.05.01
E7.08.01

测试样本

特征为 (4.0,4.0)

预测过程

  1. 计算距离(使用欧几里得距离):

image.png

  1. 找到最近的 5 个邻居

    • 最近邻居:C(1.41),B(2.24),D(2.24),A(3.61),E(5.0)。
  2. 统计类别

    • 类别 0:2 次(A, B)。
    • 类别 1:3 次(C, D, E)。
  3. 预测结果

    • 投票多数的类别是 1,因此测试样本的预测类别为 1

示例代码

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))


三、降维与度量学习的关系

  1. 降维为度量学习提供基础

    • 降维可以将高维数据映射到低维空间,为后续距离计算或度量学习提供更简单的表示。
  2. 度量学习增强降维效果

    • 通过学习更合适的距离函数,使降维后的空间结构更接近语义关系。

总结

  • 降维:简化高维数据、提取主要特征。
  • 度量学习:优化数据点间的距离关系。
  • 结合应用:降维后的数据更易被用于度量学习,而度量学习可以提升降维后的分类与聚类效果。