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/特征维度。 | |
核函数类型 | 核函数的类型,取值如下:
| |
每组最大异常点数目 | 每组的最大异常点数目。 | |
最大异常点比例 | 算法检测异常点的最大比例。 | |
每组最大样本数目 | 每组最大的样本数目。 | |
异常点比例上界参数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 |
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()