我的建议是将每个对象转换为 3-D 空间中的向量,然后找到两个向量(对象)之间的欧几里得距离。
- 首先,将工资、位置和大小分别分配给x、y和z轴。
- 然后将属性映射到
[0, 1]
轴的间隔。
例如,如果您的最低工资是 1'000,最高工资是 10'000,那么您将映射:
- $ 1'000 -> x轴上的 0,
- $ 10'000 -> 到x轴上的 1。
映射位置很难,但是假设您有一个地图网格,并且您根据地理位置为网格的每个补丁分配一个值 - 更接近的具有相似的值。例如,美国各州为我们提供了一个很好的例子:
- 纽约 -> y轴上的 1.0,
- 新泽西州 -> y轴上的 0.99,
- ...
- 加利福尼亚 -> y轴上的 0.1。
映射公司规模如下:
- 在z轴上启动 -> 0.2 ,
- ...
- 多国-> z轴上的 1.0 。
因此,举个例子:约翰想要 9.000 的薪水,想要在纽约找到一份工作,并且想要在一家初创公司工作。他在 3D 空间中的向量是[0.82, 1.00, 0.1]
。
彼得想要 5.500 的薪水,想要在新泽西找到一份工作,并且想要在一家非常大的公司工作 - [0.5, 0.99, 0.8]
。最后,迈克想要一份 8.000 的薪水,在加利福尼亚找到一份工作,并且还想要一家初创公司—— [0.73, 0.1, 0.1]
。
根据 3D 空间中的欧几里得距离公式:
d(a, b) = sqrt((a1-b1)^2 + (a2-b2)^2 + (a3 - b3)^2)
Distance between John and Peter is: d(J, P) = 0.77
Distance between John and Mike is: d(J, M) = 0.90
所以结论是约翰和彼得比约翰和迈克更接近。
您可以做的另一件事是在每个轴上引入一些常量以强调其重要性(例如,位置比公司规模更重要)因此在公式中您可以执行以下操作:
d(a, b) = sqrt((a1-b1)^2 + (C*a2 - C*b2)^2 + (a3 - b3)^2), where C = 10