smacof#

sklearn.manifold.smacof(dissimilarities, *, metric=True, n_components=2, init=None, n_init='warn', n_jobs=None, max_iter=300, verbose=0, eps=1e-06, random_state=None, return_n_iter=False, normalized_stress='auto')[source]#

使用 SMACOF 算法计算多维缩放。

SMACOF(通过使复杂函数最大化进行缩放)算法是一种多维缩放算法,它使用最大化技术来最小化目标函数(应力)。应力最大化(也称为Guttman变换)保证了应力的单调收敛,并且比传统的梯度下降等技术更强大。

用于度量MDS的SMACOF算法可以总结为以下步骤

  1. 设置初始配置,随机或非随机。

  2. 计算应力

  3. 计算Guttman变换

  4. 迭代步骤2和3直到收敛。

非度量算法在计算应力之前增加了一个单调回归步骤。

参数:
dissimilarities形状为 (n_samples, n_samples) 的类数组对象

点之间的成对不相似性。必须是对称的。

metricbool, default=True

计算度量或非度量SMACOF算法。当 False 时(即非度量MDS),不相似性为0的被视为缺失值。

n_componentsint, default=2

用于嵌入不相似性的维数。如果提供了 init 数组,则此选项将被覆盖,并使用 init 的形状来确定嵌入空间的维数。

init形状为 (n_samples, n_components) 的类数组对象, default=None

用于初始化算法的嵌入起始配置。默认情况下,算法使用随机选择的数组进行初始化。

n_initint, default=8

SMACOF算法将使用不同初始化运行的次数。最终结果将是运行中最佳的输出,由具有最小最终应力的运行确定。如果提供了 init,则此选项将被覆盖,并且只执行一次运行。

版本 1.9 中的变化: n_iter 的默认值将在版本 1.9 中从 8 更改为 1。

n_jobsint, default=None

用于计算的作业数。如果使用多次初始化(n_init),则算法的每次运行都会并行计算。

None 表示 1,除非在 joblib.parallel_backend 上下文中。 -1 表示使用所有处理器。有关更多详细信息,请参阅词汇表

max_iterint, default=300

SMACOF算法单次运行的最大迭代次数。

verboseint, default=0

详细程度。

epsfloat, default=1e-6

收敛容忍度,相对于应力(通过平方嵌入距离的总和归一化),达到此容忍度即宣布收敛。

版本 1.7 中的变化: eps 的默认值已从 1e-3 更改为 1e-6,这是由于收敛准则计算中的一个错误修复。

random_stateint, RandomState instance or None, default=None

确定用于初始化中心的随机数生成器。传递一个整数可在多次函数调用中获得可重现的结果。参见 词汇表

return_n_iterbool, default=False

是否返回迭代次数。

normalized_stressbool or “auto”, default=”auto”

是否返回归一化应力值 (Stress-1) 而不是原始应力。默认情况下,度量MDS返回原始应力,而非度量MDS返回归一化应力。

1.2 版本新增。

版本 1.4 中的变化: 默认值在版本 1.4 中从 False 更改为 "auto"

版本 1.7 中的变化: 现在度量MDS也支持归一化应力。

返回:
Xshape为(n_samples, n_components)的ndarray

点在 n_components 空间中的坐标。

stressfloat

应力的最终值(所有受约束点的差异与距离的平方和)。如果 normalized_stress=True,返回 Stress-1。值为0表示“完美”拟合,0.025表示极好,0.05表示良好,0.1表示一般,0.2表示较差 [1]

n_iter整型

对应于最佳应力的迭代次数。仅当 return_n_iter 设置为 True 时返回。

References

[1]

“Nonmetric multidimensional scaling: a numerical method” Kruskal, J. Psychometrika, 29 (1964)

[2]

“Multidimensional scaling by optimizing goodness of fit to a nonmetric hypothesis” Kruskal, J. Psychometrika, 29, (1964)

[3]

“Modern Multidimensional Scaling - Theory and Applications” Borg, I.; Groenen P. Springer Series in Statistics (1997)

示例

>>> import numpy as np
>>> from sklearn.manifold import smacof
>>> from sklearn.metrics import euclidean_distances
>>> X = np.array([[0, 1, 2], [1, 0, 3], [2, 3, 0]])
>>> dissimilarities = euclidean_distances(X)
>>> Z, stress = smacof(
...     dissimilarities, n_components=2, n_init=1, eps=1e-6, random_state=42
... )
>>> Z.shape
(3, 2)
>>> np.round(stress, 6).item()
3.2e-05