rrcforest
R2026b構文
説明
関数 rrcforest は、外れ値の検出と新規性の検出のためのロバスト ランダム カット フォレスト モデルの当てはめに使用します。
外れ値検出 (学習データ中の異常を検出) —
rrcforestの出力引数tfを使用して、学習データ中の異常を検出します。新規性の検出 (汚染されていない学習データで新規のデータの異常を検出) — 汚染されていない学習データ (外れ値がないデータ) を
rrcforestに渡してRobustRandomCutForestモデル オブジェクトを作成します。そのオブジェクトと新規データをオブジェクト関数isanomalyに渡して、新規のデータの異常を検出します。
は、table forest = rrcforest(Tbl)Tbl の予測子データに対する RobustRandomCutForest モデル オブジェクトを返します。
では、前の構文におけるいずれかの入力引数の組み合わせに加えて、1 つ以上の名前と値の引数を使用してオプションを指定します。たとえば、学習データの 10% を異常として処理するには forest = rrcforest(___,Name=Value) と指定します。ContaminationFraction=0.1
例
関数 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 を使用して、異なるしきい値を指定できます。例については、異常スコアのしきい値の指定を参照してください。
入力引数
予測子データ。table として指定します。Tbl の各行は 1 つの観測値に、各列は 1 つの予測子変数に対応します。文字ベクトルの cell 配列ではない cell 配列と複数列の変数は使用できません。
Tbl 内の変数のサブセットを使用するには、名前と値の引数 PredictorNames を使用して変数を指定します。
データ型: table
予測子データ。数値行列として指定します。X の各行は 1 つの観測値に、各列は 1 つの予測子変数に対応します。
名前と値の引数 PredictorNames を使用して X 内の予測子変数に名前を割り当てることができます。
データ型: single | double
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
例: NumLearners=50,NumObservationsPerLearner=100 は、50 個の木とそれぞれの木の 100 個の観測値を使用してロバスト ランダム カット フォレスト モデルに学習させるように指定します。
カテゴリカル予測子のリスト。次の表のいずれかの値として指定します。
| 値 | 説明 |
|---|---|
| 正の整数のベクトル | ベクトルの各エントリは、対応する予測子がカテゴリカルであることを示すインデックス値です。インデックス値の範囲は 1 ~
|
| logical ベクトル |
|
| 文字行列 | 行列の各行は予測子変数の名前です。名前は PredictorNames のエントリに一致しなくてはなりません。文字行列の各行が同じ長さになるように、名前を余分な空白で埋めてください。 |
| string 配列または文字ベクトルの cell 配列 | 配列の各要素は予測子変数の名前です。名前は PredictorNames のエントリに一致しなくてはなりません。 |
"all" | すべての予測子がカテゴリカルです。 |
既定では、予測子データが table (Tbl) の場合、rrcforest は、その変数が logical ベクトル、順序付けのない categorical ベクトル、文字配列、string 配列、または文字ベクトルの cell 配列のいずれかである場合に、変数を categorical であると見なします。予測子データが行列 (X) である場合、rrcforest はすべての予測子が連続的であると見なします。他の予測子をカテゴリカル予測子として指定するには、名前と値の引数 CategoricalPredictors を使用してそれらを指定します。
64 個を超えるカテゴリをもつカテゴリカル変数の場合、関数 rrcforest は近似分割法を使用しますが、これはモデルの精度を低下させる可能性があります。
例: CategoricalPredictors="all"
データ型: single | double | logical | char | string | cell
collusive 変位の計算方法。"maximal" または "average" として指定します。
関数 rrcforest は、それぞれの木について、モデルの複雑度の最大変化 ("maximal") または平均変化 ("average") を調べ、各観測値の collusive 変位 (異常スコア) を計算します。詳細については、異常スコアを参照してください。
例: CollusiveDisplacement="average"
データ型: char | string
学習データに含まれている異常の比率。範囲 [0,1] の数値スカラーとして指定します。
ContaminationFractionの値が 0 (既定) の場合、rrcforestはすべての学習観測値を正常な観測値として扱い、スコアのしきい値 (forestのScoreThresholdプロパティの値) をscoresの最大値に設定します。ContaminationFractionの値が範囲 (0,1] にある場合、rrcforestは指定された比率の学習観測値が異常として検出されるようにしきい値を決定します。
例: ContaminationFraction=0.1
データ型: single | double
ロバスト ランダム カット ツリー (ロバスト ランダム カット フォレスト モデルの木) の数。正の整数として指定します。
例: NumLearners=50
データ型: single | double
学習データから非復元抽出する各ロバスト ランダム カット ツリー (ロバスト ランダム カット フォレスト モデルの木) の観測値の数。3 以上の正の整数スカラーとして指定します。
例: NumObservationsPerLearner=100
データ型: single | double
この プロパティ は読み取り専用です。
予測子変数名。一意な名前の string 配列または一意な文字ベクトルの cell 配列として指定します。PredictorNames の機能は、予測子データの提供方法によって決まります。
Tblを指定した場合、PredictorNamesを使用して使用する予測子変数を指定できます。つまり、rrcforestは、PredictorNamesの予測子変数のみを使用します。PredictorNamesはTbl.Properties.VariableNamesのサブセットである必要があります。既定では、
Tblのすべての予測子変数の名前がPredictorNamesに格納されます。
Xを指定した場合、PredictorNamesを使用してX内の予測子変数に名前を割り当てることができます。PredictorNames内の名前の順序は、Xの列の順序に一致しなければなりません。つまり、PredictorNames{1}はX(:,1)の名前、PredictorNames{2}はX(:,2)の名前であり、他も同様です。また、size(X,2)とnumel(PredictorNames)は等しくなければなりません。既定では
PredictorNamesは{"x1","x2",...}です。
データ型: string | cell
ワーカーの並列プールを使用して計算を並列実行するためのオプション。次のいずれかの値を指定します。
"off"— MATLAB® クライアントで逐次実行します。"auto"— 並列プールが開いている場合、または MATLAB が並列プールを自動的に作成できる場合は、その並列プールを使用します。並列プールが利用できない場合は、MATLAB クライアントでシリアル実行します。"on"— 並列プールが開いている場合、または MATLAB が並列プールを自動的に作成できる場合は、その並列プールを使用します。並列プールが利用できない場合は、エラーをスローします。
並列プールが開いておらず、自動プール作成が有効になっている場合、MATLAB は既定のクラスター プロファイルを使用して並列プールを開きます。MATLAB で並列プールを使用して計算を実行するには、Parallel Computing Toolbox™ が必要です。詳細については、自動並列サポートを使用した MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
R2026b より前: 並列実行するには、UseParallel を true に設定します。
例: UseParallel="auto"
データ型: char | string
出力引数
学習済みのロバスト ランダム カット フォレスト モデル。RobustRandomCutForest モデル オブジェクトとして返されます。
オブジェクト関数 isanomaly で forest を使用して、新規のデータの異常を見つけることができます。
異常インジケーター。logical 列ベクトルとして返されます。tf の要素は、Tbl または X の対応する行の観測値が異常であれば true、それ以外の場合は false になります。tf の長さは Tbl または X と同じです。
rrcforest は、scores がしきい値 (forest の ScoreThreshold プロパティの値) を超える観測値を異常として識別します。関数は、指定された比率 (名前と値の引数 ContaminationFraction) の学習観測値が異常として検出されるようにしきい値を決定します。
詳細
ロバスト ランダム カット フォレスト アルゴリズム[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"
アルゴリズム
rrcforest は、Tbl に含まれている NaN、'' (空の文字ベクトル)、"" (空の string)、<missing>、<undefined> の値と X に含まれている NaN 値を欠損値と見なします。
rrcforest は、欠損値を含む観測値を使用して、それらの観測値が有効な値をもつ変数の分岐を特定します。それらの観測値は、葉ノードではなく枝ノードに配置されることがあります。その場合、rrcforest は、それぞれの木について、枝ノードからルート ノードまで移動して比率 (Disp(x,C)/|C|) を計算します。すべての値が欠損値である観測値はルート ノードに配置されます。そのため、比率および異常スコアは、それぞれの木の学習観測値の数になります。これは、学習済みのロバスト ランダム カット フォレスト モデルで求められる異常スコアの最大値に相当します。それぞれの木の学習観測値の数は、名前と値の引数 NumObservationsPerLearner を使用して指定できます。
参照
[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.
拡張機能
rrcforest 関数は自動並列サポートに対応しています。計算を並列実行するには、UseParallel 引数を "on" または "auto" に設定します。
詳細については、自動並列サポートを使用した MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2023a で導入UseParallel の名前と値の引数では、従来の true または false の代わりに、"off"、"auto"、または "on" を指定できるようになりました。この変更により、並列実行で並列プールを使用するタイミングをより細かく制御できます。UseParallel の名前と値の引数を true または false として指定することは非推奨です。
目的に応じてコードを更新する方法を次の表に示します。
| 目的 | 非推奨 | 推奨 |
|---|---|---|
MATLAB クライアントで実行されるコードを作成する。 | UseParallel=false | UseParallel="off" |
| 並列プール上で実行され、並列プールが利用できない場合は MATLAB クライアントで実行される、移植可能なコードを作成する。 | UseParallel=true | UseParallel="auto" |
| 並列プール上で実行され、並列プールが利用できない場合はエラーを返すコードを作成する。 | 該当なし | UseParallel="on" |
true 値、および false 値のサポートを削除する予定はありません。
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)