我应该将行业分类代码视为 K 均值聚类中的双重数据类型吗?
Posted
技术标签:
【中文标题】我应该将行业分类代码视为 K 均值聚类中的双重数据类型吗?【英文标题】:Shall I treat Industry Classification codes as double data type in K-means clustering? 【发布时间】:2019-09-10 02:18:16 【问题描述】:由于 K-means 无法直接处理分类变量,我想知道将所有经济活动的国际标准行业分类或 ISIC 转换为双重数据类型以使用 K-means 与其他财务和交易进行聚类是否正确数据?还是我应该尝试其他技术,例如一种热编码?
最大的假设是 ISIC 代码是分类变量而不是数字变量,因为代码“2930”指的是“汽车零部件和配件的制造”,而不是钱、公斤、英尺等,但有一种模式在此类代码中,因为它们不是随机分配的并且具有层次结构,例如 2930 属于 C 节“制造”和第 29 节“机动车辆、拖车和半拖车的制造”。
【问题讨论】:
【参考方案1】:当您想使用标准 K-Means 时,您需要您的数据具有几何意义。因此,如果您将代码映射到几何空间是线性的,您将不会得到任何适当的聚类结果。由于代码的距离并不体现在它们的价值中。例如,代码 2930
与代码 2931
和代码 2929
一样接近。因此,您需要将分类空间与几何空间进行非线性映射,以使用标准的 k 均值聚类。
如果您有足够的数据来同时出现这些代码,则一种解决方案是使用类似于 word-to-vec(用于向量化单词)的机器学习技术。
【讨论】:
【参考方案2】:聚类就是距离测量。
将数值变量离散化为分类是一种部分解决方案。如前所述,基本问题是如何测量离散变量与其他离散变量和数值变量的距离?
在文献中,有几种用于处理混合数据的无监督算法。看一下 k-prototypes 算法和 Gower 距离。
R 中的 k 原型在 clustMixType 包中给出。 R 中的 Gower 距离在 cluster
包中的函数 daisy
中给出。如果使用 Python,可以看看这个post
黄泽 (1997)。对具有混合数值和分类值的大型数据集进行聚类。在第一届亚太知识发现和数据挖掘会议论文集 (PAKDD) 上发表的论文。
高尔,J. C. (1971)。一般的相似系数及其一些性质。生物识别技术,857-871。
【讨论】:
【参考方案3】:K-means 旨在最小化平方和。
最小化平方和对您的问题有意义吗?应该不会吧!
虽然据推测 29、2903 和 2930 都相关,但 2899 可能与 2900 的相关性不大。因此,最小二乘法会产生不希望的结果。
该方法是真正为相同类型和规模的连续变量设计的。 One-hot 编码变量导致的问题比它们解决的问题多 - 这些是使函数“运行”的天真的 hack,但结果在统计上是有问题的。
试着弄清楚他正确要做的事情是什么。这里可能不是最小二乘。
【讨论】:
以上是关于我应该将行业分类代码视为 K 均值聚类中的双重数据类型吗?的主要内容,如果未能解决你的问题,请参考以下文章