sta*_*icx 5 distance similarity 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]
Run Code Online (Sandbox Code Playgroud)
2) 对于每个概念,找到比例因子和偏移量,以便所有属性值都落在相同的选定范围内,例如 [0-100]
Sx = 100 / (Px max - Px min)
Ox = -Px min
Run Code Online (Sandbox Code Playgroud)
在提供的示例中,您将获得:
S1 = 100
O1 = 0
S2 = 10
O2 = 0
S3 = 1
O3 = 0
S4 = 0.5
O4 = -50
Run Code Online (Sandbox Code Playgroud)
3) 现在您可以创建一个包含所有属性值的向量。
V = (S1 * P1 + O1, S2 * P2 + O2, S3 * P3 + O3, S4 * P4 + O4)
Run Code Online (Sandbox Code Playgroud)
在提供的样本中,它将是:
V = (100 * P1, 10 * P2, P3, 0.5 * P4 - 50)
Run Code Online (Sandbox Code Playgroud)
4) 现在您可以通过从另一个中减去一个来比较两个向量 V1 和 V2。结果向量的长度将说明它们的不同之处。
delta = |V1 - V2|
Run Code Online (Sandbox Code Playgroud)
通过减去每个维度来减去向量。向量长度可以计算为向量维数平方和的平方根。
假设我们有 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)
Run Code Online (Sandbox Code Playgroud)
向量将是:
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)
Run Code Online (Sandbox Code Playgroud)
为了确定我们需要减去向量:
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
Run Code Online (Sandbox Code Playgroud)
从这里您可以看到 John 和 Kevin 比其他任何人都更相似,因为 delta 更小。
小智 6
有许多方法可用于查找分类数据之间的相似性。下文将简要讨论这些措施。
https://conservancy.umn.edu/bitstream/handle/11299/215736/07-022.pdf?sequence=1&isAllowed=y
如果您尝试在 R 中执行此操作,则有一个名为“nomclust”的包,它具有所有这些可用的相似性度量。
希望这可以帮助!