scikits.learn曲线拟合参数的聚类方法

时间:2013-06-11 14:18:04

标签: python scikit-learn cluster-analysis data-mining

我想对使用python和scikits.learn的最佳聚类技术提出一些建议。我们的数据来自Phenotype Microarray,它可以测量细胞在不同基质上的代谢活动。输出是一系列S形曲线,我们通过拟合到S形函数来提取一系列曲线参数。

我们希望使用固定数量的群集通过群集“排名”此活动曲线。目前我们正在使用包提供的k-means算法,其中(init ='random',k = 10,n_init = 100,max_iter = 1000)。输入是一个矩阵,每个样本有n_samples和5个参数。样本的数量可以变化,但通常约为几千(即5,000)。聚类似乎是高效和有效的,但我将不胜感激任何关于不同方法的建议或最佳方式来评估聚类质量。

这里有几个可能有用的图表:

  • 输入参数的散点图(其中一些非常相关),单个样本的颜色相对于指定的簇。 Scatterplot of input parameters

  • 从中提取输入参数的sigmoid曲线,其颜色相对于其指定的簇 enter image description here

修改

在一些肘部图和每个簇数的轮廓得分之下。 clustering stats

2 个答案:

答案 0 :(得分:6)

您是否注意到地块中的条纹图案?

这表示您没有充分规范化数据。

“区域”和“高度”高度相关,可能是最大规模。所有聚类都发生在这个轴上。

你绝对必须:

  • 执行仔细的预处理
  • 检查您的距离函数是否产生了有意义的(对您而不仅仅是计算机)相似性概念
  • 现实 - 检查您的结果,并检查它们是不是太简单,例如确定通过单一属性

不要盲目跟随数字。无论您提供什么数据,K-means都会愉快地生成k个簇。它只是优化了一些数字。由你来检查结果是否有用,并分析它们的语义是什么 - 它可能只是在数学上是局部最优,但对你的任务毫无意义。

答案 1 :(得分:5)

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

我认为谱聚类是一种非常好的方法。您可以将它与RBF内核一起使用。但是,您必须调整伽玛,并可能限制连接。

不需要n_clusters的选择是WARD和DBSCAN,也是可靠的选择。 你也可以咨询我在{scikit-learn docs中找不到链接的this chart of my personal opinion ...

判断结果:如果你没有任何基本事实(如果这是探索性的话我认为你没有),那么[尚未](在scikit-learn中)没有好的措施。

有一个无监督的度量silhouette score,但afaik有利于k-means找到的非常紧凑的群集。 尽管它们尚未在sklearn中实现,但群集的稳定性测量可能有所帮助。

我最好的办法是找到一种检查数据和可视化群集的好方法。 您是否尝试过PCA并考虑过多种学习技巧?