我是机器学习和数据分析的新手,正在努力对我的数据进行聚类。我的数据有大约40,000个观测值和6个特征。
我尝试了各种聚类方法,包括K-Means、DBSCAN,并尝试了scipy的层次聚类方法。在预处理过程中,我对缺失数据进行了填补,并对所有数据进行了归一化处理。在完成主成分分析(PCA)将维度从4降至6后,我的数据看起来像新月形状,如下图中的蓝点所示。
我通过轮廓系数分析确定K-means使用10个聚类效果最佳,结果如下:
在对数据进行聚类后再进行PCA,结果变化不大。
DBSCAN本身决定使用4个聚类,并给出了4个聚类,但大部分数据被排除在这些聚类之外,并被标记为噪音。
对于层次方法,尝试使用linkage()时数据使用量过大,总是提示内存错误消息。
有什么方法可以对我的数据进行聚类吗?我的数据形状(新月形)是否适合其他建模方法?
回答:
不要不假思索地运行聚类
聚类算法不能作为黑盒使用。它们需要谨慎使用,否则只能得到垃圾数据。要正确使用它们,你需要理解每个算法的目标。K-means是一种最小二乘方法。如果你在未经适当归一化的数据上使用它,它会失败。
从你的图表来看,你的数据库中有一条错误记录,大大导致了那个“月亮”形状:所有东西都需要尽可能远离那个错误记录。
除此之外:1. 你是否为你的问题正确地缩放了数据?2. 你是否选择了适当的距离度量?