RobustRandomCutForest
説明
ロバスト ランダム カット フォレスト モデル オブジェクト 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プロパティの値) を決定します。
この プロパティ は読み取り専用です。
学習データの予測子の平均。数値ベクトルとして指定します。
この プロパティ は読み取り専用です。
ロバスト ランダム カット ツリー (ロバスト ランダム カット フォレスト モデルの木) の数。正の整数として指定します。
この プロパティ は読み取り専用です。
学習データから非復元抽出する各ロバスト ランダム カット ツリー (ロバスト ランダム カット フォレスト モデルの木) の観測値の数。正の整数スカラーとして指定します。
この プロパティ は読み取り専用です。
予測子変数の名前。文字ベクトルの cell 配列を指定します。PredictorNames の要素の順序は、予測子名が学習データに現れる順序に対応します。
この プロパティ は読み取り専用です。
学習データに含まれている異常の識別に使用される異常スコアのしきい値。範囲 [0,Inf) の数値スカラーとして指定します。
しきい値を超える異常スコアをもつ観測値が異常であると識別されます。
関数
rrcforestは、指定した比率 (ContaminationFractionプロパティ) の学習観測値が異常として検出されるように、しきい値を決定します。
オブジェクト関数
isanomalyは、ScoreThresholdプロパティの値を名前と値の引数ScoreThresholdの既定値として使用します。
この プロパティ は読み取り専用です。
学習データの予測子の標準偏差。数値ベクトルとして指定します。
オブジェクト関数
isanomaly | ロバスト ランダム カット フォレストを使用したデータ中の異常の検出 |
incrementalLearner | Convert robust random cut forest model to incremental learner |
例
関数 rrcforest を使用して、外れ値 (学習データ中の異常) を検出します。
標本データ セット NYCHousing2015 を読み込みます。
load NYCHousing2015データ セットには、2015 年のニューヨーク市における不動産の売上に関する情報を持つ 10 の変数が含まれます。データ セットの概要を表示します。
summary(NYCHousing2015)
NYCHousing2015: 91446×10 table
Variables:
BOROUGH: double
NEIGHBORHOOD: cell array of character vectors
BUILDINGCLASSCATEGORY: cell array of character vectors
RESIDENTIALUNITS: double
COMMERCIALUNITS: double
LANDSQUAREFEET: double
GROSSSQUAREFEET: double
YEARBUILT: double
SALEPRICE: double
SALEDATE: datetime
Statistics for applicable variables:
NumMissing Min Median Max Mean Std
BOROUGH 0 1 3 5 2.8431 1.3343
NEIGHBORHOOD 0
BUILDINGCLASSCATEGORY 0
RESIDENTIALUNITS 0 0 1 8759 2.1789 32.2738
COMMERCIALUNITS 0 0 0 612 0.2201 3.2991
LANDSQUAREFEET 0 0 1700 29305534 2.8752e+03 1.0118e+05
GROSSSQUAREFEET 0 0 1056 8942176 4.6598e+03 4.3098e+04
YEARBUILT 0 0 1939 2016 1.7951e+03 526.9998
SALEPRICE 0 0 333333 4.1111e+09 1.2364e+06 2.0130e+07
SALEDATE 0 01-Jan-2015 09-Jul-2015 31-Dec-2015 07-Jul-2015 2470:47:17
SALEDATE 列は datetime 配列です。rrcforest ではサポートされていません。datetime 値の月番号および日番号用の列を作成し、SALEDATE 列を削除します。
[~,NYCHousing2015.MM,NYCHousing2015.DD] = ymd(NYCHousing2015.SALEDATE); NYCHousing2015.SALEDATE = [];
列 BOROUGH、NEIGHBORHOOD、および 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);
Mdl は RobustRandomCutForest モデル オブジェクトです。rrcforest は、学習データ NYCHousing2015 の異常インジケーター (tf) および異常スコア (scores) も返します。
スコア値のヒストグラムをプロットします。指定した比率に対応するスコアのしきい値に垂直線を作成します。
histogram(scores) xline(Mdl.ScoreThreshold,"r-",["Threshold" Mdl.ScoreThreshold])

