【问题标题】:Remove outliers from a set of 3d points before clustering Matlab在聚类 Matlab 之前从一组 3d 点中删除异常值
【发布时间】:2014-06-23 05:24:57
【问题描述】:

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

【问题讨论】:

  • 下载了数据,现在正在观察并想知道那是僵尸还是什么? :)
  • 哈哈!哦,该死的,对评论感到抱歉;)
  • 只是一个想法 - 他们有 imdilate 用于 3D 数据吗?如果是这样,也许做一些并选择最大的 3D 连接 blob 是你?
  • 猜你需要打电话给波士顿! :D
  • 您是否考虑过使用基于密度的聚类,据说这种聚类对异常值更加稳健? (它会将它们作为“噪音”返回)。我认为 k-means 的结果不会令人信服,即使您已经删除了异常值。

标签: matlab cluster-analysis k-means


【解决方案1】:

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

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

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

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

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 上那样进行实时操作;但是,有向分类算法的性能优于无监督方法也就不足为奇了——这实际上是意料之中的。

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

【讨论】:

    猜你喜欢
    • 2021-01-17
    • 2016-05-30
    • 2018-01-22
    • 2012-12-08
    • 1970-01-01
    • 2017-12-03
    • 2017-12-06
    • 1970-01-01
    • 2015-06-17
    相关资源
    最近更新 更多