isanomaly
構文
説明
は、tf
= isanomaly(Mdl
,Tbl
)OneClassSVM
オブジェクト Mdl
を使用して table Tbl
内の異常を検出し、Tbl
の対応する行で異常が検出された場合に要素が true
になる logical 配列 tf
を返します。関数 ocsvm
に table を渡して Mdl
を作成した場合、この構文を使用する必要があります。
は、前の構文におけるいずれかの入力引数の組み合わせを使用して、異常スコアのしきい値を指定します。tf
= isanomaly(___,ScoreThreshold=scoreThreshold
)isanomaly
は、スコアが scoreThreshold
を超える観測値を異常として識別します。
例
新規性の検出
関数 ocsvm
を使用して、汚染されていない学習観測値用の OneClassSVM
オブジェクトを作成します。次に、オブジェクトおよび新規データをオブジェクト関数 isanomaly
に渡して、新規性 (新規データ中の異常) を検出します。
census1994.mat
に保存されている 1994 年の国勢調査データを読み込みます。このデータ セットは、個人の年収が $50,000 を超えるかどうかを予測するための、米国勢調査局の人口統計データから構成されます。
load census1994
census1994
には学習データ セット adultdata
およびテスト データ セット adulttest
が含まれています。
ocsvm
は、欠損値のある観測値は使用しません。データ セットの欠損値を削除すると、メモリ消費が減って学習が高速化します。
adultdata = rmmissing(adultdata); adulttest = rmmissing(adulttest);
adultdata
用に 1 クラス SVM に学習させます。adultdata
には外れ値が含まれていないと仮定します。StandardizeData
を true
に指定して入力データを標準化し、KernelScale
を "auto"
に設定して、関数でヒューリスティック手法を使用して適切なカーネル スケール パラメーターを選択できるようにします。
rng("default") % For reproducibility [Mdl,~,s] = ocsvm(adultdata,StandardizeData=true,KernelScale="auto");
Mdl
は、OneClassSVM
オブジェクトです。名前と値の引数 ContaminationFraction
を 0 を超える値として指定していない場合、ocsvm
はすべての学習観測値を正常な観測値として扱います。この関数によりスコアのしきい値が最大のスコア値に設定されます。しきい値を表示します。
Mdl.ScoreThreshold
ans = 0.0322
学習済みの 1 クラス SVM モデルを使用して、adulttest
内の異常を見つけます。モデルに学習させるときに StandardizeData=true
を指定したため、関数 isanomaly
は、Mu
プロパティと Sigma
プロパティに格納されている学習データの予測子の平均と標準偏差をそれぞれ使用して入力データを標準化します。
[tf_test,s_test] = isanomaly(Mdl,adulttest);
関数 isanomaly
は、adulttest
の異常インジケーター tf_test
およびスコア s_test
を返します。既定では、isanomaly
はしきい値 (Mdl.ScoreThreshold
) を超えるスコアをもつ観測値を異常として識別します。
異常スコア s
および s_test
のヒストグラムを作成します。異常スコアのしきい値に垂直線を作成します。
h1 = histogram(s,NumBins=50,Normalization="probability"); hold on h2 = histogram(s_test,h1.BinEdges,Normalization="probability"); xline(Mdl.ScoreThreshold,"r-",join(["Threshold" Mdl.ScoreThreshold])) h1.Parent.YScale = 'log'; h2.Parent.YScale = 'log'; legend("Training Data","Test Data",Location="north") hold off
テスト データ中にある異常の観測値のインデックスを表示します。
find(tf_test)
ans = 0x1 empty double column vector
テスト データの異常スコア分布は学習データの異常スコア分布と類似しているため、isanomaly
は既定のしきい値でテスト データ中にある異常を検出しません。名前と値のペア ScoreThreshold
を使用して、異なるしきい値を指定できます。例については、異常スコアのしきい値の指定を参照してください。
異常スコアのしきい値の指定
isanomaly
の名前と値の引数 ScoreThreshold
を使用して、異常スコアのしきい値を指定します。
census1994.mat
に保存されている 1994 年の国勢調査データを読み込みます。このデータ セットは、個人の年収が $50,000 を超えるかどうかを予測するための、米国勢調査局の人口統計データから構成されます。
load census1994
census1994
には学習データ セット adultdata
およびテスト データ セット adulttest
が含まれています。
ocsvm
は、欠損値のある観測値は使用しません。データ セットの欠損値を削除すると、メモリ消費が減って学習が高速化します。
adultdata = rmmissing(adultdata); adulttest = rmmissing(adulttest);
adultdata
用に 1 クラス SVM モデルに学習させます。StandardizeData
を true
に指定して入力データを標準化し、KernelScale
を "auto"
に設定して、関数でヒューリスティック手法を使用して適切なカーネル スケール パラメーターを選択できるようにします。
rng("default") % For reproducibility [Mdl,~,scores] = ocsvm(adultdata, ... StandardizeData=true,KernelScale="auto");
スコア値のヒストグラムをプロットします。既定のスコアのしきい値の位置に垂直線を作成します。
h = histogram(scores,NumBins=50,Normalization="probability"); h.Parent.YScale = 'log'; xline(Mdl.ScoreThreshold,"r-",join(["Threshold" Mdl.ScoreThreshold]))
学習済みの 1 クラス SVM モデルを使用して、テスト データ内の異常を見つけます。モデルの学習時に取得された既定のしきい値とは異なるしきい値を使用します。
まず、関数isoutlier
を使用してスコアのしきい値を調べます。
[~,~,U] = isoutlier(scores)
U = -0.5342
名前と値の引数 ScoreThreshold
の値を U
として指定します。Mdl
に学習させるときに StandardizeData
を true
に指定したため、関数 isanomaly
は、Mdl.Mu
および Mdl.Sigma
に保存されている平均と標準偏差をそれぞれ使用して新しい入力データを標準化します。
[tf_test,scores_test] = isanomaly(Mdl,adulttest,ScoreThreshold=U); h = histogram(scores_test,NumBins=50,Normalization="probability"); h.Parent.YScale = 'log'; xline(U,"r-",join(["Threshold" U]))
入力引数
Mdl
— 学習済みの 1 クラス SVM モデル
OneClassSVM
オブジェクト
学習済みの 1 クラス SVM モデル。OneClassSVM
オブジェクトとして指定します。
scoreThreshold
— 異常スコアのしきい値
Mdl.ScoreThreshold
(既定値) | 範囲 (–Inf,Inf)
の数値スカラー
異常スコアのしきい値。範囲 (–Inf,Inf)
の数値スカラーとして指定します。isanomaly
は、スコアがこのしきい値を超える観測値を異常として識別します。
既定値は、Mdl
の ScoreThreshold
プロパティ値です。
例: ScoreThreshold=0.5
データ型: single
| double
出力引数
tf
— 異常インジケーター
logical 列ベクトル
異常インジケーター。logical 列ベクトルとして返されます。tf
の要素は、Tbl
または X
の対応する行の観測値が異常であれば true
、それ以外の場合は false
になります。tf
の長さは Tbl
または X
と同じです。
isanomaly
は、scores
がしきい値 (scoreThreshold
の値) を超える観測値を異常として識別します。
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意事項および制限事項:
saveLearnerForCoder
、loadLearnerForCoder
およびcodegen
(MATLAB Coder) を使用して、関数isanomaly
のコードを生成します。saveLearnerForCoder
を使用して、学習済みモデルを保存します。loadLearnerForCoder
を使用して保存済みモデルを読み込んで関数isanomaly
を呼び出す、エントリポイント関数を定義します。次に、codegen
を使用して、エントリポイント関数のコードを生成します。例については、異常検出用のコード生成を参照してください。isanomaly
用の単精度 C/C++ コードを生成するには、関数loadLearnerForCoder
を呼び出すときに名前と値の引数"DataType","single"
を指定します。厳密な単精度計算はサポートされていません。生成されたコードでは、単精度入力で単精度出力が生成されます。ただし、関数内の変数は倍精度である可能性があります。
次の表は、
isanomaly
の引数に関する注意です。この表に含まれていない引数は、完全にサポートされています。引数 注意と制限 Tbl
エントリポイント関数で次を行う必要があります。
データを配列として受け入れる。
データ入力の引数から table を作成し、その table 内で変数名を指定する。
table を
isanomaly
に渡す。
このテーブルのワークフローの例については、table のデータを分類するためのコードの生成を参照してください。コード生成におけるテーブルの使用の詳細については、table のコード生成 (MATLAB Coder)およびコード生成における table の制限事項 (MATLAB Coder)を参照してください。
Tbl
の行数、または観測値の数は可変サイズにすることができますが、Tbl
の列数は固定でなければなりません。
X
X
の行数、または観測値の数は可変サイズにすることができますが、X
の列数は固定でなければなりません。ScoreThreshold
名前と値の引数に含まれる名前はコンパイル時の定数でなければなりません。 UseParallel
この名前と値の引数はサポートされていませんが、この関数は OpenMP を介して並列計算をサポートします。
isanomaly
に対して生成されるコードでは、parfor
(MATLAB Coder) を使用して、サポートされる共有メモリ マルチコア プラットフォームで並列実行されるループが作成されます。コンパイラが Open Multiprocessing (OpenMP) アプリケーション インターフェイスをサポートしない場合、または OpenMP ライブラリを無効にした場合、MATLAB® Coder™ はparfor
ループをfor
ループとして扱います。サポートされるコンパイラについては、サポートされるコンパイラを参照してください。OpenMP ライブラリを無効にするには、構成オブジェクトのEnableOpenMP
プロパティをfalse
に設定します。詳細については、coder.CodeConfig
(MATLAB Coder) を参照してください。
詳細は、コード生成の紹介を参照してください。
バージョン履歴
R2022b で導入R2023a: 予測用の C/C++ コードの生成
関数 isanomaly
に対する C/C++ コードを生成できます。
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)