isanomaly
構文
説明
は、tf
= isanomaly(forest
,Tbl
)IsolationForest
オブジェクト forest
を使用して table Tbl
内の異常を検出し、Tbl
の対応する行で異常が検出された場合に要素が true
になる logical 配列 tf
を返します。関数 iforest
に table を渡して forest
を作成した場合、この構文を使用する必要があります。
では、前の構文におけるいずれかの入力引数の組み合わせに加えて、1 つ以上の名前と値の引数を使用してオプションを指定します。たとえば、スコアが 0.5 を超える観測値を異常として識別するには、tf
= isanomaly(___,Name=Value
)
を設定します。ScoreThreshold
=0.5
例
新規性の検出
関数 iforest
を使用して、汚染されていない学習観測値用の IsolationForest
オブジェクトを作成します。次に、オブジェクトおよび新規データをオブジェクト関数 isanomaly
に渡して、新規性 (新規データ中の異常) を検出します。
census1994.mat
に保存されている 1994 年の国勢調査データを読み込みます。このデータ セットは、個人の年収が $50,000 を超えるかどうかを予測するための、米国勢調査局の人口統計データから構成されます。
load census1994
census1994
には学習データ セット adultdata
およびテスト データ セット adulttest
が含まれています。
adultdata
用に孤立森モデルに学習させます。adultdata
には外れ値が含まれていないと仮定します。
rng("default") % For reproducibility [Mdl,tf,s] = iforest(adultdata);
Mdl
は IsolationForest
オブジェクトです。iforest
は、学習データ adultdata
の異常インジケーター tf
および異常スコア s
も返します。名前と値の引数 ContaminationFraction
を 0 を超える値として指定していない場合、iforest
はすべての学習観測値を正常な観測値として扱います。つまり tf
の値はすべて logical 0 (false
) となります。この関数によりスコアのしきい値が最大のスコア値に設定されます。しきい値を表示します。
Mdl.ScoreThreshold
ans = 0.8600
学習済み孤立森モデルを使用して、adulttest
内の異常を見つけます。
[tf_test,s_test] = isanomaly(Mdl,adulttest);
関数 isanomaly
は、adulttest
の異常インジケーター tf_test
およびスコア s_test
を返します。既定では、isanomaly
はしきい値 (Mdl.ScoreThreshold
) を超えるスコアをもつ観測値を異常として識別します。
異常スコア s
および s_test
のヒストグラムを作成します。異常スコアのしきい値に垂直線を作成します。
histogram(s,Normalization="probability") hold on histogram(s_test,Normalization="probability") xline(Mdl.ScoreThreshold,"r-",join(["Threshold" Mdl.ScoreThreshold])) legend("Training Data","Test Data",Location="northwest") hold off
テスト データ中にある異常の観測値のインデックスを表示します。
find(tf_test)
ans = 15655
テスト データの異常スコア分布は学習データの異常スコア分布と類似しているため、isanomaly
は既定のしきい値でテスト データ中にある少数の異常を検出します。名前と値のペア ScoreThreshold
を使用して、異なるしきい値を指定できます。例については、異常スコアのしきい値の指定を参照してください。
異常スコアのしきい値の指定
isanomaly
の名前と値の引数 ScoreThreshold
を使用して、異常スコアのしきい値を指定します。
census1994.mat
に保存されている 1994 年の国勢調査データを読み込みます。このデータ セットは、個人の年収が $50,000 を超えるかどうかを予測するための、米国勢調査局の人口統計データから構成されます。
load census1994
census1994
には学習データ セット adultdata
およびテスト データ セット adulttest
が含まれています。
adultdata
用に孤立森モデルに学習させます。
rng("default") % For reproducibility [Mdl,tf,scores] = iforest(adultdata);
スコア値のヒストグラムをプロットします。既定のスコアのしきい値の位置に垂直線を作成します。
histogram(scores,Normalization="probability"); xline(Mdl.ScoreThreshold,"r-",join(["Threshold" Mdl.ScoreThreshold]))
学習済み孤立森モデルを使用して、テスト データ内の異常を見つけます。孤立森モデルの学習時に取得された既定のしきい値とは異なるしきい値を使用します。
まず、関数isoutlier
を使用してスコアのしきい値を調べます。
[~,~,U] = isoutlier(scores)
U = 0.7449
名前と値の引数 ScoreThreshold
の値を U
として指定します。
[tf_test,scores_test] = isanomaly(Mdl,adulttest,ScoreThreshold=U); histogram(scores_test,Normalization="probability") xline(U,"r-",join(["Threshold" U]))
入力引数
forest
— 学習済み孤立森モデル
IsolationForest
オブジェクト
学習済み孤立森モデル。IsolationForest
オブジェクトとして指定します。
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで Name
は引数名、Value
は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。
例: ScoreThreshold=0.75,UseParallel=true
は、異常スコアのしきい値を 0.75 に設定し、計算を並列実行するように関数に指示します。
ScoreThreshold
— 異常スコアのしきい値
forest.ScoreThreshold
(既定値) | 範囲 [0,1]
の数値スカラー
異常スコアのしきい値。範囲 [0,1]
の数値スカラーとして指定します。isanomaly
は、スコアがこのしきい値を超える観測値を異常として識別します。
既定値は、forest
の ScoreThreshold
プロパティ値です。
例: ScoreThreshold=0.5
データ型: single
| double
UseParallel
— 並列実行のフラグ
false
または 0
(既定値) | true
または 1
並列実行のフラグ。数値または logical の 1 (true
) または 0 (false
) として指定します。UseParallel=true
を指定した場合、関数 isanomaly
は parfor
を使用して for
ループの反復を実行します。Parallel Computing Toolbox™ がある場合、ループが並列に実行されます。
例: UseParallel=true
データ型: logical
出力引数
tf
— 異常インジケーター
logical 列ベクトル
異常インジケーター。logical 列ベクトルとして返されます。tf
の要素は、Tbl
または X
の対応する行の観測値が異常であれば true
、それ以外の場合は false
になります。tf
の長さは Tbl
または X
と同じです。
isanomaly
は、scores
がしきい値 (ScoreThreshold
の値) を超える観測値を異常として識別します。
詳細
孤立森
孤立森アルゴリズム[1]は、孤立木のアンサンブルを使用して異常を正常な点から分離することにより、異常を検出します。
関数 iforest
は、学習観測値の孤立森モデル (孤立木のアンサンブル) を作成し、外れ値 (学習データ中の異常) を検出します。学習観測値の部分集合について、各孤立木に次のように学習させます。
iforest
は、それぞれの木について、学習観測値から標本を非復元抽出します。iforest
は、分岐変数と分岐位置を一様に無作為に選択することで木を成長させます。それぞれの木について、すべての標本が個別の葉ノードに到達するまでこれが繰り返されます。
このアルゴリズムでは、データ中の異常は数が少なく、正常な点と異なるものであると仮定します。そのため、異常はルート ノードに近い個別の葉ノードに到達し、パスの長さ (ルート ノードから葉ノードまでの距離) が正常な点より短くなります。関数 iforest
は、すべての孤立木に対するパスの平均長さを基に定義された異常スコアを使用して外れ値を識別します。
関数 isanomaly
は、学習済み孤立森モデルを使用してデータ中の異常を検出します。新規性の検出 (汚染されていない学習データで新規のデータの異常を検出) では、汚染されていない学習データ (外れ値がないデータ) で孤立森モデルに学習させ、このモデルを使用して新規のデータの異常を検出できます。新規のデータの各観測値について、それぞれの木の対応する葉ノードが特定された後、学習済み孤立森モデルのルート ノードから葉ノードに到達するパスの平均長さが計算され、異常インジケーターおよび異常スコアが返されます。
詳細については、孤立森による異常検出を参照してください。
異常スコア
孤立森アルゴリズムでは、パスの長さ h(x) を正規化することにより、観測値 x の異常スコア s(x) を計算します。
ここで、E[h(x)] は孤立森中にある孤立木すべてに関するパスの平均長さで、c(n) は n 個の観測値の二分探索木で失敗した探索のパスの平均長さです。
スコアは E[h(x)] が 0 に近づくにつれて 1 に近づきます。したがって、1 に近いスコア値は異常を示しています。
スコアは E[h(x)] が n – 1 に近づくにつれて 0 に近づきます。また、スコアは E[h(x)] が c(n) に近づくとき 0.5 に近づきます。したがって、0.5 より小さく 0 に近いスコア値は正常な点を示しています。
アルゴリズム
isanomaly
は、Tbl
に含まれている NaN
、''
(空の文字ベクトル)、""
(空の string)、<missing>
、<undefined>
の値と X
に含まれている NaN
値を欠損値と見なします。
isanomaly
は、欠損値を含む観測値を使用して、それらの観測値が有効な値をもつ変数の分岐を特定します。それらの観測値は、葉ノードではなく枝ノードに配置されることがあります。その場合、isanomaly
は、ルート ノードから枝ノードまでの距離を使用して異常スコアを計算します。すべての値が欠損値である観測値はルート ノードに配置されるため、スコア値は 1 になります。
参照
[1] Liu, F. T., K. M. Ting, and Z. Zhou. "Isolation Forest," 2008 Eighth IEEE International Conference on Data Mining. Pisa, Italy, 2008, pp. 413-422.
拡張機能
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) を参照してください。
詳細は、コード生成の紹介を参照してください。
自動並列サポート
Parallel Computing Toolbox™ を使用して自動的に並列計算を実行することで、コードを高速化します。
並列実行するには、この関数を呼び出すときに名前と値の引数 UseParallel
を true
に設定します。
並列計算の全般的な情報については、自動並列サポートを使用した MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2021b で導入
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)