使用UMAP进行异常值检测的技术解析

使用UMAP进行异常值检测的技术解析

umap Uniform Manifold Approximation and Projection umap 项目地址: https://gitcode.com/gh_mirrors/um/umap

概述

UMAP(Uniform Manifold Approximation and Projection)是一种强大的降维技术,除了常见的聚类应用外,它还可以有效地用于异常值检测。本文将深入探讨如何利用UMAP在MNIST手写数字数据集中识别异常样本,并分析其中的技术细节和优化方法。

准备工作

首先我们需要导入必要的Python库:

import numpy as np
import sklearn.datasets
import sklearn.neighbors
import umap
import umap.plot
import matplotlib.pyplot as plt
%matplotlib inline

然后加载MNIST数据集:

data, labels = sklearn.datasets.fetch_openml('mnist_784', version=1, return_X_y=True)

传统异常检测方法

在原始784维空间中,我们可以使用局部离群因子(Local Outlier Factor, LOF)算法进行异常检测。LOF通过比较数据点的局部密度与其邻居的平均密度来识别异常值。

%%time
outlier_scores = sklearn.neighbors.LocalOutlierFactor(contamination=0.001428).fit_predict(data)

这种方法虽然有效,但在高维空间中计算成本极高(上述代码执行需要约1.5小时),这凸显了降维的必要性。

可视化异常样本

提取LOF识别出的前100个异常样本并可视化:

outlying_digits = data[outlier_scores == -1]

fig, axes = plt.subplots(7, 10, figsize=(10,10))
for i, ax in enumerate(axes.flatten()):
    ax.imshow(outlying_digits[i].reshape((28,28)))
    plt.setp(ax, xticks=[], yticks=[])
plt.tight_layout()

这些样本确实显示出一些异常特征,但我们可以做得更好。

UMAP降维方法

首先使用默认参数的UMAP进行降维:

mapper = umap.UMAP().fit(data)

可视化降维结果:

umap.plot.points(mapper, labels=labels)

然后在低维嵌入空间应用LOF:

%%time
outlier_scores = sklearn.neighbors.LocalOutlierFactor(contamination=0.001428).fit_predict(mapper.embedding_)

这种方法不仅速度快得多,而且识别出的异常样本更加显著:

outlying_digits = data[outlier_scores == -1]

fig, axes = plt.subplots(7, 10, figsize=(10,10))
for i, ax in enumerate(axes.flatten()):
    ax.imshow(outlying_digits[i].reshape((28,28)))
    plt.setp(ax, xticks=[], yticks=[])
plt.tight_layout()

优化UMAP参数

UMAP的set_op_mix_ratio参数控制局部单纯形集的组合方式:

  • 1.0表示并集(默认)
  • 0.0表示交集
  • 中间值表示混合

对于异常检测,使用较低的值(如0.25)可以更好地保持异常点的孤立性:

mapper = umap.UMAP(set_op_mix_ratio=0.25).fit(data)

虽然整体结构可能不如默认参数清晰,但异常检测效果更佳:

%%time
outlier_scores = sklearn.neighbors.LocalOutlierFactor(contamination=0.001428).fit_predict(mapper.embedding_)

outlying_digits = data[outlier_scores == -1]

fig, axes = plt.subplots(10, 10, figsize=(10,10))
for i, ax in enumerate(axes.flatten()):
    ax.imshow(outlying_digits[i].reshape((28,28)))
    plt.setp(ax, xticks=[], yticks=[])
plt.tight_layout()

技术总结

  1. 降维优势:UMAP降维显著提高了LOF等算法的计算效率,同时可能提高异常检测质量。

  2. 参数优化set_op_mix_ratio参数允许在保持整体结构和突出异常点之间取得平衡。

  3. 异常特征:通过这种方法识别出的异常样本通常表现出:

    • 异常的线条粗细
    • 扭曲的形状
    • 明显的图像损坏
    • 难以辨认的数字形态
  4. 应用建议:对于异常检测任务,建议:

    • 首先尝试默认UMAP参数
    • 如果需要更突出的异常点,尝试降低set_op_mix_ratio
    • 结合可视化验证结果

UMAP为高维数据的异常检测提供了一种高效而强大的方法,特别适合处理像MNIST这样的复杂数据集。通过适当的参数调整,可以针对特定任务优化其性能。

umap Uniform Manifold Approximation and Projection umap 项目地址: https://gitcode.com/gh_mirrors/um/umap

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

芮川琨Jack

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值