在对Matlab进行聚类之前,从一组3d点中移除异常值

在对Matlab进行聚类之前,从一组3d点中移除异常值,matlab,cluster-analysis,k-means,Matlab,Cluster Analysis,K Means,我在Matlab中有一组3d点,但问题是我的数据被发现了。正如您所看到的,有一些异常值正在影响我的聚类结果。因此,如果有人能告诉我如何从我的数据中删除这些异常值。查看了您的数据后,我认为任何聚类算法都不能满足您的要求。相反,您可能需要训练分类器。这就是Kinect的工作人员所做的,他们使用数百万真实和合成姿势训练分类器,让它标记四肢、头部等 我认为基于密度的聚类也不起作用的原因是,您的数据是一个单一的、密度相连的实体,带有两个长方体形状的blob。但在不知道“身体”和“盒子”是什么的情况下,分割

我在Matlab中有一组3d点,但问题是我的数据被发现了。正如您所看到的,有一些异常值正在影响我的聚类结果。因此,如果有人能告诉我如何从我的数据中删除这些异常值。

查看了您的数据后,我认为任何聚类算法都不能满足您的要求。相反,您可能需要训练分类器。这就是Kinect的工作人员所做的,他们使用数百万真实和合成姿势训练分类器,让它标记四肢、头部等

我认为基于密度的聚类也不起作用的原因是,您的数据是一个单一的、密度相连的实体,带有两个长方体形状的blob。但在不知道“身体”和“盒子”是什么的情况下,分割将是相当随意的。或者在基于密度的聚类的情况下:它根本不会分段,或者它将分段,例如,通过z轴相当低的结果。此外,X轴和Y轴来自基于栅格的图像扫描(我假设),因此X轴和Y轴上的密度非常均匀-但例如,手臂的密度不低于身体或盒子

但是,您可以使用具有相当广泛(且易于设置)的参数的DBSCAN来消除噪声

例如,在以下参数中产生合理的结果:

java -jar elki.jar -dbc.in /tmp/XX.csv -algorithm clustering.DBSCAN \
-dbscan.epsilon 0.05 -dbscan.minpts 100
多数群集是删除了异常值的数据;即使脚部附近的斑点被清除了

要加快聚类过程,可以添加参数

-db.index tree.spatial.rstarvariants.rstar.RStarTreeFactory \
-pagefile.pagesize 1000 -spatial.bulkstrategy SortTileRecursiveBulkSplit
这将产生4.5秒的运行时opf。这显然不足以实现Kinect上的实时操作;但是,看到一个定向分类算法比一个无监督的方法有更好的表现并不奇怪——事实上这是意料之中的

以下是使用上述参数对数据集进行聚类的结果:


下载了数据,现在正在观看并怀疑那是僵尸还是什么哈哈!哦,该死的,很抱歉我的评论;)只是一个想法-他们是否有用于3D数据的
imdeplate
?如果是这样的话,也许可以做一些,然后选择最大的3D连接blob来做你?我猜你需要打电话给波士顿你有没有考虑过使用基于密度的聚类,它对异常值的鲁棒性更高?(它将以“噪音”的形式返回它们)。我不认为k-means的结果会令人信服,即使你去除了异常值。