由于K-means无法直接处理分类变量,我想知道将所有经济活动的国际标准行业分类或ISIC转换为双数据类型是否正确,以便使用K-means以及其他财务和交易数据对其进行聚类?或者我应该尝试其他技术,如一个热编码?
最大的假设是ISIC代码是分类而非数字变量,因为代码“2930”指的是“机动车辆零件和附件的制造”而不是金钱,公斤,英尺等,但这种代码中有一种模式因为它们不是随机分配的并且具有层次结构,例如2930属于C部分“制造”和第29部分“机动车辆,拖车和半挂车的制造”。
由于您想使用标准K-Means,您需要您的数据具有几何意义。因此,如果将代码映射到几何空间是线性的,则无法获得任何正确的聚类结果。由于代码的距离不会在其值中投影。例如,代码2930
与代码2931
一样接近代码2929
。因此,您需要使用标准k均值聚类将分类空间与几何空间进行非线性映射。
一种解决方案是使用类似于word-to-vec(用于矢量化单词)的机器学习技术,如果你有足够的数据来共同使用这些代码。
聚类完全是关于距离测量。
将数值变量分离为分类是部分解决方案。如前所述,基本问题是如何用其他离散变量和数值变量来衡量离散化变量的距离?
在文献中,有几种用于处理混合数据的无监督算法。看看k-prototypes算法和Gower距离。
R中的k原型采用clustMixType封装。 R中的Gower距离在daisy
包中的函数cluster
中给出。如果使用Python,你可以看看这个post
K-means旨在最小化平方和。
最小化平方和是否对您的问题有意义?可能不是!
虽然29,2903和2930据说都是相关的2899可能与2900不太相关。因此,最小二乘法会产生不希望的结果。
该方法实际上是针对相同类型和规模的连续变量而设计的。单热编码变量会导致比他们解决的问题更多的问题 - 这些是使函数“运行”的天真黑客,但结果在统计上是有问题的。
试着找出他正确的事情。这可能不是最小的方块。