sklearn.neighbors.DistanceMetric¶
class sklearn.neighbors.DistanceMetric
DistanceMetric类。
此类为快速距离度量功能提供统一的接口。 可以通过get_metric类方法和度量标准字符串标识符(请参见下文)访问各种度量标准。
示例
>>> from sklearn.neighbors import DistanceMetric
>>> dist = DistanceMetric.get_metric('euclidean')
>>> X = [[0, 1, 2],
[3, 4, 5]]
>>> dist.pairwise(X)
array([[ 0. , 5.19615242],
[ 5.19615242, 0. ]])
可用指标
以下列出了字符串指标标识符和关联的距离指标类别:
用于实值向量空间的度量标准:
识别码 | 类名 | args | 距离函数 |
---|---|---|---|
“euclidean” | 欧几里得距离 | . | sqrt(sum((x - y)^2)) |
“manhattan” | 曼哈顿距离 | . | sum(|x-y|) |
“chebyshev” | 切比雪夫距离 | . | max(|x-y|) |
“minkowski” | 明可夫斯基距离 | p | sum(|x-y|^p)^^(1/p) |
“wminkowski” | WMinkowski距离 | p, w | sum(|w * (x - y)|^^p)^^(1/p) |
“seuclidean” | 欧氏距离 | V | sqrt(sum((x - y)^2 / V)) |
“mahalanobis” | 马氏距离 | V or VI | sqrt((x - y)' V^-1 (x - y)) |
用于二维向量空间的度量:请注意,haversine距离度量标准需要[纬度,经度]形式的数据,并且输入和输出均以弧度为单位。
识别码 | 类名 | 距离函数 |
---|---|---|
“haversine” | Haversine距离 | 2 arcsin(sqrt(sin^2(0.5*dx) + cos(x1)cos(x2)sin^2(0.5*dy)) |
用于整数值向量空间的度量标准:尽管打算用于整数值向量,但在实值向量的情况下,它们也是有效的指标。
识别码 | 类名 | 距离函数 |
---|---|---|
“hamming” | 汉明距离 | N_unequal(x, y) / N_tot |
“canberra” | 堪培拉距离 | sum(|x-y|/(|x|+|y|)) |
“braycurtis” | 布雷·科蒂斯距离 | sum(|x-y|)/(sum(|x)+sum(|y|)) |
用于布尔值向量空间的指标:任何非零条目都将评估为“ True”。 在下面的清单中,使用以下缩写:
N : 尺寸数 NTT : 两个值均为True的暗点数 NTF : 第一个为True,第二个为False的暗数 NFT : 第一个值为False,第二个为True的暗点数 NFF : 两个值均为False的暗点数 NNEQ : 不相等尺寸的数量,NEW = NFT + NFT NNZ : 非零尺寸的数量,NNZ = NTF + NFT + NTT
识别码 | 类名 | 距离函数 |
---|---|---|
“jaccard” | 提卡距离 | NNEQ / NNZ |
“matching” | 匹配距离 | NNEQ / N |
“dice” | 骰子距离 | NNEQ / (NTT + NNZ) |
“kulsinski” | 库尔辛斯基距离 | (NNEQ + N - NTT) / (NNEQ + N) |
“rogerstanimoto” | 罗杰斯·谷本距离 | 2 * NNEQ / (N + NNEQ) |
“russellrao” | 拉塞尔距离 | NNZ / N |
“sokalmichener” | 索卡尔·米歇纳距离 | 2 * NNEQ / (N + NNEQ) |
“sokalsneath” | 索卡尔潜行距离 | NNEQ / (NNEQ + 0.5 * NTT) |
用户定义的距离:
识别码 | 类名 | args |
---|---|---|
“pyfunc” | PyFuncDistance | func |
这里的func是一个函数,它接受两个一维numpy数组,并返回一个距离。 请注意,为了在BallTree中使用该距离,必须是一个真实的指标:即它必须满足以下属性
非负性:d(x,y)> = 0 定义:当且仅当x == y时,d(x,y)= 0 对称性:d(x,y)= d(y,x) 三角不等式: d(x, y) + d(y, z) >= d(x, z)
由于调用python函数涉及Python对象开销,因此这将相当慢,但是它将具有与其他距离相同的缩放比例。
方法
方法 | 说明 |
---|---|
dist_to_rdist () |
将真实距离转换为缩小的距离。 |
get_metric () |
从字符串标识符获取给定的距离度量。 |
pairwise () |
计算X和Y之间的成对距离 |
rdist_to_dist () |
将缩小的距离转换为真实距离。 |
__init__(*args, **kwargs)
初始化. 请参阅help(type())以获得准确的说明。
dist_to_rdist()
将真实距离转换为缩小的距离。
为某些度量标准定义的减小的距离是一种计算上更有效的度量,可以保留真实距离的等级。 例如,在欧几里得距离度量标准中,减小的距离是欧几里德距离的平方。
get_metric()
从字符串标识符获取给定的距离度量。
有关可用度量的列表,请参见DistanceMetric的文档字符串。
参数 | 说明 |
---|---|
metric | string or class name 使用的距离度量 |
**kwargs | 其他参数将传递到请求的指标 |
pairwise()
计算X和Y之间的成对距离
为了测试,这是一个方便的例程。 对于许多指标,scipy.spatial.distance.cdist和scipy.spatial.distance.pdist中的实用程序将更快。
参数 | 说明 |
---|---|
X | array_like 形状数组(Nx,D),代表D维中的Nx个点。 |
Y | array_like (optional) 形状数组(Ny,D),代表D维中的Ny个点。 如果未指定,则Y = X。 |
返回值 | 说明 |
---|---|
dist | ndarray X和Y中的点之间的成对距离的形状(Nx,Ny)数组。 |
rdist_to_dist()
将缩小的距离转换为真实距离。
为某些度量标准定义的减小的距离是一种计算上更有效的度量,可以保留真实距离的等级。 例如,在欧几里得距离度量标准中,减小的距离是欧几里德距离的平方。