基於SVM的異常檢測方法


作者|Mahbubul Alam
編譯|VK
來源|Towards Data Science

單類支持向量機簡介

作為機器學習方面的專家或新手,你可能聽說過支持向量機(SVM)——一種經常被引用和用於分類問題的有監督的機器學習算法。

支持向量機使用多維空間中的超平面來分離一類觀測值和另一類觀測值。當然,支持向量機被用來解決多類分類問題。

然而,支持向量機也越來越多地應用於一類問題,即所有的數據都屬於一個類。在這種情況下,算法被訓練成學習什么是“正常的”,這樣當一個新的數據被顯示時,算法可以識別它是否應該屬於正常的。如果沒有,新數據將被標記為異常或異常。要了解更多關於單類支持向量機的信息,請查看Roemer Vlasveld的這篇長篇文章:http://rvlasveld.github.io/blog/2013/07/12/introduction-to-one-class-support-vector-machines/

最后要提到的是,如果你熟悉sklearn庫,你會注意到有一種算法專門為所謂的“新穎性檢測”而設計。它的工作方式與我剛才在使用單類支持向量機的異常檢測中描述的方法類似。在我看來,只是上下文決定了是否將其稱為新穎性檢測或異常值檢測或諸如此類的名稱。

下面是Python編程語言中單類支持向量機的簡單演示。請注意,我交替使用離群值和異常值。


步驟1:導入庫

對於這個演示,我們需要三個核心庫-用於數據爭拗的python和numpy,用於模型構建sklearn和可視化matlotlib。

# 導入庫
import pandas as pd
from sklearn.svm import OneClassSVM
import matplotlib.pyplot as plt
from numpy import where

步驟2:准備數據

我使用的是來自在線資源的著名的Iris數據集,因此你可以練習使用,而不必擔心如何從何處獲取數據。

# 導入數據
data = pd.read_csv("https://raw.githubusercontent.com/uiuc-cse/data-fa14/gh-pages/data/iris.csv")

# 輸入數據
df = data[["sepal_length", "sepal_width"]]

步驟3:模型

與其他分類算法中的超參數調整不同,單類支持向量機使用nu作為超參數,用來定義哪些部分的數據應該被分類為異常值。nu=0.03表示算法將3%的數據指定為異常值。

# 模型參數
model = OneClassSVM(kernel = 'rbf', gamma = 0.001, nu = 0.03).fit(df)

步驟4:預測

預測的數據集將有1或-1值,其中-1值是算法檢測到的異常值。

# 預測
y_pred = model.predict(df)
y_pred

步驟5:過濾異常

# 過濾異常值索引
outlier_index = where(y_pred == -1) 

# 過濾異常值
outlier_values = df.iloc[outlier_index]
outlier_values

步驟6:可視化異常

# 可視化輸出
plt.scatter(data["sepal_length"], df["sepal_width"])
plt.scatter(outlier_values["sepal_length"], outlier_values["sepal_width"], c = "r")

紅色的數據點是離群值

總結

在本文中,我想對一類支持向量機(One-classsvm)做一個簡單的介紹,這是一種用於欺詐/異常/異常檢測的機器學習算法。

我展示了一些構建直覺的簡單步驟,但是當然,一個真實的實現需要更多的實驗來找出在特定的環境和行業中什么是有效的,什么是不起作用的。

原文鏈接:https://towardsdatascience.com/support-vector-machine-svm-for-anomaly-detection-73a8d676c331

歡迎關注磐創AI博客站:
http://panchuang.net/

sklearn機器學習中文官方文檔:
http://sklearn123.com/

歡迎關注磐創博客資源匯總站:
http://docs.panchuang.net/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM