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)

Description

機器學習單一類別支援向量機器

詳細資料

單一類別 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 中參數名稱 abiasdeg 的多項式核心。 bias,預設為 0。 度數 deg,預設為 3。 如果未指定 a,則會將其設為 1 除以特徵數目。

  • sigmoid_kernel:包含字詞 tanh(gamma*<x,y> + coef0) 中參數名稱 gammacoef0 的 Sigmoid 核心。 gamma,預設為 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。

shrink

若為 True,則使用壓縮啟發學習法。 在此情況下,某些樣本會在訓練程序中「壓縮」,從而加速訓練。 預設值是 True

正規化

指定所使用的自動正規化類型:

  • "Auto":如果需要正規化,會自動執行。 這是預設選項。

  • "No":不執行正規化。

  • "Yes":執行正規化。

  • "Warn":如果需要正規化,則會顯示警告訊息,但是不會執行正規化。

正規化會將不同的資料範圍重新調整為標準規模。 特徵擴縮可確保資料點之間的距離成比例,並使各種最佳化方法 (例如梯度下降) 能夠更快收斂。 如果執行正規化,會使用 MaxMin 正規化程式。 其會以區間 [a, b] 將值正規化,其中 -1 <= a <= 00 <= b <= 1b - a = 1。 此正規化程式會藉由將零對應至零來保留稀疏性。

ml_transforms

指定在訓練之前要在資料上執行的 MicrosoftML 轉換清單,或者,若未執行任何轉換,則為 None。 請參閱 featurize_textcategoricalcategorical_hash,以了解哪有些支援的轉換。 這些轉換會在任何指定的 Python 轉換之後執行。 預設值為 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 之間且 income 變數 log 值大於 10 的觀察值。

資料列選取會在處理任何資料轉換之後執行 (請參閱引數 transformstransform_function)。 如同所有運算式,可以在函數呼叫之外使用 expression 函數定義 row_selection

轉換

不支援。 代表第一輪變數轉換形式的運算式。 如同所有運算式,可以在函數呼叫之外使用 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.

參考資料

Wikipedia:異常偵測

Microsoft Azure Machine Learning 工作室 (傳統):單一類別支援向量機器

估計高維度分佈的支援

新的支援向量演算法

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