異なる汚染の比率 (たとえば 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 census1994census1994 には学習データ セット adultdata およびテスト データ セット adulttest が含まれています。
adultdata には外れ値が含まれていないと仮定します。ロバスト ランダム カット フォレスト モデルに adultdata について学習させます。StandardizeData を true と指定して入力データを標準化します。
rng("default") % For reproducibility [Mdl,tf,s] = rrcforest(adultdata,StandardizeData=true);
Mdl は RobustRandomCutForest モデル オブジェクトです。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

テスト データ中にある異常の観測値のインデックスを表示します。
find(tf_test)
ans = 3541
テスト データの異常スコア分布は学習データの異常スコア分布と類似しているため、isanomaly は既定のしきい値でテスト データ中にある少数の異常を検出します。
しきい値近くの異常と観測値が見えるようにズームインします。
xlim([50 92]) ylim([0 0.001])

名前と値のペア ScoreThreshold を使用して、異なるしきい値を指定できます。例については、異常スコアのしきい値の指定を参照してください。
詳細
ロバスト ランダム カット フォレスト アルゴリズム[1]では、点によって生じるモデルの複雑度の変化に基づいて、その点を正常な点または異常として分類します。孤立森アルゴリズムと同様に、ロバスト ランダム カット フォレスト アルゴリズムでは木のアンサンブルを作成します。2 つのアルゴリズムには、木の分岐変数の選択方法と異常スコアの定義方法に違いがあります。
関数 rrcforest は、学習観測値のロバスト ランダム カット フォレスト モデル (ロバスト ランダム カット ツリーのアンサンブル) を作成し、外れ値 (学習データ中の異常) を検出します。学習観測値の部分集合について、それぞれの木に次のように学習させます。
rrcforestは、それぞれの木について、学習観測値から標本を非復元抽出します。rrcforestは、分岐変数を変数の範囲に対する比率に応じて選択し、分岐位置を一様に無作為に選択することで木を成長させます。それぞれの木について、すべての標本が個別の葉ノードに到達するまでこれが繰り返されます。
分岐変数の選択に範囲情報を使用することで、無関係な変数に対してロバストなアルゴリズムになります。
異常の記述は簡単ですが、異常によって残りのデータの記述が複雑になります。そのため、モデルに異常を追加すると、森モデルのモデルの複雑度が増します[1]。関数 rrcforest は、モデルの複雑度の変化を基に定義された異常スコアを使用して外れ値を識別します。
関数 isanomaly は、学習済みのロバスト ランダム カット フォレスト モデルを使用してデータ中の異常を検出します。新規性の検出 (汚染されていない学習データで新規のデータの異常を検出) では、汚染されていない学習データ (外れ値がないデータ) でロバスト ランダム カット フォレスト モデルに学習させ、このモデルを使用して新規のデータの異常を検出できます。新規のデータの各観測値について、それぞれの木の対応する葉ノードが特定された後、葉ノードによって生じるモデルの複雑度の変化が計算され、異常インジケーターおよび異常スコアが返されます。
ロバスト ランダム カット フォレスト アルゴリズムでは、collusive 変位を異常スコアとして使用します。点 x の "collusive 変位" は、森モデルのモデルの複雑度に対する x の寄与を示します。小さい正の異常スコアの値は正常な観測値を示し、大きい正の値は異常を示します。
[1]で定義されているように、木 T のモデルの複雑度 |M(T)| は、学習データ Z のすべての点についてのパスの長さ (ルート ノードから葉ノードまでの距離) の合計です。
ここで、f(y,Z,T) は木 T における y の深さです。x の変位は、x によって生じるモデルの複雑度の想定される変化を示すものと定義されます。
ここで、T' は Z – {x} の木です。Disp(x,Z) は、x を含む葉ノードの兄弟ノードに含まれる想定される点の数です。この定義は重複や準重複に対してロバストでなく、外れ値をマスクしてしまう原因になることがあります。外れ値をマスクしないように、ロバスト ランダム カット フォレスト アルゴリズムでは、collusive 変位 CoDisp を使用して集合 C に x と x の colluders を含めます。
ここで、T" は Z – C の木、|C| は C に対する T の部分木の点の数です。
rrcforest の名前と値の引数 CollusiveDisplacement の既定値は "maximal" です。既定では、[2]で説明されているように、それぞれの木について、x の葉ノードからルート ノードまで移動して比率 Disp(x,C)/|C| が最大になる集合 C が求められます。 を指定すると、それぞれの木について比率の平均が計算され、その平均の値を使用し collusive 変位の値が計算されます。CollusiveDisplacement="average"
ヒント
lime、shapley、partialDependence、plotPartialDependenceなどの解釈可能性機能を使用して、異常スコアに対する予測子の寄与の程度を解釈できます。異常スコアを返すカスタム関数を定義してから、そのカスタム関数を解釈可能性関数に渡します。例については、関数ハンドルを使用したモデルの指定を参照してください。
参照
[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 で導入
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)