pairwise_distances#

sklearn.metrics.pairwise_distances(X, Y=None, metric='euclidean', *, n_jobs=None, force_all_finite=True, **kwds)#

计算从向量数组X和可选的Y的距离矩阵。

该方法接受一个向量数组或一个距离矩阵,并返回一个距离矩阵。 如果输入是一个向量数组,则计算距离。 如果输入是一个距离矩阵,则直接返回。 如果输入是一个非数值数据的集合(例如,字符串列表或布尔数组),则必须传递一个自定义度量。

该方法提供了一种安全的方式来接受距离矩阵作为输入,同时保持与其他接受向量数组的算法的兼容性。

如果给定Y(默认是None),则返回的矩阵是X和Y数组之间的成对距离。

metric的有效值包括:

  • 来自scikit-learn:[‘cityblock’, ‘cosine’, ‘euclidean’, ‘l1’, ‘l2’, ‘manhattan’]。这些度量支持稀疏矩阵输入。 [‘nan_euclidean’]但不支持稀疏矩阵。

  • 来自scipy.spatial.distance:[‘braycurtis’, ‘canberra’, ‘chebyshev’, ‘correlation’, ‘dice’, ‘hamming’, ‘jaccard’, ‘kulsinski’, ‘mahalanobis’, ‘minkowski’, ‘rogerstanimoto’, ‘russellrao’, ‘seuclidean’, ‘sokalmichener’, ‘sokalsneath’, ‘sqeuclidean’, ‘yule’] 有关这些度量的详细信息,请参阅scipy.spatial.distance的文档。这些度量不支持稀疏矩阵输入。

Note

'kulsinski' 在SciPy 1.9中已弃用,并将在SciPy 1.11中移除。

Note

'matching' 在SciPy 1.9中已移除(请改用 'hamming' )。

请注意,在’cityblock’、’cosine’和’euclidean’的情况下(这些是有效的scipy.spatial.distance度量),将使用scikit-learn的实现,该实现更快且支持稀疏矩阵(’cityblock’除外)。有关scikit-learn度量的详细描述,请参阅:func:sklearn.metrics.pairwise.distance_metrics 函数。

更多信息请参阅:ref:用户指南 <metrics>

Parameters:
X{array-like, sparse matrix} of shape (n_samples_X, n_samples_X) or (n_samples_X, n_features)

样本之间的成对距离数组,或特征数组。 如果metric == “precomputed”,数组的形状应为(n_samples_X, n_samples_X),否则为(n_samples_X, n_features)。

Y{array-like, sparse matrix} of shape (n_samples_Y, n_features), default=None

可选的第二个特征数组。仅在metric != “precomputed”时允许。

metricstr or callable, default=’euclidean’

在特征数组中的实例之间计算距离时使用的度量。如果metric是字符串,则必须是scipy.spatial.distance.pdist的metric参数允许的选项之一,或 pairwise.PAIRWISE_DISTANCE_FUNCTIONS 中列出的度量。 如果metric是”precomputed”,则假定X是一个距离矩阵。 或者,如果metric是一个可调用函数,则它会在每对实例(行)上调用,并记录返回的值。可调用函数应接受X中的两个数组作为输入,并返回表示它们之间距离的值。

n_jobsint, default=None

用于计算的作业数。通过将成对矩阵分解为n_jobs个均匀切片并在并行中计算它们来工作。

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

“euclidean”和”cosine”度量严重依赖于BLAS,而BLAS已经是多线程的。因此,增加 n_jobs 可能会导致过度订阅并迅速降低性能。

force_all_finitebool or ‘allow-nan’, default=True

是否在数组中引发np.inf、np.nan、pd.NA的错误。对于 pairwise.PAIRWISE_DISTANCE_FUNCTIONS 中列出的度量忽略。可能的值包括:

  • True: 强制数组中的所有值为有限。

  • False: 接受数组中的np.inf、np.nan、pd.NA。

  • ‘allow-nan’: 仅接受数组中的np.nan和pd.NA值。值不能为无限。

Added in version 0.22: force_all_finite 接受字符串 'allow-nan'

Changed in version 0.23: 接受 pd.NA 并将其转换为 np.nan

**kwds可选的关键字参数

任何进一步的参数都直接传递给距离函数。如果使用scipy.spatial.distance度量,参数仍然是度量依赖的。请参阅scipy文档以获取使用示例。

Returns:
Dndarray of shape (n_samples_X, n_samples_X) or (n_samples_X, n_samples_Y)

一个距离矩阵D,使得D_{i, j}是给定矩阵X的第i和第j个向量之间的距离,如果Y是None。 如果Y不是None,则D_{i, j}是X中的第i个数组和Y中的第j个数组之间的距离。

See also

pairwise_distances_chunked

执行与此函数相同的计算,但返回距离矩阵块的生成器,以限制内存使用。

sklearn.metrics.pairwise.paired_distances

计算两个数组对应元素之间的距离。

Examples

>>> from sklearn.metrics.pairwise import pairwise_distances
>>> X = [[0, 0, 0], [1, 1, 1]]
>>> Y = [[1, 0, 0], [1, 1, 0]]
>>> pairwise_distances(X, Y, metric='sqeuclidean')
array([[1., 2.],
       [2., 1.]])