我们如何测量分类数据之间的相似距离?

时间:2015-04-21 11:46:24

标签: distance similarity categorical-data

我们如何衡量分类数据之间的相似距离?

实施例: 性别:男,女 数值:[0 - 100],[200 - 300] 字符串:专业人士,初学者等......

提前致谢。

4 个答案:

答案 0 :(得分:2)

有不同的方法可以做到这一点。其中最简单的如下:

1)为每个属性分配数值,以便顺序匹配属性背后的含义(如果可能)。如果可以测量属性,则将属性值从低到高排序很重要。如果不可能并且财产是绝对的(如性别,职业等),只需为每个可能的值分配数字。

P1 - Gender
-------------------
0 - Male
1 - Female

P2 - Experience
-----------
0 - Beginner
5 - Average
10 - Professional

P3 - Age
-----------
[0 - 100]

P4 - Body height, cm
-----------
[50 - 250]

2)对于每个概念,找到比例因子和偏移量,使所有属性值都落在相同的选择范围内,比如[0-100]

Sx = 100 / (Px max - Px min)
Ox = -Px min

在提供的示例中,您将获得:

S1 = 100
O1 = 0

S2 = 10
O2 = 0

S3 = 1
O3 = 0

S4 = 0.5
O4 = -50

3)现在您可以创建一个包含所有属性值的向量。

V = (S1 * P1 + O1, S2 * P2 + O2, S3 * P3 + O3, S4 * P4 + O4)

在提供的样本中,它将是:

V = (100 * P1, 10 * P2, P3, 0.5 * P4 - 50)

4)现在你可以通过从另一个中减去一个来比较两个向量V1和V2。结果向量的长度将告诉它们有多么不同。

delta = |V1 - V2|

通过减去每个维度减去向量。矢量长度可以计算为平方矢量维数之和的平方根。

想象一下,我们有3个人:

John
P1 = 0 (male)
P2 = 0 (beginner)
P3 = 20 (20 years old)
P4 = 190 (body height is 190 cm)

Kevin
P1 = 0 (male)
P2 = 10 (professional)
P3 = 25 (25 years old)
P4 = 186 (body height is 186 cm)

Lea
P1 = 1 (female)
P2 = 10 (professional)
P3 = 40 (40 years old)
P4 = 178 (body height is 178 cm)

载体将是:

J = (100 * 0, 10 * 0, 20, 0.5 * 190 - 50) = (0, 0, 20, 45)
K = (100 * 0, 10 * 10, 25, 0.5 * 186 - 50) = (0, 100, 25, 43)
L = (100 * 1, 10 * 10, 40, 0.5 * 178 - 50) = (100, 100, 40, 39)

确定我们需要减去向量:

delta JK = |J - K| =
= |(0 - 0, 0 - 100, 20 - 25, 45 - 43)| = 
= |(0, -100, -5, 2)| =
= SQRT(0 ^ 2 + (-100) ^ 2 + (-5) ^ 2 + 2 ^ 2) = 
= SQRT(10000 + 25 + 4) = 
= 100,14

delta KL = |K - L| = 
= |(0 - 100, 100 - 100, 25 - 40, 43 - 39)| = 
= |(-100, 0, -15, 4)| =
= SQRT((-100) ^ 2 + 0 ^ 2 + (-15) ^ 2 + 4 ^ 2) =
= SQRT(10000 + 225 + 16) =
= 101,20

delta LJ = |L - J| = 
= |(100 - 0, 100 - 0, 40 - 20, 39 - 45)| = 
= |(100, 100, 20, -6)| =
= SQRT(100 ^ 2 + 100 ^ 2 + (20) ^ 2 + (-6) ^ 2) =
= SQRT(10000 + 10000 + 400 + 36) =
= 142,95

从中你可以看出,约翰和凯文比任何其他人更相似,因为三角洲更小。

答案 1 :(得分:1)

有许多措施可以找到分类数据之间的相似性。以下论文简要讨论了这些措施。

https://www.cs.umn.edu/sites/cs.umn.edu/files/tech_reports/07-022.pdf

如果您尝试在R中执行此操作,则有一个名为“ nomclust”的软件包,该软件包具有所有可用的相似度度量。

希望这会有所帮助!

答案 2 :(得分:0)

如果您使用的是python,则有一个最新的库可帮助您根据相似度(例如Eskin,重叠,IOF,OF,Lin,Lin1等)找到邻近矩阵。 获取邻近矩阵后,我们可以使用层次聚类分析进行聚类。

检查以下指向名为“ Categorical_similarity_measures”的库的链接: https://pypi.org/project/Categorical-similarity-measures/0.4/

答案 3 :(得分:0)

只是一个想法,我们也可以应用两个变量之间的欧几里德距离来找到一个漂移值。如果它是 0,则没有漂移,否则调用类似。但是向量在计算前应该排序并保持相同的长度。