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

Posted

技术标签:

【中文标题】scikits.learn 曲线拟合参数的聚类方法【英文标题】:scikits.learn clusterization methods for curve fitting parameters 【发布时间】:2013-06-07 10:30:33 【问题描述】:

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

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

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

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

从中提取输入参数的 sigmoid 曲线,其颜色与其分配的集群相关

编辑

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

【问题讨论】:

【参考方案1】:

你注意到你的情节中的条纹图案了吗?

这表明您对数据的标准化不够好。

“面积”和“身高”高度相关,并且可能在最大范围内。所有的聚类都发生在这个轴上。

你绝对必须:

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

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

【讨论】:

你是对的,数据需要标准化!我认为该函数会处理它......现在聚类更有意义,所有参数似乎都被正确使用。非常感谢! 标准化应该是自动的。因为用户可能希望或多或少地强调个别属性,最简单的方法是缩小它们;特别是对于原始方法,例如不了解权重或距离的 k-means。缩放是一种加权属性的简单方法。【参考方案2】:

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

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

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

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

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

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

【讨论】:

非常感谢:我尝试了剪影分数,它返回的值看起来不错(n=10 时为 0.55)。尽管有肘部图,你认为保留 10 个这样的集群是个好主意吗?更多数量的集群为我们提供了对这些曲线的更细粒度的分类...... 我对剪影分数的经验不够,无法告诉您这条曲线是否有意义,抱歉。

以上是关于scikits.learn 曲线拟合参数的聚类方法的主要内容,如果未能解决你的问题,请参考以下文章

Kmeans肘子方法不返回肘子。

基于密度的聚类方法

初探DBSCAN聚类算法

机器学习包Scikit-learn

Pyspark:K 表示模型拟合时的聚类误差

数据挖掘的聚类算法和优势