如何在 scikit-learn 中使用 KDE(核密度估计)进行一维数组聚类?
Posted
技术标签:
【中文标题】如何在 scikit-learn 中使用 KDE(核密度估计)进行一维数组聚类?【英文标题】:How to use KDE (Kernel density estimation) for one-dimensional array clustering, in scikit-learn? 【发布时间】:2016-10-14 22:33:02 【问题描述】:我阅读了几篇关于一维数组聚类的帖子,其中人们说聚类不适合一维数组,应该改用核密度估计。但是,没有人解释如何使用 kde 准确执行聚类,如何检索输入数据的聚类标签?
在 scikit-learn 中,我得到了单变量(一维)数据的核密度估计。
kde = KernelDensity(kernel='gaussian', bandwidth=0.75).fit(features)
我现在如何使用它进行聚类,即如何检索输入数据的聚类标签?
我正在考虑两种可能的方法: a) 使用 kde 为某些聚类估计器(例如 kmeans)获取新的 2D 输入数据。我想以直方图([值,频率])的形式检索二维数据数组,但我不知道如何从 kde 中做到这一点? 是否可以将 kde 用作聚类算法的新输入数据集,比如 kmeans 估计器?如果是,如何?如何从 kde 获取数据集? b) 直接使用kde 计算簇之间的边界。在我的特殊情况下,我知道有两个集群,我想找到它们之间的边界。而且我需要通过计算来完成,而不是通过查看情节来手动完成......
【问题讨论】:
只需使用 X_samples = kde.sample(n_samples=X)。然后你可以拟合 kmeans。 @sascha,你的表情中的“X”是什么?我如何获得它? 您正在从您学习的 KDE 中采样值。 n_samples 只是要采集的样本数。 @sascha 你希望从中得到什么?这种方法与这个问题一样没有意义。聚类分析是关于回答问题,而不是在没有计划的情况下对随机数据运行随机函数。 【参考方案1】:您不会对密度估计运行聚类算法。
您想找到密度中的局部最小值和最大值以找到分割数据的位置。
【讨论】:
你可以向他/她展示一些关于如何找到这个局部最小值和最大值的代码,这会丰富你的答案。以上是关于如何在 scikit-learn 中使用 KDE(核密度估计)进行一维数组聚类?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 C++ 中解析 XDG/gnome/kde 菜单/桌面项结构?