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算法可以总结为以下步骤
设置初始配置,随机或非随机。
计算应力
计算Guttman变换
迭代步骤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