Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 一维数数组聚类_Arrays_Cluster Analysis_Data Mining_Dimension_Partition Problem - Fatal编程技术网

Arrays 一维数数组聚类

Arrays 一维数数组聚类,arrays,cluster-analysis,data-mining,dimension,partition-problem,Arrays,Cluster Analysis,Data Mining,Dimension,Partition Problem,假设我有一个这样的数组: [1,1,2,3,10,11,13,67,71] 有没有一种方便的方法可以将数组划分成这样的部分 [[1,1,2,3],[10,11,13],[67,71]] 我研究过类似的问题,但大多数人建议使用k-means对点进行聚类,比如,对于像我这样的初学者来说,使用k-means是相当混乱的。我还认为k-means更适合于二维或多维聚类,对吗?有没有办法根据数字将一个N个数字的数组划分为多个分区/集群 有些人还建议进行严格的范围划分,但它并不总是将结果呈现为 不要对一维

假设我有一个这样的数组:

[1,1,2,3,10,11,13,67,71]
有没有一种方便的方法可以将数组划分成这样的部分

[[1,1,2,3],[10,11,13],[67,71]]
我研究过类似的问题,但大多数人建议使用k-means对点进行聚类,比如,对于像我这样的初学者来说,使用k-means是相当混乱的。我还认为k-means更适合于二维或多维聚类,对吗?有没有办法根据数字将一个N个数字的数组划分为多个分区/集群

有些人还建议进行严格的范围划分,但它并不总是将结果呈现为
不要对一维问题使用多维聚类算法。一个维度比你天真地想象的要特殊得多,因为你实际上可以对它进行排序,这使事情变得容易得多

事实上,它通常甚至不被称为聚类,而是例如分割或自然中断优化

你可能想看看和类似的统计方法也是一种很好的研究方法,具有很强的统计背景。密度中的局部极小值是将数据划分为簇的好地方,这是有统计原因的。KDE可能是对一维数据进行聚类的最可靠的方法

有了KDE,一维数据的表现就明显得多。在1D中,有局部极小值;但在2D中,你可能有鞍点和类似的“可能”分裂点。请参见这一点,了解这一点如何适合或不适合分割簇

有关如何在Python中执行此操作的示例,请参见(绿色标记是群集模式;红色标记是数据剪切点;y轴是密度的对数可能性):


您可以寻找离散化算法。一维离散化问题和你们所问的非常相似。他们根据频率、装箱策略等确定分界点

在其离散化过程中使用以下算法

weka.filters.supervised.attribute.Discretize

使用Fayyad&Irani的MDL方法或Kononeko的MDL标准

weka.filters.unsupervised.attribute.Discretize

使用简单的装箱

是一个快速而直接的k-means聚类函数,尽管文档中有点浅显

示例用法 pip安装ckwrap

导入包装
nums=np.数组([1,1,2,3,10,11,13,67,71])
km=ckwrap.ckmeans(nums,3)
打印(公里标签)
# [0 0 0 0 1 1 1 2 2]
桶=[]、[]、[]
对于范围内的i(len(nums)):
桶[km.标签[i]].append(nums[i])
打印(桶)
# [[1, 1, 2, 3], [10, 11, 13], [67, 71]]
退出()
我希望作者打算让您使用nd数组功能,而不是创建列表列表

其他措施:

km.centers
km.k
公里大小
托斯公里
中间公里
维辛斯公里

基本算法基于此。

此处的实现:您能否更新您的答案,说明为什么
meanshift
dbscan
可能是或可能不是聚类1D的好方法?从本质上看,两者都是非常幼稚的近似核密度估计。meanshift是多元KDE的一种模式搜索方法,DBSCAN使用最原始的KDE(box-kernel)来定义什么是稠密的,什么不是。在一维数据上使用它们没有任何好处。但是,Ckmeans.1d.dp(适用于维度聚类的k-means)值得一看。参见@skoush,这是一个较慢的k-均值变量,可产生全局最优值(仅1d)。但是,如果SSQ k-means目标不能解决您的问题,那么您是否发现(通过SSQ)k-means解决方案比使用更快的标准算法好0.1%并不重要。嗨!该链接似乎不再可访问。。您还有其他资源吗?@mjsimulator固定链接