smacof#

sklearn.manifold.smacof(dissimilarities, *, metric=True, n_components=2, init=None, n_init=8, n_jobs=None, max_iter=300, verbose=0, eps=0.001, random_state=None, return_n_iter=False, normalized_stress='auto')#

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

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

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

  1. 设置一个初始开始配置,随机或不随机。

  2. 计算stress

  3. 计算Guttman变换

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

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

Parameters:
dissimilarities形状为(n_samples, n_samples)的类数组

点之间的成对不相似度。必须是symmetric的。

metricbool, 默认=True

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

n_componentsint, 默认=2

沉浸不相似度的维度数量。如果提供了 init 数组,此选项将被覆盖,并且 init 的形状将用于确定嵌入空间的维度。

init形状为(n_samples, n_components)的类数组, 默认=None

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

n_initint, 默认=8

SMACOF算法将以不同的初始化运行多次。最终结果将是运行中最终stress最小的最佳输出。如果提供了 init ,此选项将被覆盖并且只执行一次运行。

n_jobsint, 默认=None

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

None 意味着1,除非在:obj:joblib.parallel_backend 上下文中。 -1 意味着使用所有处理器。有关更多详细信息,请参见:term:Glossary <n_jobs>

max_iterint, 默认=300

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

verboseint, 默认=0

详细级别。

epsfloat, 默认=1e-3

相对于stress的相对容差,用于声明收敛。 eps 的值应单独调整,具体取决于是否使用 normalized_stress

random_stateint, RandomState实例或None, 默认=None

确定用于初始化中心的随机数生成器。传递一个int以在多次函数调用中获得可重复的结果。请参见:term:Glossary <random_state>

return_n_iterbool, 默认=False

是否返回迭代次数。

normalized_stressbool或”auto” 默认=”auto”

是否使用并返回标准化stress值(Stress-1)而不是默认计算的原始stress。仅在非度量MDS中支持。

Added in version 1.2.

Changed in version 1.4: 默认值从 False 更改为 "auto" 在版本1.4中。

Returns:
X形状为(n_samples, n_components)的ndarray

n_components 空间中点的坐标。

stressfloat

stress的最终值(所有约束点的差异和距离的平方距离之和)。 如果 normalized_stress=True ,并且 metric=False 返回Stress-1。值为0表示“完美”拟合,0.025表示优秀,0.05表示良好,0.1表示一般,0.2表示较差[R8e3dcaa71efe-1]_。

n_iterint

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

References

[1]

“非度量多维缩放:一种数值方法” Kruskal, J. Psychometrika, 29 (1964)

[2]

“通过优化拟合非度量假设的多维缩放” Kruskal, J. Psychometrika, 29, (1964)

[3]

“现代多维缩放——理论与应用” Borg, I.; Groenen P. Springer Series in Statistics (1997)

Examples

>>> 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)
>>> mds_result, stress = smacof(dissimilarities, n_components=2, random_state=42)
>>> mds_result
array([[ 0.05... -1.07... ],
       [ 1.74..., -0.75...],
       [-1.79...,  1.83...]])
>>> stress
0.0012...