局部线性嵌入#

sklearn.manifold.locally_linear_embedding(X, *, n_neighbors, n_components, reg=0.001, eigen_solver='auto', tol=1e-06, max_iter=100, method='standard', hessian_tol=0.0001, modified_tol=1e-12, random_state=None, n_jobs=None)[source]#

对数据执行局部线性嵌入分析。

用户指南 中了解更多信息。

参数:
X{array-like, NearestNeighbors}

样本数据,形状 = (n_samples, n_features),以 numpy 数组或 NearestNeighbors 对象的形式。

n_neighborsint

每个点考虑的邻居数量。

n_componentsint

流形的坐标数。

regfloat, default=1e-3

正则化常数,乘以距离的局部协方差矩阵的迹。

eigen_solver{‘auto’, ‘arpack’, ‘dense’}, default=’auto’

auto : 算法将尝试为输入数据选择最佳方法

arpack使用移位反转模式下的 Arnoldi 迭代。

对于此方法,M 可以是稠密矩阵、稀疏矩阵或一般线性算子。警告:对于某些问题,ARPACK 可能不稳定。最好尝试多个随机种子以检查结果。

dense使用标准稠密矩阵运算进行特征值

分解。对于此方法,M 必须是数组或矩阵类型。对于大型问题,应避免此方法。

tolfloat, default=1e-6

“arpack”方法的容差 如果 eigen_solver==’dense’,则不使用。

max_iterint, default=100

arpack 求解器的最大迭代次数。

method{‘standard’, ‘hessian’, ‘modified’, ‘ltsa’}, default=’standard’
standard使用标准局部线性嵌入算法。

参见参考文献 [1]

hessian使用 Hessian 特征映射方法。此方法需要

n_neighbors > n_components * (1 + (n_components + 1) / 2. 参见参考文献 [2]

modified使用改进的局部线性嵌入算法。

参见参考文献 [3]

ltsa使用局部切空间对齐算法

参见参考文献 [4]

hessian_tolfloat, default=1e-4

Hessian 特征映射方法的容差。仅当 method == ‘hessian’ 时使用。

modified_tolfloat, default=1e-12

改进的 LLE 方法的容差。仅当 method == ‘modified’ 时使用。

random_stateint, RandomState instance, default=None

solver == ‘arpack’ 时确定随机数生成器。传递一个整数以在多次函数调用中获得可重复的结果。参见 词汇表

n_jobsint or None, default=None

为邻居搜索运行的并行作业数。None 表示 1,除非在 joblib.parallel_backend 上下文中。-1 表示使用所有处理器。有关更多详细信息,请参见 词汇表

返回:
Yndarray of shape (n_samples, n_components)

嵌入向量。

squared_errorfloat

嵌入向量的重构误差。等效于 norm(Y - W Y, 'fro')**2,其中 W 是重构权重。

参考文献

[1]

Roweis, S. & Saul, L. 通过局部线性嵌入进行非线性降维。科学 290:2323 (2000)。

[2]

Donoho, D. & Grimes, C. Hessian 特征映射:用于高维数据局部线性嵌入技术。美国国家科学院院刊。100:5591 (2003)。

[4]

Zhang, Z. & Zha, H. 通过切空间对齐进行主流形和非线性降维。上海大学学报。8:406 (2004)

示例

>>> from sklearn.datasets import load_digits
>>> from sklearn.manifold import locally_linear_embedding
>>> X, _ = load_digits(return_X_y=True)
>>> X.shape
(1797, 64)
>>> embedding, _ = locally_linear_embedding(X[:100],n_neighbors=5, n_components=2)
>>> embedding.shape
(100, 2)