度量空间数据集的本征维度
时间: 2025-01-03 19:42:22 浏览: 16
### 如何计算度量空间中数据集的本征维数
对于度量空间中的数据集,计算其本征维数是一个重要的任务,有助于理解数据的本质结构并指导后续的数据处理工作。一种常用的方法是基于拉普拉斯特征映射的技术来估计本征维数。
#### 构建图模型
为了应用拉普拉斯特征映射技术,首先需要构建一个能够反映数据间相似性的无向加权图G=(V,E),其中顶点集合V代表样本点,边E上的权重w_ij反映了节点i和j之间距离d(i,j)的关系。通常采用热核函数exp(-||xi-xj||²/σ²)作为衡量标准[^1]。
#### 计算拉普拉斯矩阵
接着,根据上述建立起来的邻接矩阵W以及对应的度矩阵D(对角线上元素为各节点连接强度之和),可得到未标准化形式下的图拉普拉斯矩阵L=D-W;或者考虑更稳定的随机游走版本L_rw=I-D⁻¹W或对称归一化版本L_sym=I-D^(-½)WD^(-½)。
#### 特征分解求解最小非零特征值数目
随后执行谱分析过程——即针对选定类型的拉普拉斯矩阵进行特征值分解操作EV(L)=Λ*Φ,这里Λ是对角线含有从小到大排列好的实数值λ_i而Φ则是相应正交基底组成的变换矩阵。理论上讲,在理想情况下当且仅当前m个绝对值较小接近于0的特征根存在时,则认为该组数据的真实内在维度大约等于m+1【注意这里的描述并非严格数学定理而是经验法则】。
```python
import numpy as np
from sklearn.neighbors import kneighbors_graph
from scipy.sparse.linalg import eigsh
def estimate_intrinsic_dimension(X, k_neighbors=5):
"""
Estimate the intrinsic dimension of a dataset using Laplacian eigenmaps.
Parameters:
X (array-like): The input data matrix with shape (n_samples, n_features).
k_neighbors (int): Number of nearest neighbors to consider for constructing graph.
Returns:
int: Estimated intrinsic dimensionality based on number of small non-zero eigenvalues.
"""
# Construct adjacency matrix from KNN graph
A = kneighbors_graph(X, k_neighbors).toarray()
# Compute degree matrix and unnormalized laplacian
D = np.diag(A.sum(axis=1))
L = D - A
# Perform eigenvalue decomposition
evals, _ = eigsh(L, which='SM')
# Count how many near zero eigenvalues exist
tol = 1e-8
num_small_eigenvals = sum(evals < tol)
return num_small_eigenvals + 1
# Example usage
if __name__ == "__main__":
# Generate synthetic manifold embedded in higher dimensional space
from sklearn.datasets import make_swiss_roll
X, color = make_swiss_roll(n_samples=1500)
estimated_dim = estimate_intrinsic_dimension(X=X, k_neighbors=7)
print(f"Estimated Intrinsic Dimension is {estimated_dim}")
```
阅读全文