異常偵測

在 Python 設計機器學習工作流程

Dr. Chris Anagnostopoulos

Honorary Associate Professor

異常與離群值

監督式

以黑色顯示的兩個叢集,夾雜一些孤立的紅點。

非監督式

以黑色顯示的兩個叢集,夾雜一些孤立的黑點。

在 Python 設計機器學習工作流程

異常與離群值

以黑色顯示的兩個叢集,夾雜一些孤立的黑點。

  • 其中一個類別非常稀少
  • 資料集偏移的極端情況
  • 範例:
    • 資安
    • 詐欺偵測
    • 反洗錢
    • 故障偵測
在 Python 設計機器學習工作流程

非監督式流程

以黑色顯示的兩個叢集與一些孤立黑點,被紅圈標出。

  • 沒有標籤要如何擬合演算法?
  • 要如何估計效能?

審慎使用少量標籤:

  • 太少,直接訓練易過度擬合
  • 剛好可做模型選擇
  • 放棄無偏的準確率估計

資料集分成訓練、選擇與驗證三塊,僅選擇集有標籤。

在 Python 設計機器學習工作流程
  • 離群值(outlier):落在多數資料範圍外的資料點

以黑色顯示的兩個叢集與一些孤立黑點。距離最遠的點以紅圈標出。

  • 局部離群值(local outlier):落在無其他資料、相對孤立區域的資料點

以黑色顯示的兩個叢集與一些孤立黑點。位於兩叢集之間的孤立點以紅圈標出。

在 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...