使用UMAP进行异常值检测的技术解析
umap Uniform Manifold Approximation and Projection 项目地址: 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()
技术总结
-
降维优势:UMAP降维显著提高了LOF等算法的计算效率,同时可能提高异常检测质量。
-
参数优化:
set_op_mix_ratio
参数允许在保持整体结构和突出异常点之间取得平衡。 -
异常特征:通过这种方法识别出的异常样本通常表现出:
- 异常的线条粗细
- 扭曲的形状
- 明显的图像损坏
- 难以辨认的数字形态
-
应用建议:对于异常检测任务,建议:
- 首先尝试默认UMAP参数
- 如果需要更突出的异常点,尝试降低
set_op_mix_ratio
- 结合可视化验证结果
UMAP为高维数据的异常检测提供了一种高效而强大的方法,特别适合处理像MNIST这样的复杂数据集。通过适当的参数调整,可以针对特定任务优化其性能。
umap Uniform Manifold Approximation and Projection 项目地址: https://gitcode.com/gh_mirrors/um/umap
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考