Main Content

RobustRandomCutForest

異常検出用のロバスト ランダム カット フォレスト モデル

R2023a 以降

    説明

    ロバスト ランダム カット フォレスト モデル オブジェクト RobustRandomCutForest は、外れ値の検出および新規性の検出に使用します。

    • 外れ値検出 (学習データ中の異常を検出) — 関数 rrcforest を使用して、学習データ中の異常を検出します。関数 rrcforest は、学習データの RobustRandomCutForest モデル オブジェクト、異常インジケーター、およびスコアを返します。

    • 新規性の検出 (汚染されていない学習データで新規のデータの異常を検出) — 汚染されていない学習データ (外れ値がないデータ) を rrcforest に渡して RobustRandomCutForest モデル オブジェクトを作成します。そのオブジェクトと新規データをオブジェクト関数 isanomaly に渡して、新規のデータの異常を検出します。関数 isanomaly は、新規データの異常インジケーターおよびスコアを返します。

    作成

    RobustRandomCutForest モデル オブジェクトは、関数 rrcforest を使用して作成します。

    プロパティ

    すべて展開する

    この プロパティ は読み取り専用です。

    カテゴリカル予測子のインデックス。正の整数のベクトルとして指定します。CategoricalPredictors には、対応する予測子がカテゴリカルであることを示すインデックス値が格納されます。インデックス値の範囲は 1 ~ p です。p はモデルの学習に使用した予測子の数です。どの予測子もカテゴリカルではない場合、このプロパティは空 ([]) になります。

    この プロパティ は読み取り専用です。

    collusive 変位の計算方法。'maximal' または 'average' として指定します。

    それぞれの木について、モデルの複雑度の最大変化 ('maximal') または平均変化 ('average') が求められ、各観測値の collusive 変位 (異常スコア) が計算されます。詳細については、異常スコアを参照してください。

    この プロパティ は読み取り専用です。

    学習データに含まれている異常の比率。範囲 [0,1] の数値スカラーとして指定します。

    • ContaminationFraction の値が 0 の場合、rrcforest はすべての学習観測値を正常な観測値として扱い、スコアのしきい値 (ScoreThreshold プロパティの値) を学習データの異常スコアの最大値に設定します。

    • ContaminationFraction の値が範囲 (0,1] にある場合、rrcforest は、指定した比率の学習観測値が異常として検出されるように、しきい値 (ScoreThreshold プロパティの値) を決定します。

    この プロパティ は読み取り専用です。

    学習データの予測子の平均。数値ベクトルとして指定します。

    • rrcforest を使用してロバスト ランダム カット フォレスト モデルに学習させるときに StandardizeData=true を指定した場合、次のようになります。

      • カテゴリカル変数が含まれている列は関数 rrcforest では標準化されません。カテゴリカル変数の Mu の要素には NaN 値が含まれます。

      • 関数 isanomaly は、Mu の予測子の平均と Sigma の標準偏差を使用して入力データを標準化します。

      Mu の長さは予測子の数と同じです。

    • StandardizeData=false を設定した場合、Mu は空ベクトル ([]) です。

    この プロパティ は読み取り専用です。

    ロバスト ランダム カット ツリー (ロバスト ランダム カット フォレスト モデルの木) の数。正の整数として指定します。

    この プロパティ は読み取り専用です。

    学習データから非復元抽出する各ロバスト ランダム カット ツリー (ロバスト ランダム カット フォレスト モデルの木) の観測値の数。正の整数スカラーとして指定します。

    この プロパティ は読み取り専用です。

    予測子変数の名前。文字ベクトルの cell 配列を指定します。PredictorNames の要素の順序は、予測子名が学習データに現れる順序に対応します。

    この プロパティ は読み取り専用です。

    学習データに含まれている異常の識別に使用される異常スコアのしきい値。範囲 [0,Inf) の数値スカラーとして指定します。

    しきい値を超える異常スコアをもつ観測値が異常であると識別されます。

    • 関数 rrcforest は、指定した比率 (ContaminationFraction プロパティ) の学習観測値が異常として検出されるように、しきい値を決定します。

    • オブジェクト関数 isanomaly は、ScoreThreshold プロパティの値を名前と値の引数 ScoreThreshold の既定値として使用します。

    この プロパティ は読み取り専用です。

    学習データの予測子の標準偏差。数値ベクトルとして指定します。

    • rrcforest を使用してロバスト ランダム カット フォレスト モデルに学習させるときに StandardizeData=true を指定した場合、次のようになります。

      • カテゴリカル変数が含まれている列は関数 rrcforest では標準化されません。カテゴリカル変数の Sigma の要素には NaN 値が含まれます。

      • 関数 isanomaly は、Mu の予測子の平均と Sigma の標準偏差を使用して入力データを標準化します。

      Sigma の長さは予測子の数と同じです。

    • StandardizeData=false を設定した場合、Sigma は空ベクトル ([]) です。

    オブジェクト関数

    isanomalyロバスト ランダム カット フォレストを使用したデータ中の異常の検出
    incrementalLearnerConvert robust random cut forest model to incremental learner

    すべて折りたたむ

    関数 rrcforest を使用して、外れ値 (学習データ中の異常) を検出します。

    標本データ セット NYCHousing2015 を読み込みます。

    load NYCHousing2015

    データ セットには、2015 年のニューヨーク市における不動産の売上に関する情報を持つ 10 の変数が含まれます。データ セットの概要を表示します。

    summary(NYCHousing2015)
    Variables:
    
        BOROUGH: 91446x1 double
    
            Values:
    
                Min          1    
                Median       3    
                Max          5    
    
        NEIGHBORHOOD: 91446x1 cell array of character vectors
    
        BUILDINGCLASSCATEGORY: 91446x1 cell array of character vectors
    
        RESIDENTIALUNITS: 91446x1 double
    
            Values:
    
                Min            0  
                Median         1  
                Max         8759  
    
        COMMERCIALUNITS: 91446x1 double
    
            Values:
    
                Min           0   
                Median        0   
                Max         612   
    
        LANDSQUAREFEET: 91446x1 double
    
            Values:
    
                Min                0
                Median          1700
                Max       2.9306e+07
    
        GROSSSQUAREFEET: 91446x1 double
    
            Values:
    
                Min                0
                Median          1056
                Max       8.9422e+06
    
        YEARBUILT: 91446x1 double
    
            Values:
    
                Min            0  
                Median      1939  
                Max         2016  
    
        SALEPRICE: 91446x1 double
    
            Values:
    
                Min                0
                Median    3.3333e+05
                Max       4.1111e+09
    
        SALEDATE: 91446x1 datetime
    
            Values:
    
                Min       01-Jan-2015
                Median    09-Jul-2015
                Max       31-Dec-2015
    

    SALEDATE 列は datetime 配列です。rrcforest ではサポートされていません。datetime 値の月番号および日番号用の列を作成し、SALEDATE 列を削除します。

    [~,NYCHousing2015.MM,NYCHousing2015.DD] = ymd(NYCHousing2015.SALEDATE);
    NYCHousing2015.SALEDATE = [];

    BOROUGHNEIGHBORHOOD、および BUILDINGCLASSCATEGORY にはカテゴリカル予測子が含まれます。カテゴリカル予測子のカテゴリの個数を表示します。

    length(unique(NYCHousing2015.BOROUGH))
    ans = 5
    
    length(unique(NYCHousing2015.NEIGHBORHOOD))
    ans = 254
    
    length(unique(NYCHousing2015.BUILDINGCLASSCATEGORY))
    ans = 48
    

    64 個を超えるカテゴリをもつカテゴリカル変数の場合、関数 rrcforest は近似分割法を使用しますが、これはロバスト ランダム カット フォレスト モデルの精度を低下させる可能性があります。254 個のカテゴリをもつカテゴリカル変数が含まれている NEIGHBORHOOD 列を削除します。

    NYCHousing2015.NEIGHBORHOOD = [];

    ロバスト ランダム カット フォレスト モデルに NYCHousing2015 について学習させます。学習観測値に含まれている異常の比率を 0.1 に指定し、最初の変数 (BOROUGH) をカテゴリカル予測子として指定します。最初の変数は数値配列であるため、この変数をカテゴリカル変数として指定しない限り、rrcforest により連続変数であると仮定されます。

    rng("default") % For reproducibility 
    [Mdl,tf,scores] = rrcforest(NYCHousing2015, ...
        ContaminationFraction=0.1,CategoricalPredictors=1);

    MdlRobustRandomCutForest モデル オブジェクトです。rrcforest は、学習データ NYCHousing2015 の異常インジケーター (tf) および異常スコア (scores) も返します。

    スコア値のヒストグラムをプロットします。指定した比率に対応するスコアのしきい値に垂直線を作成します。

    histogram(scores)
    xline(Mdl.ScoreThreshold,"r-",["Threshold" Mdl.ScoreThreshold])

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

    異なる汚染の比率 (たとえば 0.01) で異常を識別する場合は、新しいロバスト ランダム カット フォレスト モデルに学習させることができます。

    rng("default") % For reproducibility 
    [newMdl,newtf,scores] = rrcforest(NYCHousing2015, ...
        ContaminationFraction=0.01,CategoricalPredictors=1);
    

    異なるスコアのしきい値 (たとえば 65) で異常を識別する場合は、RobustRandomCutForest モデル オブジェクト、学習データ、および新しいしきい値を関数 isanomaly に渡せます。

    [newtf,scores] = isanomaly(Mdl,NYCHousing2015,ScoreThreshold=65);
    

    汚染の比率またはスコアのしきい値を変更すると異常インジケーターのみが変更され、異常スコアは影響を受けないことに注意してください。したがって、rrcforest または isanomaly を使用して異常スコアを再度計算しない場合、既存のスコア値を使用して新しい異常インジケーターを取得できます。

    学習データ中の異常の比率を 0.01 に変更します。

    newContaminationFraction = 0.01;

    関数quantileを使用して、新しいスコアのしきい値を求めます。

    newScoreThreshold = quantile(scores,1-newContaminationFraction)
    newScoreThreshold = 63.2642
    

    新しい異常インジケーターを取得します。

    newtf = scores > newScoreThreshold;

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

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

    load census1994

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

    adultdata には外れ値が含まれていないと仮定します。ロバスト ランダム カット フォレスト モデルに adultdata について学習させます。StandardizeDatatrue と指定して入力データを標準化します。

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

    MdlRobustRandomCutForest モデル オブジェクトです。rrcforest は、学習データ adultdata の異常インジケーター tf および異常スコア s も返します。名前と値の引数 ContaminationFraction を 0 を超える値として指定していない場合、rrcforest はすべての学習観測値を正常な観測値として扱います。つまり tf の値はすべて logical 0 (false) となります。この関数によりスコアのしきい値が最大のスコア値に設定されます。しきい値を表示します。

    Mdl.ScoreThreshold
    ans = 86.5315
    

    学習させたロバスト ランダム カット フォレスト モデルを使用して、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 のヒストグラムを作成します。異常スコアのしきい値に垂直線を作成します。

    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 = 3541
    

    テスト データの異常スコア分布は学習データの異常スコア分布と類似しているため、isanomaly は既定のしきい値でテスト データ中にある少数の異常を検出します。

    しきい値近くの異常と観測値が見えるようにズームインします。

    xlim([50 92])
    ylim([0 0.001])

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

    名前と値のペア ScoreThreshold を使用して、異なるしきい値を指定できます。例については、異常スコアのしきい値の指定を参照してください。

    詳細

    すべて展開する

    ヒント

    参照

    [1] Guha, Sudipto, N. Mishra, G. Roy, and O. Schrijvers. "Robust Random Cut Forest Based Anomaly Detection on Streams," Proceedings of The 33rd International Conference on Machine Learning 48 (June 2016): 2712–21.

    [2] Bartos, Matthew D., A. Mullapudi, and S. C. Troutman. "rrcf: Implementation of the Robust Random Cut Forest Algorithm for Anomaly Detection on Streams." Journal of Open Source Software 4, no. 35 (2019): 1336.

    バージョン履歴

    R2023a で導入