我们如何衡量分类数据之间的相似性距离?
How can we measure the similarity distance between categorical data ?
我们如何衡量分类数据之间的相似性距离?
示例:
性别:男,女
数值:[0 - 100]、[200 - 300]
字符串:专业人士、初学者等...
提前致谢。
有多种方法可以做到这一点。最简单的方法之一如下。
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
从这里可以看出,John 和 Kevin 比其他人更相似,因为 delta 更小。
有许多方法可用于查找分类数据之间的相似性。以下论文对这些措施进行了简要讨论。
https://conservancy.umn.edu/bitstream/handle/11299/215736/07-022.pdf?sequence=1&isAllowed=y
如果您尝试在 R 中执行此操作,有一个名为 'nomclust' 的程序包,其中包含所有这些相似性度量。
希望对您有所帮助!
如果您使用的是 python,则有一个最新的库可帮助您根据 Eskin、重叠、IOF、OF、Lin、Lin1 等相似性度量找到邻近矩阵。
获得邻近矩阵后,我们可以使用层次聚类分析进行聚类。
将此 link 检查到名为 "Categorical_similarity_measures" 的库:
https://pypi.org/project/Categorical-similarity-measures/0.4/
想一想,我们也可以应用两个变量之间的欧氏距离来求漂移值。如果为 0,则没有漂移,否则称为相似。但是在计算之前应该对向量进行排序和相同的长度。
我们如何衡量分类数据之间的相似性距离?
示例: 性别:男,女 数值:[0 - 100]、[200 - 300] 字符串:专业人士、初学者等...
提前致谢。
有多种方法可以做到这一点。最简单的方法之一如下。
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
从这里可以看出,John 和 Kevin 比其他人更相似,因为 delta 更小。
有许多方法可用于查找分类数据之间的相似性。以下论文对这些措施进行了简要讨论。
https://conservancy.umn.edu/bitstream/handle/11299/215736/07-022.pdf?sequence=1&isAllowed=y
如果您尝试在 R 中执行此操作,有一个名为 'nomclust' 的程序包,其中包含所有这些相似性度量。
希望对您有所帮助!
如果您使用的是 python,则有一个最新的库可帮助您根据 Eskin、重叠、IOF、OF、Lin、Lin1 等相似性度量找到邻近矩阵。 获得邻近矩阵后,我们可以使用层次聚类分析进行聚类。
将此 link 检查到名为 "Categorical_similarity_measures" 的库: https://pypi.org/project/Categorical-similarity-measures/0.4/
想一想,我们也可以应用两个变量之间的欧氏距离来求漂移值。如果为 0,则没有漂移,否则称为相似。但是在计算之前应该对向量进行排序和相同的长度。