rxOneClassSvm:OneClass SVM
机器学习单类支持向量机
用法
rxOneClassSvm(formula = NULL, data, cacheSize = 100, kernel = rbfKernel(),
epsilon = 0.001, nu = 0.1, shrink = TRUE, normalize = "auto",
mlTransforms = NULL, mlTransformVars = NULL, rowSelection = NULL,
transforms = NULL, transformObjects = NULL, transformFunc = NULL,
transformVars = NULL, transformPackages = NULL, transformEnvir = NULL,
blocksPerRead = rxGetOption("blocksPerRead"),
reportProgress = rxGetOption("reportProgress"), verbose = 1,
computeContext = rxGetOption("computeContext"),
ensemble = ensembleControl(), ...)
参数
formula
rxFormula 中描述的公式。 MicrosoftML 目前不支持交互项和 F()
。
data
指定 .xdf 文件或数据帧对象的数据源对象或字符串。
cacheSize
存储训练数据的缓存的最大大小 (MB)。 对于大型训练集,可以增加此大小。 默认值为 100 MB。
kernel
表示用于计算内部产品的内核的字符串。 有关详细信息,请参阅 maKernel。 可用选项如下:
rbfKernel()
:径向基础函数内核。 它的参数表示项exp(-gamma|x-y|^2
中的gamma
。 如果没有指定,则默认为1
除以使用的特征数。 例如rbfKernel(gamma = .1)
。 这是默认值。linearKernel()
:线性内核。polynomialKernel()
:多项式内核,在项(a*<x,y> + bias)^deg
中,参数名称为a
、bias
和deg
。bias
默认为0
。 度deg
默认为3
。 如果没有指定a
,则设置为1
除以特征数。 例如,maKernelPoynomial(bias = 0, deg = `` 3)
。sigmoidKernel()
:Sigmoid 内核,在项tanh(gamma*<x,y> + coef0)
中,参数名称为gamma
和coef0
。gamma
默认为1
除以特征数。 参数coef0
的默认值为0
。 例如sigmoidKernel(gamma = .1, coef0 = 0)
。
epsilon
优化器收敛的阈值。 如果迭代间的改进小于阈值,则算法将停止并返回当前模型。 该值必须大于或等于 .Machine$double.eps
。 默认值为 0.001。
nu
离群值部分与支持向量数之间的权衡(由希腊字母 nu 表示)。 必须介于 0 和 1 之间,通常介于 0.1 和 0.5 之间。 默认值为 0.1。
shrink
如果为 TRUE
,则使用缩减启发式。 在这种情况下,某些样本将在训练过程中“缩减”,这可能会加快训练速度。 默认值是 TRUE
。
normalize
指定使用的自动规范化类型:
"auto"
:如果需要规范化,则会自动执行。 这是默认选项。"no"
:不执行任何规范化。"yes"
:执行规范化。"warn"
:如果需要规范化,则会显示一条警告消息,但不执行规范化。
规范化将不同的数据范围重新缩放为标准规模。 特征缩放可确保数据点之间的距离成比例,使各种优化方法(如梯度下降)的收敛速度更快。 如果执行规范化,则使用MaxMin
规范化程序。 它对区间 [a, b] 中的值进行规范化,其中-1 <= a <= 0
、0 <= b <= 1
并且b - a = 1
。 此规范化程序通过将 0 映射到 0 来保持稀疏度。
mlTransforms
指定在训练前要对数据执行的 MicrosoftML 转换的列表;如果不需要执行任何转换,则指定为 NULL
。 有关支持的转换,请参阅 featurizeText、categorical 和 categoricalHash。 这些转换在任何指定的 R 转换之后执行。 默认值是 NULL
。
mlTransformVars
指定要在 mlTransforms
中使用的变量名称的字符向量;如果不使用任何变量名称,则指定为 NULL
。 默认值是 NULL
。
rowSelection
使用数据集中的逻辑变量名称(带引号)或通过使用数据集中的变量的逻辑表达式指定模型要使用的数据集中的行(观察值)。 例如,rowSelection = "old"
将仅使用变量 old
的值为 TRUE
的观察值。 rowSelection = (age > 20) & (age < 65) & (log(income) > 10)
仅使用 age
变量值介于 20 和 65 之间且 income
变量的 log
值大于 10 的观察值。 在处理任何数据转换之后执行行选择(请参阅参数 transforms
或 transformFunc
)。 与所有表达式一样,可以使用表达式函数在函数调用之外定义 rowSelection
。
transforms
表示第一轮变量转换的窗体 list(name = expression, ``...)
的表达式。 与所有表达式一样,可以使用表达式函数在函数调用之外定义 transforms
(或 rowSelection
)。
transformObjects
一个命名列表,其中包含可由 transforms
、transformsFunc
和 rowSelection
引用的对象。
transformFunc
变量转换函数。 有关详细信息,请参阅 rxTransform。
transformVars
转换函数所需的输入数据集变量的字符向量。 有关详细信息,请参阅 rxTransform。
transformPackages
一个字符向量,用于指定将提供和预加载以在变量转换函数中使用的附加 R 包(在 rxGetOption("transformPackages")
中指定的包之外)。 例如,在 RevoScaleR 函数中通过 transforms
和 transformFunc
参数显式定义的那些包,或者通过 formula
或 rowSelection
参数隐式定义的包。 transformPackages
参数也可能为 NULL
,表示未预加载 rxGetOption("transformPackages")
以外的包。
transformEnvir
用户定义环境,充当内部开发并用于变量数据转换的所有环境的父级。 如果为 transformEnvir = NULL
,则改用具有父级 baseenv()
的新“哈希”环境。
blocksPerRead
为从数据源读取的每个数据块指定要读取的块数。
reportProgress
一个整数值,指定行处理进度的报告级别:
0
:不报告进度。1
:打印并更新已处理的行数。2
:报告已处理的行数和计时。3
:报告已处理的行数和所有计时。
verbose
一个整数值,指定需要的输出量。 如果为 0
,则计算期间不会打印详细输出。 从 1
到 4
的整数值表示提供的信息量逐步增加。
computeContext
设置执行计算的上下文,使用有效的 RxComputeContext 指定。 目前支持本地和 RxInSqlServer 计算上下文。
ensemble
控制用于集成的参数。
...
要直接传递到 Microsoft 计算引擎的其他参数。
详细信息
检测是为了识别不属于某个目标类的离群值。 这种类型的 SVM 是单类的,因为训练集仅包含来自目标类的示例。 它推断目标类中对象的正常属性,并且从这些属性中预测哪些示例与普通示例不同。 这对于异常情况检测很有用,因为缺少训练示例是异常情况的决定性特征:通常很少有网络入侵、欺诈或其他类型的异常行为的示例。
值
rxOneClassSvm
:具有已训练模型的 rxOneClassSvm
对象。
OneClassSvm
:OneClass Svm 训练程序的类 maml
的学习器规范对象。
备注
此算法是单线程的,将始终尝试将整个数据集加载到内存中。
作者
Microsoft Corporation Microsoft Technical Support
参考
Azure Machine Learning Studio (classic): One-Class Support Vector Machine
Support of a High-Dimensional Distribution
另请参阅
rbfKernel、linearKernel、polynomialKernel、sigmoidKernelrxFastTrees、rxFastForest、rxFastLinear、rxLogisticRegression、rxNeuralNet、featurizeText、categorical、categoricalHash、rxPredict.mlModel。
示例
# Estimate a One-Class SVM model
trainRows <- c(1:30, 51:80, 101:130)
testRows = !(1:150 %in% trainRows)
trainIris <- iris[trainRows,]
testIris <- iris[testRows,]
svmModel <- rxOneClassSvm(
formula = ~Sepal.Length + Sepal.Width + Petal.Length + Petal.Width,
data = trainIris)
# Add additional non-iris data to the test data set
testIris$isIris <- 1
notIris <- data.frame(
Sepal.Length = c(2.5, 2.6),
Sepal.Width = c(.75, .9),
Petal.Length = c(2.5, 2.5),
Petal.Width = c(.8, .7),
Species = c("not iris", "not iris"),
isIris = 0)
testIris <- rbind(testIris, notIris)
scoreDF <- rxPredict(svmModel,
data = testIris, extraVarsToWrite = "isIris")
# Look at the last few observations
tail(scoreDF)
# Look at average scores conditioned by 'isIris'
rxCube(Score ~ F(isIris), data = scoreDF)