【问题标题】:How to remove outliers from distance matrix or Hierarchical clustering in R?如何从 R 中的距离矩阵或层次聚类中删除异常值?
【发布时间】:2019-12-09 07:44:29
【问题描述】:

我有一些问题

首先,我不知道如何查找和去除距离矩阵或对称矩阵中的异常值。

其次,我还使用了带有平均链接的层次聚类。

我的数据是engmale161(已经用DTW做了对称矩阵)

engmale161 <- na.omit(engmale161)
engmale161 <- scale(engmale161)
d <- dist(engmale161, method = "euclidean")
hc1_engmale161 <- hclust(d, method="average")

我发现使用轮廓、wss 和间隙优化索引 4。

>sub_grp <- cutree(hc1_engmale161,h=60, k = 4)
>table(sub_grp)
>table(sub_grp)
sub_grp  
  1   2   3   4
 741  16   7   1 
> subset(sub_grp,sub_grp==4)
4165634865 
         4 


>fviz_cluster(list(data = engmale161, cluster = sub_grp), geom = "point")

所以,我认为右上点(4165634865)是异常值,它只有一个点。 H-C算法中如何删除异常值。

【问题讨论】:

  • 嘿,也许你可以详细说明一下?我们进行聚类以查看我们的样本彼此之间的相似程度。所以你应该先进行聚类,删除你认为是异常值的点,然后重新进行聚类。为什么你更喜欢一开始就去除异常值?
  • 在构造距离矩阵之前,是否有某些原因无法将其从数据中删除? 4165634865 不是为你识别吗?如果不尝试which(subgrp==4),因为组值按原始数据的顺序列出。

标签: r


【解决方案1】:

只是一些想法。 简而言之,

  • 不要在 engmale161 上执行“na.omit”。使用
  • 查找异常值
  • 分位数和盒须将异常值放在 dist 矩阵中的 NA 中
  • 继续处理

长版:

  • “dist”在 NA 上表现良好(来自 R 文档,“Missing 值是允许的,并且被排除在所有涉及的计算之外 它们出现的行。此外,当 Inf 值为 涉及,所有的价值对都被排除在他们的贡献时 距离给出了 NaN 或 NA)"
  • 要找到异常值,我会使用探索性统计中的概念。 将“分位数”与默认概率和 na.rm = true 一起使用(因为您的 dist 矩阵仍然包含 NAs) --> 你会得到四分位数的值 (数据集分为 4:0-25%、25-50%m 等)。 25-75 是“盒子”。 寻找“晶须”是一个有争议的话题。标准方法是 找到第三个四分位数的 InterQuartileRange (IQR), 然后第一个四分位数 - 1.5*IQR 是“较低”的胡须,第三个 四分位数 + 1.5*IQR 是“上”须。之外的任何值 胡须被视为异常值。将它们标记为 NA,然后继续。

祝你好运,感谢我成为真正查看数据的人!

【讨论】:

    猜你喜欢
    • 2012-09-05
    • 2014-10-24
    • 2016-08-21
    • 2016-06-03
    • 2020-01-23
    • 2015-12-14
    • 2019-01-11
    • 1970-01-01
    • 2013-08-31
    相关资源
    最近更新 更多