我应该将行业分类代码视为 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 均值聚类中的双重数据类型吗?的主要内容,如果未能解决你的问题,请参考以下文章

机器学习之无监督学习-K均值聚类算法

数学建模MATLAB应用实战系列(106)-机器学习算法:K-means聚类(附MATLAB代码)

k-均值聚类

matlab kmeans函数

matlab 聚类分析kmeans和cluster的区别

无监督学习 — — 聚类方法分类