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()
:包含字詞tanh(gamma*<x,y> + coef0)
中參數名稱gamma
和coef0
的 Sigmoid 核心。gamma
,預設為1
除以特徵數目。 參數coef0
預設為0
。 例如:sigmoidKernel(gamma = .1, coef0 = 0)
。
epsilon
最佳化工具收斂的閾值。 換句話說,如果反覆運算之間的改進少於臨界值,此演算法會停止,並傳回目前的模型。 此值必須大於或等於 .Machine$double.eps
。 預設值為 0.001。
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
。 此正規化程式會藉由將零對應至零來保留稀疏性。
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 Compute Engine 的額外引數。
詳細資料
目標是識別不屬於某些目標類別的極端值。 這種類型的 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)