多维缩放#

class sklearn.manifold.MDS(n_components=2, *, metric=True, n_init=4, max_iter=300, verbose=0, eps=0.001, n_jobs=None, random_state=None, dissimilarity='euclidean', normalized_stress='auto')[source]#

多维缩放。

更多信息请参见用户指南

参数:
n_componentsint, default=2

将差异嵌入的维度数。

metricbool, default=True

如果为True,则执行度量MDS;否则,执行非度量MDS。当为False(即非度量MDS)时,差异为0被视为缺失值。

n_initint, default=4

使用不同初始化运行SMACOF算法的次数。最终结果将是运行中最好的输出,由最终应力最小的运行决定。

max_iterint,默认为300

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

verboseint,默认为0

详细程度。

epsfloat,默认为1e-3

声明收敛时关于应力的相对容差。 eps的值应根据是否使用normalized_stress单独调整。

n_jobsint,默认为None

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

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

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

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

dissimilarity{'euclidean', 'precomputed'},默认为'euclidean'

使用的相异性度量。

  • ‘euclidean’

    数据集里点之间的成对欧几里得距离。

  • ‘precomputed’

    预先计算的相异性直接传递给fitfit_transform

normalized_stressbool 或 “auto” ,默认为“auto”

是否使用并返回归一化应力值(Stress-1),而不是默认计算的原始应力。仅在非度量MDS中受支持。

1.2 版本中新增。

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

属性:
embedding_shape 为 (n_samples, n_components) 的 ndarray

存储数据集中在嵌入空间中的位置。

stress_float

应力的最终值(所有约束点的差异和距离的平方和)。如果normalized_stress=Truemetric=False,则返回 Stress-1。值为 0 表示“完美”拟合,0.025 表示优秀,0.05 表示良好,0.1 表示尚可,0.2 表示差[1]

dissimilarity_matrix_shape 为 (n_samples, n_samples) 的 ndarray

点之间的成对相异性。对称矩阵,

  • 或者通过将dissimilarity设置为 'precomputed' 来使用自定义相异性矩阵;

  • 或者使用欧几里得距离从数据构建相异性矩阵。

n_features_in_int

拟合期间看到的特征数量。

0.24 版本中新增。

feature_names_in_shape 为 (n_features_in_,) 的 ndarray

拟合期间看到的特征名称。仅当X具有全部为字符串的特征名称时定义。

1.0 版本中新增。

n_iter_int

与最佳应力相对应的迭代次数。

另请参见

sklearn.decomposition.PCA

主成分分析是一种线性降维方法。

sklearn.decomposition.KernelPCA

使用核和PCA的非线性降维。

TSNE

t 分布随机邻域嵌入。

Isomap

基于等距映射的流形学习。

LocallyLinearEmbedding

使用局部线性嵌入的流形学习。

SpectralEmbedding

用于非线性降维的光谱嵌入。

参考文献

[1]

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

[2]

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

[3]

“现代多维缩放——理论与应用” Borg, I.; Groenen P. Springer 统计系列 (1997)

示例

>>> from sklearn.datasets import load_digits
>>> from sklearn.manifold import MDS
>>> X, _ = load_digits(return_X_y=True)
>>> X.shape
(1797, 64)
>>> embedding = MDS(n_components=2, normalized_stress='auto')
>>> X_transformed = embedding.fit_transform(X[:100])
>>> X_transformed.shape
(100, 2)

有关更详细的使用示例,请参见多维缩放

有关流形学习技术的比较,请参见流形学习方法的比较

fit(X, y=None, init=None)[source]#

计算点在嵌入空间中的位置。

参数:
Xshape 为 (n_samples, n_features) 或 (n_samples, n_samples) 的 array-like

输入数据。如果dissimilarity=='precomputed',则输入应为相异性矩阵。

y忽略

未使用,根据约定存在以保持 API 一致性。

initshape 为 (n_samples, n_components) 的 ndarray,默认为 None

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

返回值:
selfobject

已拟合的估计器。

fit_transform(X, y=None, init=None)[source]#

拟合来自X的数据,并返回嵌入坐标。

参数:
Xshape 为 (n_samples, n_features) 或 (n_samples, n_samples) 的 array-like

输入数据。如果dissimilarity=='precomputed',则输入应为相异性矩阵。

y忽略

未使用,根据约定存在以保持 API 一致性。

initshape 为 (n_samples, n_components) 的 ndarray,默认为 None

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

返回值:
X_newndarray of shape (n_samples, n_components)

在新的空间中转换后的X。

get_metadata_routing()[source]#

获取此对象的元数据路由。

请查看用户指南,了解路由机制的工作原理。

返回值:
routingMetadataRequest

一个MetadataRequest 封装了路由信息。

get_params(deep=True)[source]#

获取此估计器的参数。

参数:
deepbool, default=True

如果为 True,则将返回此估计器和包含的作为估计器的子对象的参数。

返回值:
paramsdict

参数名称映射到其值。

set_fit_request(*, init: bool | None | str = '$UNCHANGED$') MDS[source]#

请求传递给fit方法的元数据。

请注意,只有在enable_metadata_routing=True时(请参见sklearn.set_config),此方法才相关。请参阅用户指南,了解路由机制的工作原理。

每个参数的选项为

  • True:请求元数据,如果提供则传递给fit。如果未提供元数据,则忽略请求。

  • False:不请求元数据,元估计器不会将其传递给fit

  • None:不请求元数据,如果用户提供元数据,则元估计器将引发错误。

  • str:元数据应使用此给定的别名而不是原始名称传递给元估计器。

默认值(sklearn.utils.metadata_routing.UNCHANGED)保留现有的请求。这允许您更改某些参数的请求而无需更改其他参数。

在 1.3 版中添加。

注意

仅当此估计器用作元估计器的子估计器时(例如,在Pipeline内部使用),此方法才相关。否则,它无效。

参数:
initstr, True, False, 或 None, default=sklearn.utils.metadata_routing.UNCHANGED

fitinit 参数的元数据路由。

返回值:
selfobject

更新后的对象。

set_params(**params)[source]#

设置此估计器的参数。

此方法适用于简单的估计器以及嵌套对象(例如Pipeline)。后者具有<component>__<parameter>形式的参数,因此可以更新嵌套对象的每个组件。

参数:
**paramsdict

估计器参数。

返回值:
selfestimator instance

估计器实例。