无监督学习之降维代码实现

主成分分析(PCA)降维

PCA是一种常用的线性降维方法,通过正交变换将高维数据投影到低维空间。以下是使用sklearn实现PCA的代码示例:

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_pca = pca.fit_transform(X)

# 输出降维后的数据形状
print("降维后的数据形状:", X_pca.shape)

t-SNE降维

t-SNE是一种非线性降维方法,特别适合可视化高维数据。以下是t-SNE的实现代码:

from sklearn.manifold import TSNE

# 使用之前生成的X数据
tsne = TSNE(n_components=2, perplexity=30, random_state=42)

# 执行降维
X_tsne = tsne.fit_transform(X)

# 输出结果
print("t-SNE降维结果:", X_tsne.shape)

自编码器降维

自编码器是神经网络的一种,可用于非线性降维。以下是使用Keras实现的简单自编码器:

from keras.layers import Input, Dense
from keras.models import Model

# 定义编码器维度
encoding_dim = 2  # 降维到2维

# 输入层
input_img = Input(shape=(5,))  # 对应5个特征

# 编码层
encoded = Dense(encoding_dim, activation='relu')(input_img)

# 解码层
decoded = Dense(5, activation='sigmoid')(encoded)

# 构建自编码器模型
autoencoder = Model(input_img, decoded)

# 编译模型
autoencoder.compile(optimizer='adam', loss='mse')

# 训练模型
autoencoder.fit(X, X, epochs=50, batch_size=32)

# 提取编码器部分用于降维
encoder = Model(input_img, encoded)
X_encoded = encoder.predict(X)

print("自编码器降维结果:", X_encoded.shape)

局部线性嵌入(LLE)降维

LLE是另一种非线性降维方法,保持局部邻域关系。以下是实现代码:

from sklearn.manifold import LocallyLinearEmbedding

# 初始化LLE模型
lle = LocallyLinearEmbedding(n_components=2, n_neighbors=10)

# 执行降维
X_lle = lle.fit_transform(X)

# 输出结果
print("LLE降维结果:", X_lle.shape)

奇异值分解(SVD)降维

SVD是矩阵分解技术,可用于降维。以下是实现代码:

from sklearn.decomposition import TruncatedSVD

# 初始化SVD
svd = TruncatedSVD(n_components=2)

# 执行降维
X_svd = svd.fit_transform(X)

# 输出结果
print("SVD降维结果:", X_svd.shape)

以上代码示例涵盖了无监督学习中常用的几种降维方法,可以根据具体需求选择合适的方法。每种方法都有其特点和适用场景,PCA适合线性数据,t-SNE和LLE适合非线性数据,自编码器适合复杂的高维数据。

三、无监督学习与降维概述

  • 无监督学习的定义与核心目标
  • 降维在无监督学习中的意义与应用场景
  • 降维技术的分类(线性与非线性方法)

四、线性降维技术

  • 主成分分析(PCA)
    • 数学原理:协方差矩阵与特征值分解
    • 步骤:标准化、计算主成分、投影降维
    • 代码示例(Python+sklearn):
      from sklearn.decomposition import PCA  
      pca = PCA(n_components=2)  
      X_reduced = pca.fit_transform(X)  
      

  • 线性判别分析(LDA)
    • 与PCA的区别:监督性降维与类别可分性
    • 核心公式:类内散度矩阵与类间散度矩阵

五、非线性降维技术

  • t-SNE(t分布随机邻域嵌入)
    • 原理:高维空间相似性转为低维概率分布
    • 特点:适合可视化,但计算复杂度高
  • UMAP(统一流形逼近与投影)
    • 优势:保留全局结构,速度优于t-SNE
    • 参数调优:n_neighborsmin_dist

六、降维评估与挑战

  • 评估指标:重构误差、方差解释率、可视化效果
  • 常见问题:维度灾难、过拟合、非线性数据适应性
  • 实际应用案例:图像压缩、基因序列分析

七、前沿进展与工具推荐

  • 深度学习结合降维:自动编码器(Autoencoder)
  • 开源工具对比:sklearn、TensorFlow、RAPIDS cuML
  • 未来方向:可解释性降维与动态数据适应

以下是关于“人工智能机器学习基础篇——无监督学习之降维”的中文文献推荐及相关内容整理:


核心文献推荐

  1. 《机器学习》周志华著

    • 第10章专门介绍降维与度量学习,涵盖主成分分析(PCA)、核化线性降维等经典方法,理论推导清晰,适合基础学习。
  2. 《统计学习方法》李航著

    • 第16章讨论主成分分析(PCA)及奇异值分解(SVD)的数学原理,侧重统计视角的降维技术。
  3. 《无监督学习中的降维方法综述》(《计算机学报》,2018)

    • 系统对比线性降维(如PCA、LDA)与非线降维(如t-SNE、LLE)的优缺点及应用场景。

经典降维方法详解

