4

我想对使用 python 和 scikits.learn 的最佳聚类技术提出一些建议。我们的数据来自表型微阵列,它可以测量细胞在各种底物上随时间的代谢活动。输出是一系列 sigmoid 曲线,我们通过拟合到 sigmoid 函数来提取一系列曲线参数。

我们希望使用固定数量的集群通过集群化“排名”此活动曲线。现在我们使用包提供的 k-means 算法,(init='random', k=10, n_init=100, max_iter=1000)。输入是一个矩阵,每个样本有 n_samples 和 5 个参数。样本的数量可能会有所不同,但通常约为数千(即 5'000)。聚类似乎有效且有效,但我希望能对不同方法或对聚类质量进行评估的最佳方式提出任何建议。

这里有几个图表可能会有所帮助:

  • 输入参数的散点图(其中一些非常相关),单个样本的颜色与分配的集群相关。 输入参数的散点图

  • 从中提取输入参数的 sigmoid 曲线,其颜色与其分配的集群相关 在此处输入图像描述

编辑

下面是一些肘部图和每个簇数的轮廓得分。 聚类统计

4

2 回答 2

6

Have you noticed the striped pattern in your plots?

This indicates that you didn't normalize your data good enough.

"Area" and "Height" are highly correlated and probably on the largest scale. All the clustering happened on this axis.

You absolutely must:

  • perform careful preprocessing
  • check that your distance functions produce a meaningful (to you, not just the computer) notion of similarity
  • reality-check your results, and check that they aren't too simple, determined e.g. by a single attribute

Don't blindly follow the numbers. K-means will happily produce k clusters no matter what data you give. It just optimizes some number. It's up to you to check that the results are useful, and analyze what their semantic meaning is - and it might well be that it just is mathematically a local optimum, but meaningless for your task.

于 2013-06-11T20:51:14.410 回答
5

对于 5000 个样本,所有方法都应该没有问题。这是一个很好的概述here。要考虑的一件事是您是否要修复集群的数量。请参阅下表了解可能的聚类算法选择。

我认为光谱聚类是一个很好的方法。例如,您可以将它与 RBF 内核一起使用。但是,您必须调整 gamma,并且可能会限制连接性。

不需要 n_clusters 的选择是 WARD 和 DBSCAN,也是可靠的选择。您还可以查阅我个人意见的图表,我在 scikit-learn 文档中找不到链接...

判断结果:如果你没有任何类型的基本事实(如果这是探索性的,我想你没有)没有好的衡量标准(在 scikit-learn 中)。

有一个无监督的度量,轮廓分数,但是 afaik 有利于 k-means 发现的非常紧凑的集群。集群的稳定性措施可能会有所帮助,尽管它们尚未在 sklearn 中实现。

我最好的选择是找到一种检查数据和可视化聚类的好方法。您是否尝试过 PCA 并考虑过多种学习技术?

于 2013-06-11T15:53:26.410 回答