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()