ocsvm
構文
説明
関数 ocsvm
は、外れ値の検出と新規性の検出のための 1 クラス サポート ベクター マシン (SVM) モデルの当てはめに使用します。
外れ値検出 (学習データ中の異常を検出) —
ocsvm
の出力引数tf
を使用して、学習データ中の異常を検出します。新規性の検出 (汚染されていない学習データで新規のデータの異常を検出) — 汚染されていない学習データ (外れ値がないデータ) を
ocsvm
に渡してOneClassSVM
オブジェクトを作成します。そのオブジェクトと新規データをオブジェクト関数isanomaly
に渡して、新規のデータの異常を検出します。
は、table Mdl
= ocsvm(Tbl
)Tbl
の予測子データに対する OneClassSVM
オブジェクト (1 クラス SVM モデル オブジェクト) を返します。
では、前の構文におけるいずれかの入力引数の組み合わせに加えて、1 つ以上の名前と値の引数を使用してオプションを指定します。たとえば、Mdl
= ocsvm(___,Name=Value
)
は、学習データの 10% を異常として処理するように関数に指示します。ContaminationFraction
=0.1
例
入力引数
出力引数
詳細
ヒント
アルゴリズム
ocsvm
は、Tbl
に含まれているNaN
、''
(空の文字ベクトル)、""
(空の string)、<missing>
、<undefined>
の値とX
に含まれているNaN
値を欠損値と見なします。ocsvm
は、すべての値が欠損値である観測値を削除します。ocsvm
は、一部の値が欠損値である観測値は使用しません。この関数は、それらの観測値に異常スコアNaN
および異常インジケーターfalse
(logical 0) を割り当てます。
ocsvm
は、メモリ制限 Broyden-Fletcher-Goldfarb-Shanno (LBFGS) ソルバーとリッジ (L2) 正則化を使用して、正則化された目的関数を最小化します。変換後の予測子データを保持するためにocsvm
で必要となるメモリがBlockSize
の値より多い場合、この関数はブロック単位方式を使用します。ocsvm
がブロック単位方式を使用する場合、各反復で損失と勾配の計算をデータのさまざまな部分に分散させることにより LBFGS が実装されます。また、ocsvm
は、データの一部に対して局所的にモデルを当てはめ、平均化で係数を結合することにより、線形係数およびバイアス項の初期推定値を改善します。Verbose=1
が指定された場合、ocsvm
は各データ通過についての診断情報を表示します。ocsvm
がブロック単位方式を使用しない場合、初期推定値はゼロになります。Verbose=1
が指定された場合、ocsvm
は各反復についての診断情報を表示します。
代替機能
異常検出用の 1 クラス SVM モデルの学習には、関数 fitcsvm
も使用できます。
関数
ocsvm
は、関数fitcsvm
よりも簡単で推奨される異常検出用のワークフローを提供します。関数
ocsvm
は、OneClassSVM
オブジェクト、異常インジケーター、および異常スコアを返します。その出力を使用して学習データの異常を特定できます。新規のデータの異常を見つけるには、OneClassSVM
のオブジェクト関数isanomaly
を使用できます。関数isanomaly
は、新規データの異常インジケーターおよびスコアを返します。関数
fitcsvm
は、1 クラスとバイナリの両方の分類をサポートします。クラス ラベル変数に 1 つしかクラスが含まれていない場合 (1 のベクトルの場合など)、fitcsvm
は 1 クラス分類用にモデルを学習させ、ClassificationSVM
オブジェクトを返します。異常を特定するには、最初にClassificationSVM
のオブジェクト関数resubPredict
またはpredict
を使用して異常スコアを計算してから、負のスコアをもつ観測値を探して異常を特定する必要があります。ocsvm
では大きい正の異常スコアが異常を示すのに対し、ClassificationSVM
のpredict
では負のスコアが異常を示すことに注意してください。
関数
ocsvm
は SVM の主問題形式に基づいて判定境界を求めるのに対し、関数fitcsvm
は SVM の双対問題形式に基づいて判定境界を求めます。大規模な (n が大きい) データ セットについては、
ocsvm
のソルバーの方がfitcsvm
のソルバーよりも計算量が少なくなります。fitcsvm
のソルバーでは n 行 n 列のグラム行列の計算が必要ですが、ocsvm
のソルバーで必要なのは n 行 m 列の行列の形成だけです。ここで、m は拡張空間の次元数であり、ビッグ データにおいては一般に n よりもはるかに小さくなります。
参照
バージョン履歴
R2022b で導入