局部保留投影(Locality Preserving Projections, LPP)是一种用于数据降维的技术,尤其适用于非线性数据集

LPP的基本思想是在降维过程中尽可能地保持数据点之间的局部结构不变即在高维空间中相邻的数据点,在降维后的低维空间中也应该保持相邻。

假设在高维空间中,数据 X 和 Y 存在相邻关系,在降维后的空间中 X‘ 和 Y’ 关系与原高维空间相同

目标函数

LPP的目标函数是寻找一个投影矩阵 经典子空间学习——局部保留投影(Locality Preserving Projections, LPP)_ci,将高维数据 经典子空间学习——局部保留投影(Locality Preserving Projections, LPP)_相似度_02 投影到低维空间 经典子空间学习——局部保留投影(Locality Preserving Projections, LPP)_ci_03,使得在低维空间中,样本点之间的相对距离尽可能反映它们在高维空间中的局部邻域关系。这通常通过最小化以下目标函数实现:
经典子空间学习——局部保留投影(Locality Preserving Projections, LPP)_ci_04

公式解析

  • 经典子空间学习——局部保留投影(Locality Preserving Projections, LPP)_学习_05: 投影矩阵,我们希望求解的对象。
  • 经典子空间学习——局部保留投影(Locality Preserving Projections, LPP)_权重_06: 数据集中样本的数量。
  • 经典子空间学习——局部保留投影(Locality Preserving Projections, LPP)_ci_07: 投影后的样本点,其中 经典子空间学习——局部保留投影(Locality Preserving Projections, LPP)_学习_08
  • 经典子空间学习——局部保留投影(Locality Preserving Projections, LPP)_权重_09: 欧几里得距离的平方,表示两个投影点之间的距离。
  • 经典子空间学习——局部保留投影(Locality Preserving Projections, LPP)_学习_10: 相似度或权重矩阵的元素,反映了样本经典子空间学习——局部保留投影(Locality Preserving Projections, LPP)_权重_11和样本经典子空间学习——局部保留投影(Locality Preserving Projections, LPP)_权重_12之间的相似度或邻近程度。如果经典子空间学习——局部保留投影(Locality Preserving Projections, LPP)_权重_11经典子空间学习——局部保留投影(Locality Preserving Projections, LPP)_权重_12是邻居,则经典子空间学习——局部保留投影(Locality Preserving Projections, LPP)_学习_10较大;如果不是,则接近于0。

权重矩阵 经典子空间学习——局部保留投影(Locality Preserving Projections, LPP)_ci_16

权重矩阵经典子空间学习——局部保留投影(Locality Preserving Projections, LPP)_ci_16的定义依赖于样本点之间的距离。常见的定义方式有两种:

  1. 使用固定半径 经典子空间学习——局部保留投影(Locality Preserving Projections, LPP)_相似度_18 的邻域:如果两个点之间的距离小于 经典子空间学习——局部保留投影(Locality Preserving Projections, LPP)_相似度_18,则它们被认为是邻居,权重为 经典子空间学习——局部保留投影(Locality Preserving Projections, LPP)_相似度_20,否则权重为0。
  2. 使用 经典子空间学习——局部保留投影(Locality Preserving Projections, LPP)_权重_21-最近邻规则:对于每一个点 经典子空间学习——局部保留投影(Locality Preserving Projections, LPP)_学习_22,找到距离它最近的 经典子空间学习——局部保留投影(Locality Preserving Projections, LPP)_权重_21 个点作为它的邻居,然后计算相应的权重。

解决方法

求解 经典子空间学习——局部保留投影(Locality Preserving Projections, LPP)_ci 通常是通过求解广义特征值问题实现的。具体而言,我们需要构造两个矩阵 经典子空间学习——局部保留投影(Locality Preserving Projections, LPP)_ci_25经典子空间学习——局部保留投影(Locality Preserving Projections, LPP)_学习_26,其中 经典子空间学习——局部保留投影(Locality Preserving Projections, LPP)_ci_25相似度矩阵 经典子空间学习——局部保留投影(Locality Preserving Projections, LPP)_ci_16加权形式,而 经典子空间学习——局部保留投影(Locality Preserving Projections, LPP)_学习_26 是一个单位矩阵减去 经典子空间学习——局部保留投影(Locality Preserving Projections, LPP)_ci_25 。最终的 经典子空间学习——局部保留投影(Locality Preserving Projections, LPP)_ci 是广义特征值问题 经典子空间学习——局部保留投影(Locality Preserving Projections, LPP)_学习_32 的特征向量构成的矩阵,其中经典子空间学习——局部保留投影(Locality Preserving Projections, LPP)_ci_33对角矩阵,包含对应的特征值。

LPP通过上述过程,能够在降维的同时,有效地保持数据的局部几何结构,使其在模式识别、图像分析等领域有广泛的应用。

python代码

import numpy as np
from sklearn.datasets import fetch_lfw_people
from sklearn.decomposition import PCA
from sklearn.neighbors import kneighbors_graph
from scipy.linalg import eigh
import matplotlib.pyplot as plt
import matplotlib
matplotlib.use('TkAgg')  # 或者尝试 'Agg'

# 加载数据
data = fetch_lfw_people(min_faces_per_person=70, resize=0.4)
X = data.data
num_data, num_features = X.shape

# 构建k-最近邻图
connectivity = kneighbors_graph(X, n_neighbors=5, include_self=True)

# 计算拉普拉斯矩阵
laplacian = 0.5 * (connectivity + connectivity.T).toarray()
degree = np.diag(np.sum(laplacian, axis=1))
laplacian = degree - laplacian

# 应用LPP
eigenvalues, eigenvectors = eigh(laplacian, b=degree)
projection_matrix = eigenvectors[:, :2]

# 可视化
plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plt.scatter(X[:, 0], X[:, 1], c=data.target, cmap='rainbow')
plt.title('Original Data')

plt.subplot(1, 2, 2)
plt.scatter(projection_matrix[:, 0], projection_matrix[:, 1], c=data.target, cmap='rainbow')
plt.title('LPP Reduced Data')
plt.show()