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)

説明

Machine Learning 1 クラス サポート ベクター マシン

説明

1 クラス SVM は、異常検出のアルゴリズムです。 異常検出の目的は、何らかのターゲット クラスに属していない外れ値を特定することです。 トレーニング セットにはターゲット クラスの例だけが含まれているため、この種類の SVM は 1 クラスです。 ターゲット クラス内のオブジェクトに対してどのプロパティが正常かを予測し、これらのプロパティから、通常の例とは異なる例を予測します。 これは、トレーニング例の不足が異常の定義文字なので、異常検出に役立ちます。通常は、ネットワークへの侵入、不正行為、その他の種類の異常な動作の例はほとんどありません。

引数

formula

formula は revoscalepy.rx_formula で記述されます。 相互作用項と F() は、現在、microsoftml ではサポートされていません。

data

.xdf ファイルまたはデータ フレーム オブジェクトを指定するデータ ソース オブジェクトまたは文字列。

cache_size

トレーニング データを格納するキャッシュの最大サイズ (MB 単位)。 大規模なトレーニング セットの場合は、これを増やします。 既定値は 100 MB です。

kernel

内積の計算に使用されるカーネルを表す文字列。 詳細については、「ma_kernel()」を参照してください。 次の選択肢があります。

  • rbf_kernel: 放射基底関数カーネル。 パラメーターは項 exp(-gamma|x-y|^2gamma を表します。 指定しない場合、既定値は 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 を使用したシグモイド カーネル。 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 です。

normalize

使用される自動正規化の種類を指定します。

  • "Auto": 正規化が必要な場合は、自動的に実行されます。 既定値です。

  • "No": 正規化は実行されません。

  • "Yes": 正規化が実行されます。

  • "Warn": 正規化が必要な場合は警告メッセージが表示されますが、正規化は実行されません。

正規化では、異なるデータ範囲が標準スケールに再スケーリングされます。 特徴のスケーリングにより、データ ポイント間の距離が比例し、勾配降下などのさまざまな最適化方法がはるかに高速に収束するようになります。 正規化が実行される場合は、MaxMin ノーマライザーが使用されます。 区間 [a, b] で値を正規化します。ただし、-1 <= a <= 0 かつ 0 <= 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" の場合は、変数 old の値が True である観測値のみを使用します。

  • row_selection = (age > 20) & (age < 65) & (log(income) > 10) の場合は、変数 age の値が 20 から 65 の間で、変数 incomelog の値が 10 を超える観測値のみを使用します。

行の選択は、データ変換を処理した後に実行されます (引数 transforms または transform_function を参照してください)。 すべての式と同様に、row_selection は、expression 関数を使用して関数呼び出しの外部で定義できます。

変換

サポートされていません。 変数変換の最初のラウンドを表すフォームの式。 すべての式と同様に、transforms (または row_selection) は、expression 関数を使用して関数呼び出しの外部で定義できます。

transform_objects

サポートされていません。 transformstransform_functionrow_selection で参照できるオブジェクトを含む名前付きリスト。

transform_function

変数変換関数。

transform_variables

変換関数に必要な入力データ セット変数の文字ベクトル。

transform_packages

サポートされていません。 変数変換関数で使用するために事前に読み込まれる追加の Python パッケージ (RxOptions.get_option("transform_packages") で指定されているもの以外) を指定する文字ベクトル。 たとえば、transforms および transform_function 引数を使用して revoscalepy 関数で明示的に定義されているものや、formula または row_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 の場合、計算中に詳細は出力されません。 1 から 4 の整数値を指定すると、情報の量が増えます。

compute_context

有効な revoscalepy.RxComputeContext で指定された、計算が実行されるコンテキストを設定します。 現在はローカルと revoscalepy.RxInSqlServer コンピューティング コンテキストがサポートされています。

ensemble

アンサンブルの制御パラメーター。

戻り値

トレーニング済みモデルを持つ OneClassSvm オブジェクト。

Note

このアルゴリズムはシングル スレッドであり、常にデータ セット全体をメモリに読み込もうとします。

関連項目

linear_kernel, polynomial_kernel, rbf_kernel, sigmoid_kernel, rx_predict.

リファレンス

Wikipedia: 異常検知

Microsoft Azure Machine Learning Studio (クラシック): 1 クラス サポート ベクター マシン

Estimating the Support of a High-Dimensional Distribution (高次分布のサポートの推測)

New Support Vector Algorithms (新しいサポート ベクター アルゴリズム)

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