在sklearn kmeans聚类之后,有没有简单的方法可以返回最远的异常值?
基本上我想列出一堆群的最大异常值。不幸的是,由于分配,我需要使用sklearn.cluster.KMeans。
答案 0 :(得分:2)
Sascha基本上在评论中将其删除,但如果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))]
答案 1 :(得分:2)
K-means不适合“离群值”检测。
k-means倾向于使异常值成为单元素集群。然后,异常值具有最小可能的距离,并且不会被检测到。
当您的数据中存在异常值时,K-means不够健壮。实际上,您可能希望在使用k-means 之前删除异常值。
使用类似kNN,LOF或LoOP的东西。