返回 kmeans 聚类中最远的异常值? [关闭]
Posted
技术标签:
【中文标题】返回 kmeans 聚类中最远的异常值? [关闭]【英文标题】:Return the furthermost outlier in kmeans clustering? [closed] 【发布时间】:2018-05-09 10:31:43 【问题描述】:在 sklearn kmeans 聚类之后,有什么简单的方法可以返回最远的异常值吗?
基本上,我想为大量集群列出最大的异常值。不幸的是,由于分配,我需要使用 sklearn.cluster.KMeans。
【问题讨论】:
展示一些自己的尝试和想法。这里甚至没有一行代码!你所需要的只是X
、kmeans.cluster_centers_
、kmeans.labels_
(文档中的属性)和一些 numpy(如 np.argsort
等)。
是的,我就是这样做的,我的意思是有一个函数可以用来返回距离而不是之后计算它们
你应该提到并展示它!有kmeans.inertia_
(它是平方的!)。阅读文档有什么问题?
inertia_
给出了平方距离的总和,这在这里似乎没有太大帮助; KMeans.transform()
给出了各个距离。
【参考方案1】:
K-means 不太适合“异常值”检测。
k-means 倾向于使异常值成为单元素集群。那么离群值有最小可能的距离并且不会被检测到。
当数据中存在异常值时,K-means 不够稳健。您实际上可能希望在使用 k-means 之前删除异常值。
改用 kNN、LOF 或 LoOP 之类的东西。
【讨论】:
【参考方案2】:Sascha 基本上在 cmets 中给出了它,但如果 X
表示您的数据,而 model
表示 KMeans
的实例,您可以通过到它们的中心的距离对 X
的值进行排序
X[np.argsort(np.linalg.norm(X - model.cluster_centers_[model.labels_], axis=1))]
或者,由于您知道每个点都分配给其中心与该点的欧几里得距离最小的聚类,因此您可以一步完成拟合和排序
X[np.argsort(np.min(KMeans(n_clusters=2).fit_transform(X), axis=1))]
【讨论】:
以上是关于返回 kmeans 聚类中最远的异常值? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章