主成分分析(PCA)

  • 通过正交变换将高维数据投影到低维子空间,保留最大方差方向。核心公式为特征值分解:
    [ \Sigma = \frac{1}{n} X^T X = V \Lambda V^T ]
    其中 $\Sigma$ 是协方差矩阵,$V$ 为特征向量矩阵。

t-SNE(t分布随机邻域嵌入)

  • 适用于高维数据可视化,通过优化KL散度保留局部结构。关键步骤包括计算高维/低维空间的条件概率:
    [ p_{j|i} = \frac{\exp(-|x_i - x_j|^2 / 2\sigma_i^2)}{\sum_{k \neq i} \exp(-|x_i - x_k|^2 / 2\sigma_i^2)} ]

应用场景与工具

  • 图像处理:PCA用于人脸识别(Eigenfaces)。
  • 文本挖掘:潜在语义分析(LSA)降低词向量维度。
  • 工具实现
    from sklearn.decomposition import PCA
    pca = PCA(n_components=2)
    X_reduced = pca.fit_transform(X)
    


前沿研究方向

  1. 自编码器(Autoencoder)
    • 通过神经网络学习低维表示,适用于非线性数据。
  2. 图嵌入降维
    • 如GraphSAGE,处理社交网络等图结构数据。

如需更具体的文献或代码实现细节,可进一步说明需求方向。

无监督学习之降维详解

降维是无监督学习中的重要技术,旨在减少数据特征数量,同时保留关键信息。其核心目标是解决“维数灾难”,提升计算效率并揭示数据结构。

降维的核心概念

高维数据常包含冗余或噪声,降维通过线性或非线性方法将数据映射到低维空间。关键评估标准是信息保留程度,通常用方差解释率衡量。

  • 维数灾难:随着维度增加,数据稀疏性导致距离计算失效,模型性能下降。
  • 特征相关性:高维数据中许多特征可能高度相关,降维可消除冗余。
主成分分析(PCA)

PCA是最常用的线性降维方法,通过正交变换将数据投影到方差最大的方向。数学表达如下:

给定中心化数据矩阵 ( X ),协方差矩阵 ( C = \frac{1}{n} X^T X )。PCA求解 ( C ) 的特征值和特征向量:

[ C = V \Lambda V^T ]

其中 ( \Lambda ) 为特征值对角矩阵,( V ) 为特征向量矩阵。选择前 ( k ) 大特征值对应的特征向量构成投影矩阵 ( W ),降维结果为 ( Z = XW )。

代码示例(Python)

from sklearn.decomposition import PCA
pca = PCA(n_components=2)
X_reduced = pca.fit_transform(X)
print("解释方差比:", pca.explained_variance_ratio_)

t-SNE非线性降维

t-SNE(t-分布随机邻域嵌入)适合可视化高维数据,通过保留局部相似性将数据映射到2D或3D空间。其核心是优化KL散度:

[ KL(P||Q) = \sum_i \sum_j p_{ij} \log \frac{p_{ij}}{q_{ij}} ]

其中 ( p_{ij} ) 是高维空间相似度,( q_{ij} ) 是低维空间相似度。

代码示例

from sklearn.manifold import TSNE
tsne = TSNE(n_components=2, perplexity=30)
X_embedded = tsne.fit_transform(X)

自编码器(AE)

自编码器通过神经网络实现非线性降维,包含编码器和解码器两部分。编码器将输入压缩为低维表示,解码器尝试重建原始输入。损失函数为:

[ \mathcal{L}(x, x') = |x - x'|^2 ]

代码框架

from keras.layers import Input, Dense
from keras.models import Model

input_dim = X.shape[1]
encoding_dim = 2

input_layer = Input(shape=(input_dim,))
encoder = Dense(encoding_dim, activation='relu')(input_layer)
decoder = Dense(input_dim, activation='sigmoid')(encoder)
autoencoder = Model(inputs=input_layer, outputs=decoder)
autoencoder.compile(optimizer='adam', loss='mse')
autoencoder.fit(X, X, epochs=50)

降维技术对比
方法 类型 保留特性 计算复杂度 适用场景
PCA 线性 全局方差 ( O(n^3) ) 特征提取、去噪
t-SNE 非线性 局部结构 ( O(n^2) ) 数据可视化
自编码器 非线性 数据流形 依赖网络 复杂结构学习
实践建议
  • 数据预处理:标准化数据(均值0,方差1)对PCA等线性方法至关重要
  • 维度选择:通过碎石图观察特征值下降拐点,或设定累计方差阈值(如95%)
  • 评估方法:对于聚类任务,可对比降维前后聚类性能;对于可视化,观察类别分离程度

降维技术选择需结合具体任务需求。线性方法计算高效适合初步探索,非线性方法能捕捉复杂结构但计算成本较高。实际应用中常组合多种方法,如先用PCA降维到中等维度再用t-SNE可视化。

Logo

更多推荐