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算法可以总结为以下步骤:
设置一个初始开始配置,随机或不随机。
计算stress
计算Guttman变换
迭代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...