用很多 0 对数据集进行聚类的最佳/正确算法/程序是什么?

数据挖掘 聚类 数据 k-均值 主成分分析 缺失数据
2022-02-22 12:12:23

我是统计学的新手,很抱歉在该主题上缺乏任何重大知识,只是为毕业做一个项目。

我正在尝试对包含疾病(3456)和症状(25)的健康数据集进行聚类,并根据发生的事件数量对它们进行分组。

我担心的是很多值都是 0 简单的,因为有些疾病没有表现出特别的症状,例如(我现在编了这些值):

例子

所以,我想知道对这个数据集进行聚类的最佳方法是什么。我一直在寻找并找到分层和 kmeans,但不知道我是否可以正确适用于这个 cenario。首先,我将出现的绝对值切换为总数的百分比,这是否可以处理 0 ?我考虑了一下,但同时 1% 接近 0%,我不知道算法是否也可以理解为“标志”,因为 1% 表示实际上出现了该症状(即使发生率较低)并且在另一种疾病根本不会发生。

我听说 PCA 可以减少变量的数量,我也很好奇:1-PCA 适用于这个场景(具有很多稀疏 0 的数据集)2-PCA 可以解决我的问题(因为我认为即使减少对于 2 3 个变量,对于该特定列(症状),某些行仍可能为 0。

任何帮助/指导都会非常有帮助,我提前感谢大家,对于一些英语错误也很抱歉!

有一个伟大的一周!

3个回答

也许我没有正确理解您的问题,但 k-means 聚类对零不敏感。更准确地说,零是要聚类的特征的有效值。

虽然 PCA 可以让您减少要训练的特征的数量,但它可能会使 k-means 的集群的清晰度变得复杂。PCA 本身可能是有益的,但 AI 会抵制将 PCA 数据输入 k-means 的冲动,只是为了减少数据中零的数量。

高温高压

不要指望任何聚类算法只是作为一个黑匣子工作。

零点本身可能不是什么大问题,但缩放是。您不同的疾​​病有不同的频率,并且对于某些症状(例如发烧)也是如此。

因此,与其选择聚类算法,因为互联网上有人声称它在“大量”零的情况下效果更好(请注意,在 BOW 模型中通常有 99.9% 的零),您需要首先缩小目标范围。为您的问题定义一个好的聚类。然后选择最优化此质量的算法。不要挑锤子,然后假设你的问题一定是钉子......

在您的情况下,我建议从概率的角度来处理它。当两种疾病“可能相关”时定义一些 P(),然后您可以在之后使用各种聚类算法(可能首先尝试一些可解释的东西,例如 HAC)。

如果我理解您的问题陈述是正确的,您希望对有很多 0 的数据进行聚类(这意味着您的数据不平衡)。您可以使用任何您喜欢的聚类技术(有监督或无监督)并绘制数据以进行可视化。

如果您想训练您的模型以进行未来预测,我建议您在开始训练(拟合)您选择的模型之前平衡数据。

您可以使用重新采样来放大缩小数据,一旦完成,您就可以连接并为模型训练创建最终数据集。 from sklearn.utils import resample

谢谢!