关于人工智能:基于SVM的异常检测方法

47次阅读

共计 1637 个字符,预计需要花费 5 分钟才能阅读完成。

作者 |Mahbubul Alam
编译 |VK
起源 |Towards Data Science

单类反对向量机简介

作为机器学习方面的专家或老手,你可能据说过反对向量机(SVM)——一种常常被援用和用于分类问题的有监督的机器学习算法。

反对向量机应用多维空间中的超平面来拆散一类观测值和另一类观测值。当然,反对向量机被用来解决多类分类问题。

然而,反对向量机也越来越多地利用于一类问题,即所有的数据都属于一个类。在这种状况下,算法被训练成学习什么是“失常的”,这样当一个新的数据被显示时,算法能够辨认它是否应该属于失常的。如果没有,新数据将被标记为异样或异样。要理解更多对于单类反对向量机的信息,请查看 Roemer Vlasveld 的这篇长篇文章:http://rvlasveld.github.io/bl…

最初要提到的是,如果你相熟 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.co…

欢送关注磐创 AI 博客站:
http://panchuang.net/

sklearn 机器学习中文官网文档:
http://sklearn123.com/

欢送关注磐创博客资源汇总站:
http://docs.panchuang.net/

正文完
 0