距离度量

描述

对于不同类型的分析,采用不同类型的距离度量标准是很方便的。Flink ML 为许多标准的距离度量标准提供了内置的实现。 你能通过实现 DistanceMetric 特质来创造自定义的距离度量标准。

内置实现

目前, FlinkML 支持以下度量标准:

度量标准 描述
欧式距离 $$d(\x, \y) = \sqrt{\sum{i=1}^n \left(x_i - y_i \right)^2}$$
平方欧式距离 $$d(\x, \y) = \sum{i=1}^n \left(xi - y_i \right)^2$$
余弦相似度 $$d(\x, \y) = 1 - \frac{\x^T \y}{\Vert \x \Vert \Vert \y \Vert}$$
切比雪夫距离 $$d(\x, \y) = \max{i}\left(\left \vert xi - y_i \right\vert \right)$$
曼哈顿距离 $$d(\x, \y) = \sum{i=1}^n \left\vert xi - y_i \right\vert$$
闵式距离 $$d(\x, \y) = \left( \sum{i=1}^{n} \left( x_i - y_i \right)^p \right)^{\rfrac{1}{p}}$$
谷本距离 $$d(\x, \y) = 1 - \frac{\x^T\y}{\Vert \x \Vert^2 + \Vert \y \Vert^2 - \x^T\y}$$ with $\x$ and $\y$ being bit-vectors

自定义实现

你能通过实现 DistanceMetric 特质来创造你自己的距离度量标准。

  1. class MyDistance extends DistanceMetric {
  2. override def distance(a: Vector, b: Vector) = ... // your implementation for distance metric
  3. }
  4. object MyDistance {
  5. def apply() = new MyDistance()
  6. }
  7. val myMetric = MyDistance()