文档

One-Class SVM异常检测

更新时间:

One-Class SVM与传统SVM不同,是一种非监督的学习算法。您可以使用One-Class SVM异常检测通过学习边界对异常点进行预测。本文为您介绍One-Class SVM异常检测的参数配置。

使用限制

支持运行的计算资源为MaxCompute。

组件配置

您可以通过以下任意一种方式,配置One-Class SVM异常检测参数。

方式一:可视化方式

Designer工作流页面配置组件参数。

页签

参数说明

描述

字段设置

特征列名数组

特征列名的数组。

分组列名数组

分组列名的数组。

tensor列

tensor列。

向量列名

向量列对应的列名。

参数设置

预测结果列名

预测结果列的列名。

Kernel函数的相关参数coef0

核函数的相关参数,默认为0.0。

说明

当核函数类型为POLY和SIGMOID时,该参数才会生效。

多项式阶数

多项式的阶数。

收敛阈值

迭代方法的终止判断阈值,默认为1.0E-6。

Kernel函数的相关参数gamma

核函数的相关参数,默认为-1.0。

说明

当核函数类型为RBF、POLY和SIGMOID时,该参数才会生效。如果未设置该参数,默认取值为1/特征维度。

核函数类型

核函数的类型,取值如下:

  • RBF

  • POLY

  • SIGMOID

  • LINEAR

每组最大异常点数目

每组的最大异常点数目。

最大异常点比例

算法检测异常点的最大比例。

每组最大样本数目

每组最大的样本数目。

异常点比例上界参数nu

与支持向量的数目正向相关。取值范围为(0,1),默认为0.01。

异常评分阈值

当评分大于该阈值时,判定为异常点。

预测详细信息列名

预测详细信息列的名称。

组件多线程线程个数

组件多线程的线程个数。

执行调优

节点个数

节点个数,与参数单个节点内存大小配对使用,正整数。范围[1, 9999]。

单个节点内存大小,单位M

单个节点内存大小,单位MB,正整数。范围[1024, 64*1024]。

方式二:Python代码方式

使用PyAlink脚本组件配置该组件参数。您可以使用PyAlink脚本组件进行Python代码调用,详情请参见PyAlink脚本。

参数名称

是否必选

描述

默认值

predictionCol

预测结果列的列名。

degree

多项式的阶数。

2

epsilon

迭代方法的终止判断阈值。

1.0E-6

featureCols

特征列名数组。

全选

groupCols

分组列名数组。

maxOutlierNumPerGroup

每组的最大异常点数目。

maxOutlierRatio

算法检测异常点的最大比例。

maxSampleNumPerGroup

每组最大的样本数目。

outlierThreshold

当评分大于该阈值时,判定为异常点。

predictionDetailCol

预测详细信息列的名称。

tensorCol

tensor列。

vectorCol

向量列对应的列名。

kernelType

核函数的类型,取值如下:

  • RBF

  • POLY

  • SIGMOID

  • LINEAR

RBF

coef0

核函数的相关参数。

说明

当核函数类型为POLY和SIGMOID时,该参数才会生效。

0.0

gamma

核函数的相关参数。

说明

当核函数类型为RBF、POLY和SIGMOID时,该参数才会生效。如果未设置该参数,默认取值为1/特征维度。

-1.0

nu

与支持向量的数目正向相关。取值范围为(0,1)。

0.01

numThreads

组件多线程的线程个数。

1

Python代码方式的使用示例如下。

df = pd.DataFrame([
[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],
[0.7308781907032909,0.41008081149220166,0.20771484130971707,0.3327170559595112],
[0.7311469360199058,0.9014476240300544,0.49682259343089075,0.9858769332362016],
[0.731057369148862,0.07099203475193139,0.06712000939049956,0.768156984078079],
[0.7306094602878371,0.9187140138555101,0.9186071189908658,0.6795571637816596],
[0.730519863614471,0.08825840967622589,0.4889045498516358,0.461837214623537],
[0.7307886238322471,0.5796252073129174,0.7780122870716483,0.11499709190022733],
[0.7306990420600421,0.7491696031336331,0.34830970303125697,0.8972771427421047]])

# load data
data = BatchOperator.fromDataframe(df, schemaStr="x1 double, x2 double, x3 double, x4 double")

OcsvmOutlierBatchOp() \
            .setFeatureCols(["x1", "x2", "x3", "x4"]) \
            .setGamma(0.5) \
            .setNu(0.1) \
            .setKernelType("RBF") \
            .setPredictionCol("pred").linkFrom(data).print()