成对距离#
- sklearn.metrics.pairwise_distances(X, Y=None, metric='euclidean', *, n_jobs=None, force_all_finite='deprecated', ensure_all_finite=None, **kwds)[source]#
计算向量数组 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 的文档。这些度量不支持稀疏矩阵输入。
注意
'kulsinski'
已在 SciPy 1.9 中弃用,并将在 SciPy 1.11 中移除。注意
'matching'
已在 SciPy 1.9 中移除(请改用'hamming'
)。请注意,对于 'cityblock'、'cosine' 和 'euclidean'(它们是有效的 scipy.spatial.distance 度量),将使用 scikit-learn 实现,它更快并且支持稀疏矩阵('cityblock' 除外)。有关 scikit-learn 度量的详细说明,请参阅
sklearn.metrics.pairwise.distance_metrics
函数。在 用户指南 中了解更多信息。
- 参数:
- X形状为 (n_samples_X, n_samples_X) 或 (n_samples_X, n_features) 的 {array-like, sparse matrix}
样本之间的成对距离数组,或特征数组。如果 metric == “precomputed”,则数组的形状应为 (n_samples_X, n_samples_X),否则为 (n_samples_X, n_features)。
- Y形状为 (n_samples_Y, n_features) 的 {array-like, sparse matrix},默认为 None
可选的第二个特征数组。仅当 metric != “precomputed” 时才允许。
- metricstr 或 callable,默认为 'euclidean'
计算特征数组中实例之间距离时使用的度量。如果 metric 是字符串,则它必须是 scipy.spatial.distance.pdist 对其 metric 参数允许的选项之一,或者是在
pairwise.PAIRWISE_DISTANCE_FUNCTIONS
中列出的度量。如果 metric 为“precomputed”,则假设 X 是距离矩阵。或者,如果 metric 是可调用函数,则会对每一对实例(行)调用它,并记录结果值。可调用对象应将 X 中的两个数组作为输入,并返回一个值,指示它们之间的距离。- n_jobsint,默认为 None
用于计算的作业数。这是通过将成对矩阵分解成 n_jobs 个均匀切片并使用多线程计算它们来实现的。
None
表示 1,除非在joblib.parallel_backend
上下文中。-1
表示使用所有处理器。有关更多详细信息,请参阅 词汇表。“euclidean”和“cosine”度量严重依赖于 BLAS,而 BLAS 已经是多线程的。因此,增加
n_jobs
可能会导致过度订阅并迅速降低性能。- force_all_finitebool 或 'allow-nan',默认为 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 值。值不能是无穷大。
版本 0.22 中添加:
force_all_finite
接受字符串'allow-nan'
。版本 0.23 中更改: 接受
pd.NA
并将其转换为np.nan
。版本 1.6 中弃用:
force_all_finite
已重命名为ensure_all_finite
,并将从 1.8 中移除。- ensure_all_finitebool 或 'allow-nan',默认为 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 值。值不能是无穷大。
版本 1.6 中添加:
force_all_finite
已重命名为ensure_all_finite
。- **kwds可选关键字参数
任何其他参数都将直接传递给距离函数。如果使用 scipy.spatial.distance 度量,则参数仍然取决于度量。有关用法示例,请参阅 scipy 文档。
- 返回:
- D形状为 (n_samples_X, n_samples_X) 或 (n_samples_X, n_samples_Y) 的 ndarray
距离矩阵 D,使得如果 Y 为 None,则 D_{i, j} 是给定矩阵 X 的第 i 个和第 j 个向量之间的距离。如果 Y 不为 None,则 D_{i, j} 是 X 的第 i 个数组与 Y 的第 j 个数组之间的距离。
另请参见
分块成对距离 (pairwise_distances_chunked)
执行与该函数相同的计算,但返回距离矩阵块的生成器,以限制内存使用。
sklearn.metrics.pairwise.paired_distances
计算两个数组中对应元素之间的距离。
示例
>>> 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.]])