microsoftml.rx_oneclass_svm:异常情况检测

使用情况

microsoftml.rx_oneclass_svm(formula: str,
    data: [revoscalepy.datasource.RxDataSource.RxDataSource,
    pandas.core.frame.DataFrame], cache_size: float = 100,
    kernel: [<function linear_kernel at 0x0000007156EAC8C8>,
    <function polynomial_kernel at 0x0000007156EAC950>,
    <function rbf_kernel at 0x0000007156EAC7B8>,
    <function sigmoid_kernel at 0x0000007156EACA60>] = {'Name': 'RbfKernel',
    'Settings': {}}, epsilon: float = 0.001, nu: float = 0.1,
    shrink: bool = True, normalize: ['No', 'Warn', 'Auto',
    'Yes'] = 'Auto', ml_transforms: list = None,
    ml_transform_vars: list = None, row_selection: str = None,
    transforms: dict = None, transform_objects: dict = None,
    transform_function: str = None,
    transform_variables: list = None,
    transform_packages: list = None,
    transform_environment: dict = None, blocks_per_read: int = None,
    report_progress: int = None, verbose: int = 1,
    ensemble: microsoftml.modules.ensemble.EnsembleControl = None,
    compute_context: revoscalepy.computecontext.RxComputeContext.RxComputeContext = None)

说明

机器学习单类支持向量机

详细信息

单类 SVM 是用于异常情况检测的一种算法。 异常情况检测的目标是识别不属于某个目标类的离群值。 这种类型的 SVM 是单类的,因为训练集仅包含来自目标类的示例。 它推断目标类中对象的正常属性,并且从这些属性中预测哪些示例与普通示例不同。 这对于异常情况检测很有用,因为缺少训练示例是异常情况的决定性特征:通常很少有网络入侵、欺诈或其他类型的异常行为的示例。

参数

公式

revoscalepy.rx_formula 中描述的公式。 microsoftml 目前不支持交互术语和 F()

data

指定 .xdf 文件或数据帧对象的数据源对象或字符串。

cache_size

存储训练数据的缓存的最大大小 (MB)。 对于大型训练集,可以增加此大小。 默认值为 100 MB。

内核 (kernel)

