Usage
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)
Description
机器学习一类支持向量机
详细信息
单类 SVM 是用于异常情况检测的算法。 异常情况检测的目标是识别不属于某些目标类的离群值。 这种类型的 SVM 是一类,因为训练集仅包含目标类中的示例。 它推断目标类中对象的正常属性,并从这些属性预测哪些示例与普通示例不同。 这对于异常情况检测非常有用,因为训练示例的稀缺性是异常的决定性特征:通常很少有网络入侵、欺诈或其他类型的异常行为示例。
Arguments
公式
如revoscalepy.rx_formula中所述的公式。
交互术语, F() 目前在 microsoftml 中不受支持。
数据
指定 .xdf 文件或数据帧对象的数据源对象或字符串。
cache_size
存储训练数据的缓存的最大大小(以 MB 为单位)。 为大型训练集增加此值。 默认值为 100 MB。
内核
一个字符串,表示用于计算内部产品的内核。 有关详细信息,请参阅 ma_kernel()。 可用选项如下:
rbf_kernel:径向基函数内核。 其参数在术语exp(-gamma|x-y|^2中表示gamma。 如果未指定,则默认1除以使用的功能数。 例如,rbf_kernel(gamma = .1)。 这是默认值。linear_kernel:线性内核。polynomial_kernel:具有参数名称a的多项式内核,bias并在deg术语(a*<x,y> + bias)^deg中。 默认值bias为0. 度,deg默认值为3. 如果未a指定,则将其设置为1除以特征数。sigmoid_kernel:带参数名称和gammacoef0术语tanh(gamma*<x,y> + coef0)的 Sigmoid 内核。gamma,默认1除以特征数。coef0参数默认为0. 例如,sigmoid_kernel(gamma = .1, coef0 = 0)。
小量
优化器收敛的阈值。 如果迭代之间的改进小于阈值,算法将停止并返回当前模型。 该值必须大于或等于 numpy.finfo(double).eps。 默认值为 0.001。
女
离群值分数与支持向量数(由希腊文字母 nu 表示)之间的权衡。 必须介于 0 和 1 之间,通常介于 0.1 和 0.5 之间。 默认值为 0.1。
shrink
使用收缩启发法(如果 True)。 在这种情况下,某些示例将在训练过程中“收缩”,这可能会加快训练速度。 默认值为 True。
规范
指定使用的自动规范化类型:
"Auto":如果需要规范化,则会自动执行。 这是默认选项。"No":不执行规范化。"Yes":执行规范化。"Warn":如果需要规范化,则会显示警告消息,但不执行规范化。
规范化将不同的数据范围重新缩放为标准规模。 特征缩放可确保数据点之间的距离成正比,并使各种优化方法(如梯度下降)的聚合速度要快得多。 如果执行规范化, MaxMin 则使用规范化器。 它以间隔 [a, b] 将值规范化,其中 -1 <= a <= 0 和 0 <= b <= 1 和 b - a = 1。 此规范化器通过将零映射到零来保留稀疏性。
ml_transforms
指定要在训练之前对数据执行的 MicrosoftML 转换的列表;如果未执行任何转换,则为 None 。 有关支持的转换,请参阅
ml_transform_vars
指定要用于 ml_transforms 变量名称的字符向量;如果未使用,则为 None 。
默认值为 None。
row_selection
不支持。 指定数据集中的行(观察值),这些行(观察值)由模型使用数据集(以引号为单位)中的逻辑变量的名称,或使用数据集中的变量的逻辑表达式。 例如:
row_selection = "old"将仅使用变量old值所在的True观察值。row_selection = (age > 20) & (age < 65) & (log(income) > 10)仅使用变量值age介于 20 和 65 之间的观察值,而变量的值logincome大于 10。
在处理任何数据转换后执行行选择(请参阅参数 transforms 或 transform_function)。 与所有表达式一样, row_selection 可以使用函数在函数调用 expression 外部定义。
变换
不支持。 表示第一轮变量转换的窗体的表达式。 与所有表达式一样, transforms 可以使用函数在函数调用expression外部定义(或row_selection)。
transform_objects
不支持。 一个命名列表,其中包含可由 <
transform_function
变量转换函数。
transform_variables
转换函数所需的输入数据集变量的字符向量。
transform_packages
不支持。 一个字符向量,用于指定其他 Python 包(在指定 RxOptions.get_option("transform_packages")包之外)可供使用并预加载,以便在变量转换函数中使用。
例如,在 revoscalepy 函数中显式定义的函数通过参数transforms和transform_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:已处理行并报告所有计时。
详细的
一个整数值,该值指定所需的输出量。
如果在 0计算期间不打印详细输出。 整数值, 1 用于 4 提供不断增加的信息量。
compute_context
设置使用有效的 revoscalepy 指定的计算执行的上下文。RxComputeContext。 当前为本地和 revoscalepy。支持 RxInSqlServer 计算上下文。
集成
用于集成的控制参数。
退货
具有 OneClassSvm 已训练模型的对象。
注释
此算法是单线程算法,将始终尝试将整个数据集加载到内存中。
另请参阅
linear_kernel、、polynomial_kernelrbf_kernel、sigmoid_kernel. rx_predict
References
Microsoft Azure 机器学习工作室(经典):One-Class 支持向量机
Example
'''
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