RobustRandomCutForest
説明
ロバスト ランダム カット フォレスト モデル オブジェクト RobustRandomCutForest
は、外れ値の検出および新規性の検出に使用します。
外れ値検出 (学習データ中の異常を検出) — 関数
rrcforest
を使用して、学習データ中の異常を検出します。関数rrcforest
は、学習データのRobustRandomCutForest
モデル オブジェクト、異常インジケーター、およびスコアを返します。新規性の検出 (汚染されていない学習データで新規のデータの異常を検出) — 汚染されていない学習データ (外れ値がないデータ) を
rrcforest
に渡してRobustRandomCutForest
モデル オブジェクトを作成します。そのオブジェクトと新規データをオブジェクト関数isanomaly
に渡して、新規のデータの異常を検出します。関数isanomaly
は、新規データの異常インジケーターおよびスコアを返します。
作成
RobustRandomCutForest
モデル オブジェクトは、関数 rrcforest
を使用して作成します。
プロパティ
CategoricalPredictors
— カテゴリカル予測子のインデックス
正の整数のベクトル | []
この プロパティ は読み取り専用です。
カテゴリカル予測子のインデックス。正の整数のベクトルとして指定します。CategoricalPredictors
には、対応する予測子がカテゴリカルであることを示すインデックス値が格納されます。インデックス値の範囲は 1 ~ p
です。p
はモデルの学習に使用した予測子の数です。どの予測子もカテゴリカルではない場合、このプロパティは空 ([]
) になります。
CollusiveDisplacement
— collusive 変位の計算方法
'maximal'
| 'average'
この プロパティ は読み取り専用です。
collusive 変位の計算方法。'maximal'
または 'average'
として指定します。
それぞれの木について、モデルの複雑度の最大変化 ('maximal'
) または平均変化 ('average'
) が求められ、各観測値の collusive 変位 (異常スコア) が計算されます。詳細については、異常スコアを参照してください。
ContaminationFraction
— 学習データ中の異常の比率
範囲 [0,1] の数値スカラー
この プロパティ は読み取り専用です。
学習データに含まれている異常の比率。範囲 [0,1] の数値スカラーとして指定します。
ContaminationFraction
の値が 0 の場合、rrcforest
はすべての学習観測値を正常な観測値として扱い、スコアのしきい値 (ScoreThreshold
プロパティの値) を学習データの異常スコアの最大値に設定します。ContaminationFraction
の値が範囲 (0,1] にある場合、rrcforest
は、指定した比率の学習観測値が異常として検出されるように、しきい値 (ScoreThreshold
プロパティの値) を決定します。
Mu
— 予測子の平均
数値ベクトル | []
この プロパティ は読み取り専用です。
学習データの予測子の平均。数値ベクトルとして指定します。
NumLearners
— ロバスト ランダム カット ツリーの数
正の整数スカラー
この プロパティ は読み取り専用です。
ロバスト ランダム カット ツリー (ロバスト ランダム カット フォレスト モデルの木) の数。正の整数として指定します。
NumObservationsPerLearner
— 各ロバスト ランダム カット ツリーの観測値の数
正の整数スカラー
この プロパティ は読み取り専用です。
学習データから非復元抽出する各ロバスト ランダム カット ツリー (ロバスト ランダム カット フォレスト モデルの木) の観測値の数。正の整数スカラーとして指定します。
PredictorNames
— 予測子変数名
文字ベクトルの cell 配列
この プロパティ は読み取り専用です。
予測子変数の名前。文字ベクトルの cell 配列を指定します。PredictorNames
の要素の順序は、予測子名が学習データに現れる順序に対応します。
ScoreThreshold
— 異常スコアのしきい値
範囲 [0,Inf
) の数値スカラー
この プロパティ は読み取り専用です。
学習データに含まれている異常の識別に使用される異常スコアのしきい値。範囲 [0,Inf
) の数値スカラーとして指定します。
しきい値を超える異常スコアをもつ観測値が異常であると識別されます。
関数
rrcforest
は、指定した比率 (ContaminationFraction
プロパティ) の学習観測値が異常として検出されるように、しきい値を決定します。
オブジェクト関数
isanomaly
は、ScoreThreshold
プロパティの値を名前と値の引数ScoreThreshold
の既定値として使用します。
Sigma
— 予測子の標準偏差
数値ベクトル | []
この プロパティ は読み取り専用です。
学習データの予測子の標準偏差。数値ベクトルとして指定します。
オブジェクト関数
isanomaly | ロバスト ランダム カット フォレストを使用したデータ中の異常の検出 |
incrementalLearner | Convert 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 = [];
列 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 census1994
census1994
には学習データ セット 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 コマンド
次の 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)