Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

isanomaly

孤立森を使用したデータ中の異常の検出

    説明

    tf = isanomaly(forest,Tbl) は、IsolationForest オブジェクト forest を使用して table Tbl 内の異常を検出し、Tbl の対応する行で異常が検出された場合に要素が true になる logical 配列 tf を返します。関数 iforest に table を渡して forest を作成した場合、この構文を使用する必要があります。

    tf = isanomaly(forest,X) は、行列 X 内の異常を検出します。関数 iforest に行列を渡して forest を作成した場合、この構文を使用する必要があります。

    tf = isanomaly(___,Name=Value) では、前の構文におけるいずれかの入力引数に加えて、1 つ以上の名前と値の引数の組み合わせを使用してオプションを指定します。たとえば、スコアが 0.5 を超える観測値を異常として識別するには、ScoreThreshold=0.5 を設定します。

    [tf,scores] = isanomaly(___) は、Tbl または X の各観測値についての範囲 [0,1] の異常スコアも返します。0 に近いスコア値は正常な観測値を示し、1 に近い値は異常を示します。

    すべて折りたたむ

    関数 iforest を使用して、汚染されていない学習観測値用の IsolationForest オブジェクトを作成します。次に、オブジェクトおよび新規データをオブジェクト関数 isanomaly に渡して、新規性 (新規データ中の異常) を検出します。

    census1994.mat に保存されている 1994 年の国勢調査データを読み込みます。このデータセットは、個人の年収が $50,000 を超えるかどうかを予測するための、米国勢調査局の人口統計データから構成されます。

    load census1994

    census1994 には学習データセット adultdata および検定データセット adulttest が含まれています。

    adultdata 用に孤立森モデルに学習させます。adultdata には外れ値が含まれていないと仮定します。

    rng("default") % For reproducibility
    [Mdl,tf,s] = iforest(adultdata);

    MdlIsolationForest オブジェクトです。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

    Figure contains an axes object. The axes object contains 3 objects of type histogram, constantline. These objects represent Training Data, Test Data.

    検定データ中にある異常の観測値のインデックスを表示します。

    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]))

    Figure contains an axes object. The axes object contains 2 objects of type histogram, constantline.

    学習済み孤立森モデルを使用して、検定データ内の異常を見つけます。孤立森モデルの学習時に取得された既定のしきい値とは異なるしきい値を使用します。

    関数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]))

    Figure contains an axes object. The axes object contains 2 objects of type histogram, constantline.

    入力引数

    すべて折りたたむ

    学習済み孤立森モデル。IsolationForest オブジェクトとして指定します。

    予測子データ。table として指定します。Tbl の各行は 1 つの観測値に、各列は 1 つの予測子変数に対応します。文字ベクトルの cell 配列ではない cell 配列と複数列の変数は使用できません。

    table を使用して forest に学習させた場合、X ではなく Tbl を使用して予測子データを提供する必要があります。Tbl 内のすべての予測子変数は、変数名およびデータ型が学習データと同じでなければなりません。ただし、Tbl の列の順序が学習データの列の順序に対応する必要はありません。

    データ型: table

    予測子データ。数値行列として指定します。X の各行は 1 つの観測値に、各列は 1 つの予測子変数に対応します。

    行列を使用して forest に学習させた場合、Tbl ではなく X を使用して予測子データを提供する必要があります。X の列を構成する変数の順序は、学習データと同じでなければなりません。

    データ型: single | double

    名前と値の引数

    オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで Name は引数名、Value は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。

    例: ScoreThreshold=0.75,UseParallel=true は、異常スコアのしきい値を 0.75 に設定し、計算を並列実行するように関数に指示します。

    異常スコアのしきい値。0 から 1 までの数値スカラーとして指定します。isanomaly は、スコアがこのしきい値を超える観測値を異常として識別します。

    既定値は、forestScoreThreshold プロパティ値です。

    例: ScoreThreshold=0.5

    データ型: single | double

    並列実行のフラグ。true または false として指定します。UseParallel=true を指定した場合、関数 isanomalyparfor を使用して for ループの反復を並列実行します。このオプションには Parallel Computing Toolbox™ が必要です。

    例: UseParallel=true

    データ型: logical

    出力引数

    すべて折りたたむ

    異常インジケーター。logical 列ベクトルとして返されます。tf の要素は、Tbl または X の対応する行の観測値が異常であれば true、それ以外の場合は false になります。tf の長さは Tbl または X と同じです。

    isanomaly は、scores がしきい値 (ScoreThreshold の値) を超える観測値を異常として識別します。

    異常スコア。0 から 1 までの値の数値列ベクトルとして返されます。scores の長さは Tbl または X と同じで、scores の各要素に Tbl または X の対応する行の観測値に対する異常スコアが格納されます。0 に近いスコア値は正常な観測値を示し、1 に近い値は異常を示します。

    詳細

    すべて折りたたむ

    孤立森

    孤立森アルゴリズム[1]は、孤立木のアンサンブルを使用して異常を正常な点から分離することにより、異常を検出します。

    関数 iforest は、学習観測値の孤立森 (孤立木のアンサンブル) を作成し、外れ値 (学習データ中の異常) を検出します。各孤立木を学習観測値の部分集合用に学習させ、非復元抽出します。iforest は、部分集合ごとにすべての観測値が個別の葉ノードに到達するまで、無作為に分岐変数および分岐位置を選択することにより、孤立木を成長させます。異常は数が少なく異なります。そのため、異常はルート ノードに近い個別の葉ノードに到達し、パスの長さ (ルート ノードから葉ノードまでの距離) が正常な点より短くなります。すべての孤立木に対するパスの平均長さを基に定義された異常スコアを使用して、外れ値を識別します。

    関数 isanomaly は学習済み孤立森を使用して、データ中の異常を検出します。新規性の検出 (汚染されていない学習データで新規のデータの異常を検出) では、汚染されていない学習データ (外れ値がないデータ) で孤立森に学習させ、この孤立森を使用して新規のデータの異常を検出できます。新規のデータの各観測値について、学習済み孤立森のルート ノードから葉ノードに到達するパスの平均長さが計算され、異常識別子および異常スコアが返されます。

    詳細については、孤立森による異常検出を参照してください。

    異常スコア

    孤立森アルゴリズムでは、パスの長さ h(x) を正規化することにより、観測値 x の異常スコア s(x) を計算します。

    s(x)=2E[h(x)]c(n),

    ここで、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 は、すべての値が欠損値である観測値は使用せず、それらの観測値に異常スコア 1 を割り当てます。

    • isanomaly は、一部の値が欠損値である観測値は使用し、それらの観測値が有効な値をもつ変数の分岐を特定します。

    参照

    [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.

    拡張機能

    バージョン履歴

    R2021b で導入