我的零售数据集包含 3 个数字属性和两个分类属性 Time 和 ID,有 50,000 条记录。这两个分类属性都有超过 2 万个级别,格式分别为 1/11/2011 11:54 和 1TD10051。
我如何在这些数据集上做 kmeans?将分类转换为二进制会给出非常稀疏的数据集?
如何进行?
我的零售数据集包含 3 个数字属性和两个分类属性 Time 和 ID,有 50,000 条记录。这两个分类属性都有超过 2 万个级别,格式分别为 1/11/2011 11:54 和 1TD10051。
我如何在这些数据集上做 kmeans?将分类转换为二进制会给出非常稀疏的数据集?
如何进行?
对于混合数据集,有很多方法,k-means 的变体:k-modes、k-prototypes 等。
让我们分解一下...
您有 3 个数字属性。太好了...通过减去它们的平均值并除以它们的标准偏差来标准化它们。当您在多个维度上进行聚类时,您总是需要进行标准化,否则您的聚类将没有多大意义,即距离矢量只有在它不知道它的方向时才有意义。
您有 2 个分类属性。然而,一个是时间,这似乎不是很明确。弄清楚如何将时间转化为数值。我建议使用unix 时间戳。不要只是盲目地将其称为分类特征。您的 csv 阅读器不知道如何将冒号处理为斜线,因此将其称为一个因素,但您可以轻松快速地转换它。
现在我建议首先将 3 个数值因子单独聚类。然后我会从时间数据中提取一些特征。您应该能够提取星期几、月份中的星期、月份中的日期等。这些都可能有助于查看数据中的某种信号。我还建议将您的数值数据绘制为这些提取特征的函数,这将为您提供洞察力。
此外,请考虑客户 ID 可能会或可能不会增加问题的价值。您可能可以删除这些字母,它可以告诉您它们第一次在商店购物的时间,或者它可能只包含无用的信息,这些信息会影响您的聚类。
最后,考虑一下为什么要对数据进行聚类以及要恢复哪些见解。这将指导您如何进行。您想将主要是周末购物者与主要是工作日购物者区分开来吗?您是否想将购物者大致归类为十种不同类型中的一种,并尝试确定每种类型的行为?
希望这可以帮助!