表示用于计算内部产品的内核的字符串。 有关详细信息,请参阅 ma_kernel()。 可用选项如下:

  • rbf_kernel:径向基础函数内核。 它的参数表示项 exp(-gamma|x-y|^2 中的 gamma。 如果没有指定,则默认为 1 除以使用的特征数。 例如 rbf_kernel(gamma = .1)。 这是默认值。

  • linear_kernel:线性内核。

  • polynomial_kernel:多项式内核,在项 (a*<x,y> + bias)^deg 中,参数名称为 abiasdegbias 默认为 0。 度 deg 默认为 3。 如果没有指定 a,则设置为 1 除以特征数。

  • sigmoid_kernel:Sigmoid 内核,在项 tanh(gamma*<x,y> + coef0) 中,参数名称为 gammacoef0gamma 默认为 1 除以特征数。 参数 coef0 的默认值为 0。 例如 sigmoid_kernel(gamma = .1, coef0 = 0)

epsilon

优化器收敛的阈值。 如果迭代间的改进小于阈值,则算法将停止并返回当前模型。 该值必须大于或等于 numpy.finfo(double).eps。 默认值为 0.001。

nu

离群值部分与支持向量数之间的权衡(由希腊字母 nu 表示)。 必须介于 0 和 1 之间,通常介于 0.1 和 0.5 之间。 默认值为 0.1。

缩减

如果为 True,则使用缩减启发式。 在这种情况下,某些样本将在训练过程中“缩减”,这可能会加快训练速度。 默认值是 True

规范化

指定使用的自动规范化类型:

  • "Auto":如果需要规范化,则会自动执行。 这是默认选项。

  • "No":不执行任何规范化。

  • "Yes":执行规范化。

  • "Warn":如果需要规范化,则会显示一条警告消息,但不执行规范化。

规范化将不同的数据范围重新缩放为标准规模。 特征缩放可确保数据点之间的距离成比例,使各种优化方法(如梯度下降)的收敛速度更快。 如果执行规范化,则使用 MaxMin 规范化程序。 它对区间 [a, b] 中的值进行规范化,其中 -1 <= a <= 00 <= b <= 1 并且 b - a = 1。 此规范化程序通过将 0 映射到 0 来保持稀疏度。

ml_transforms

指定在训练前要对数据执行的 MicrosoftML 转换列表;如果不需要执行任何转换,则指定为“None”。 有关支持的转换,请参阅 featurize_textcategoricalcategorical_hash。 这些转换在任何指定的 Python 转换之后执行。 默认值为“None”。

ml_transform_vars

指定要在 ml_transforms 中使用的变量名称的字符向量;如果不使用任何变量名称,则指定为“None”。 默认值为“None”。

row_selection

不受支持。 使用数据集中的逻辑变量名称(带引号)或通过使用数据集中的变量的逻辑表达式指定模型要使用的数据集中的行(观察值)。 例如:

  • row_selection = "old" 将仅使用变量值 oldTrue 的观察值。

  • row_selection = (age > 20) & (age < 65) & (log(income) > 10) 仅使用 age 变量值介于 20 和 65 之间且 income 变量的 log 值大于 10 的观察值。

在处理任何数据转换之后执行行选择(请参阅参数 transformstransform_function)。 与所有表达式一样,row_selection 可以使用 expression 函数在函数调用之外定义。

转换

不受支持。 表示第一轮变量转换的窗体表达式。 与所有表达式一样,可以使用 expression 函数在函数调用之外定义 transforms(或 row_selection)。

transform_objects

不受支持。 一个命名列表,其中包含可由 transformstransform_functionrow_selection 引用的对象。

transform_function

变量转换函数。

transform_variables

转换函数所需的输入数据集变量的字符向量。

transform_packages

不受支持。 一个字符向量,用于指定将提供和预加载以在变量转换函数中使用的其他 Python 包(除 RxOptions.get_option("transform_packages") 中指定的包以外)。 例如,在 revoscalepy 函数中通过其 transformstransform_function 参数显式定义的那些包,或者通过其 formularow_selection 参数隐式定义的包。 参数 transform_packages 也可能为 None,表示未预加载 RxOptions.get_option("transform_packages") 以外的包。

transform_environment

不受支持。 用户定义环境,充当内部开发并用于变量数据转换的所有环境的父级。 如果为 transform_environment = None,则改用具有父级 revoscalepy.baseenv 的新“哈希”环境。

blocks_per_read

为从数据源读取的每个数据块指定要读取的块数。

report_progress

一个整数值,指定行处理进度的报告级别:

  • 0:不报告进度。

  • 1:打印并更新已处理的行数。

  • 2:报告已处理的行数和计时。

  • 3:报告已处理的行数和所有计时。

verbose

一个整数值,指定需要的输出量。 如果为 0,则计算期间不会打印详细输出。 从 14 的整数值表示提供的信息量逐步增加。

compute_context

设置执行计算的上下文,使用有效的 revoscalepy.RxComputeContext 指定。 目前支持本地和 revoscalepy.RxInSqlServer 计算上下文。

ensemble

控制用于集成的参数。

返回

具有已训练模型的 OneClassSvm 对象。

备注

此算法是单线程的,将始终尝试将整个数据集加载到内存中。

请参阅

linear_kernel, polynomial_kernel, rbf_kernel, sigmoid_kernel, rx_predict.

参考

维基百科:异常情况检测

Microsoft Azure 机器学习工作室(经典):单类支持向量机

估计高维分布的支持

新支持向量算法

LIBSVM:支持向量机的库

示例

'''
Anomaly Detection.
'''
import numpy
import pandas
from microsoftml import rx_oneclass_svm, rx_predict
from revoscalepy.etl.RxDataStep import rx_data_step
from microsoftml.datasets.datasets import get_dataset

iris = get_dataset("iris")

import sklearn
if sklearn.__version__ < "0.18":
    from sklearn.cross_validation import train_test_split
else:
    from sklearn.model_selection import train_test_split

irisdf = iris.as_df()
data_train, data_test = train_test_split(irisdf)

# Estimate a One-Class SVM model
model = rx_oneclass_svm(
            formula= "~ Sepal_Length + Sepal_Width + Petal_Length + Petal_Width",
            data=data_train)

# Add additional non-iris data to the test data set
data_test["isIris"] = 1.0
not_iris = pandas.DataFrame(data=dict(Sepal_Length=[2.5, 2.6], 
        Sepal_Width=[.75, .9], Petal_Length=[2.5, 2.5], 
        Petal_Width=[.8, .7], Species=["not iris", "not iris"], 
        isIris=[0., 0.]))

merged_test = pandas.concat([data_test, not_iris])

scoresdf = rx_predict(model, data=merged_test, extra_vars_to_write=["isIris"])

# Look at the last few observations
print(scoresdf.tail())

输出:

Automatically adding a MinMax normalization transform, use 'norm=Warn' or 'norm=No' to turn this behavior off.
Beginning processing data.
Rows Read: 112, Read Time: 0, Transform Time: 0
Beginning processing data.
Beginning processing data.
Rows Read: 112, Read Time: 0, Transform Time: 0
Beginning processing data.
Using these libsvm parameters: svm_type=2, nu=0.1, cache_size=100, eps=0.001, shrinking=1, kernel_type=2, gamma=0.25, degree=0, coef0=0
Reconstructed gradient.
optimization finished, #iter = 15
obj = 52.905421, rho = 9.506052
nSV = 12, nBSV = 9
Not training a calibrator because it is not needed.
Elapsed time: 00:00:00.0555122
Elapsed time: 00:00:00.0212389
Beginning processing data.
Rows Read: 40, Read Time: 0, Transform Time: 0
Beginning processing data.
Elapsed time: 00:00:00.0349974
Finished writing 40 rows.
Writing completed.
    isIris     Score
35     1.0 -0.142141
36     1.0 -0.531449
37     1.0 -0.189874
38     0.0  0.635845
39     0.0  0.555602