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 census1994census1994 には学習データ セット 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 = 0×1 empty double column vector
テスト データの異常スコア分布は学習データの異常スコア分布と類似しているため、isanomaly は既定のしきい値でテスト データ中にある異常を検出しません。名前と値のペア ScoreThreshold を使用して、異なるしきい値を指定できます。例については、異常スコアのしきい値の指定を参照してください。
isanomaly の名前と値の引数 ScoreThreshold を使用して、異常スコアのしきい値を指定します。
census1994.mat に保存されている 1994 年の国勢調査データを読み込みます。このデータ セットは、個人の年収が $50,000 を超えるかどうかを予測するための、米国勢調査局の人口統計データから構成されます。
load census1994census1994 には学習データ セット 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]))

入力引数
学習済みの 1 クラス SVM モデル。OneClassSVM オブジェクトとして指定します。
異常スコアのしきい値。範囲 (–Inf,Inf) の数値スカラーとして指定します。isanomaly は、スコアがこのしきい値を超える観測値を異常として識別します。
既定値は、Mdl の ScoreThreshold プロパティ値です。
例: ScoreThreshold=0.5
データ型: single | double
出力引数
異常インジケーター。logical 列ベクトルとして返されます。tf の要素は、Tbl または X の対応する行の観測値が異常であれば true、それ以外の場合は false になります。tf の長さは Tbl または X と同じです。
isanomaly は、scores がしきい値 (scoreThreshold の値) を超える観測値を異常として識別します。
拡張機能
使用上の注意および制限:
saveLearnerForCoder、loadLearnerForCoderおよびcodegen(MATLAB Coder) を使用して、関数isanomalyのコードを生成します。saveLearnerForCoderを使用して、学習済みモデルを保存します。loadLearnerForCoderを使用して保存済みモデルを読み込んで関数isanomalyを呼び出す、エントリポイント関数を定義します。次に、codegenを使用して、エントリポイント関数のコードを生成します。例については、異常検出用のコード生成を参照してください。isanomalyの単精度の C/C++ コードを生成するには、loadLearnerForCoder関数を呼び出すときにDataType="single"を指定します。厳密な単精度計算はサポートされていません。生成されたコードでは、単精度入力で単精度出力が生成されます。ただし、関数内の変数は倍精度である可能性があります。
次の表は、
isanomalyの引数に関する注意です。この表に含まれていない引数は、完全にサポートされています。引数 注意と制限 Tblエントリポイント関数で次を行う必要があります。
データを配列として受け入れる。
データ入力の引数から table を作成し、その table 内で変数名を指定する。
table を
isanomalyに渡す。
この table のワークフローの例については、table のデータを分類するためのコードの生成を参照してください。コード生成における table の使用の詳細については、table のコード生成 (MATLAB Coder)およびコード生成における table の制限事項 (MATLAB Coder)を参照してください。
Tblの行数、または観測値の数は可変サイズにすることができますが、Tblの列数は固定でなければなりません。
XXの行数、または観測値の数は可変サイズにすることができますが、Xの列数は固定でなければなりません。ScoreThreshold名前と値の引数に含まれる名前はコンパイル時の定数でなければなりません。 UseParallelこの名前と値の引数はサポートされていませんが、この関数は OpenMP を介して並列計算をサポートします。
isanomalyに対して生成されるコードでは、parfor(MATLAB Coder) を使用して、サポートされる共有メモリ マルチコア プラットフォームで並列実行されるループが作成されます。コンパイラが Open Multiprocessing (OpenMP) アプリケーション インターフェイスをサポートしない場合、または OpenMP ライブラリを無効にした場合、MATLAB® Coder™ はparforループをforループとして扱います。サポートされるコンパイラについては、サポートされるコンパイラを参照してください。OpenMP ライブラリを無効にするには、構成オブジェクトのEnableOpenMPプロパティをfalseに設定します。詳細については、coder.CodeConfig(MATLAB Coder) を参照してください。
詳細は、コード生成の紹介を参照してください。
次の少なくとも 1 つに該当する場合、
isanomalyは GPU で実行されます。入力引数
XがgpuArrayオブジェクトである。入力引数
TblにgpuArray変数が含まれている。
詳細は、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2022b で導入MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- 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)