异常检测

用 Python 设计机器学习工作流

Dr. Chris Anagnostopoulos

Honorary Associate Professor

异常与离群点

有监督

两个黑色簇,带一些孤立红点。

无监督

两个黑色簇,带一些孤立黑点。

用 Python 设计机器学习工作流

异常与离群点

两个黑色簇,带一些孤立黑点。

  • 两个类别中有一个非常少见
  • 数据集漂移的极端情况
  • 示例:
    • 网络安全
    • 欺诈检测
    • 反洗钱
    • 故障检测
用 Python 设计机器学习工作流

无监督流程

两个黑色簇,部分孤立黑点被红色圈出。

  • 无标签如何训练算法?
  • 如何评估性能?

谨慎使用少量标签:

  • 太少,训练易过拟合
  • 但足够做模型选择
  • 放弃无偏准确率估计

数据集被分为训练、选择、验证;仅选择集有标签。

用 Python 设计机器学习工作流
  • 全局离群点:远离大多数数据范围的数据点

两个黑色簇,带一些孤立黑点。最远的点用红色圈出。

  • 局部离群点:位于无其他数据的孤立区域的数据点

两个黑色簇,带一些孤立黑点。位于两簇之间的孤立点用红色圈出。

用 Python 设计机器学习工作流

局部离群因子(LoF)

两个黑色簇,带一些孤立黑点。两簇之间的一个点用红色圈出,其最近邻(靠近其中一簇)用蓝色圈出。

用 Python 设计机器学习工作流

局部离群因子(LoF)

from sklearn.neighbors import 
   LocalOutlierFactor as lof
clf = lof()
y_pred = clf.fit_predict(X)
y_pred[:4]
array([ 1,  1,  1, -1])
clf.negative_outlier_factor_[:4]
array([-0.99, -1.02, -1.08 , -0.97])
confusion_matrix(
   y_pred, ground_truth)
array([[  5,  16],
       [  0, 184]])

同样的簇与一些孤立点。许多点被红色圈出,既有簇内也有孤立点。

用 Python 设计机器学习工作流

局部离群因子(LoF)

clf = lof(contamination=0.02)
y_pred = clf.fit_predict(X)
confusion_matrix(
   y_pred, ground_truth)
array([[  5,   0],
       [  0, 200]])

同样的簇与一些孤立点。仅有孤立点被红色圈出。

用 Python 设计机器学习工作流

谁还需要标签!

用 Python 设计机器学习工作流

Preparing Video For Download...