このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
iforest
構文
説明
関数 iforest
は、外れ値の検出と新規性の検出のための孤立森モデルの当てはめに使用します。
外れ値検出 (学習データ中の異常を検出) —
iforest
の出力引数tf
を使用して、学習データ中の異常を検出します。新規性の検出 (汚染されていない学習データで新規のデータの異常を検出) — 汚染されていない学習データ (外れ値がないデータ) を
iforest
に渡してIsolationForest
オブジェクトを作成します。そのオブジェクトと新規データをオブジェクト関数isanomaly
に渡して、新規のデータの異常を検出します。
は、table forest
= iforest(Tbl
)Tbl
の予測子データに対する IsolationForest
オブジェクトを返します。
では、前の構文におけるいずれかの入力引数の組み合わせに加えて、1 つ以上の名前と値の引数を使用してオプションを指定します。たとえば、forest
= iforest(___,Name=Value
)
は、学習データの 10% を異常として処理するように関数に指示します。ContaminationFraction
=0.1
例
関数 iforest
を使用して、外れ値 (学習データ中の異常) を検出します。
標本データ セット 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
配列です。iforest
ではサポートされていません。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 個を超えるカテゴリをもつカテゴリカル変数の場合、関数 iforest
は近似分割法を使用しますが、これは孤立森モデルの精度を低下させる可能性があります。254 個のカテゴリをもつカテゴリカル変数が含まれている NEIGHBORHOOD
列を削除します。
NYCHousing2015.NEIGHBORHOOD = [];
NYCHousing2015
用に孤立森モデルに学習させます。学習観測値に含まれている異常の比率を 0.1 に指定し、最初の変数 (BOROUGH
) をカテゴリカル予測子として指定します。最初の変数は数値配列であるため、この変数をカテゴリカル変数として指定しない限り、iforest
により連続変数であると仮定されます。
rng("default") % For reproducibility [Mdl,tf,scores] = iforest(NYCHousing2015,ContaminationFraction=0.1, ... CategoricalPredictors=1);
Mdl
は IsolationForest
オブジェクトです。iforest
は、学習データ NYCHousing2015
の異常インジケーター (tf
) および異常スコア (scores
) も返します。
スコア値のヒストグラムをプロットします。指定した比率に対応するスコアのしきい値に垂直線を作成します。
histogram(scores) xline(Mdl.ScoreThreshold,"r-",["Threshold" Mdl.ScoreThreshold])
異なる汚染の比率 (たとえば 0.01) で異常を識別する場合は、新しい孤立森モデルに学習させることができます。
rng("default") % For reproducibility [newMdl,newtf,scores] = iforest(NYCHousing2015, ... ContaminationFraction=0.01,CategoricalPredictors=1);
異なるスコアのしきい値 (たとえば 0.65) で異常を識別する場合は、IsolationForest
オブジェクト、学習データ、および新しいしきい値を関数 isanomaly
に渡せます。
[newtf,scores] = isanomaly(Mdl,NYCHousing2015,ScoreThreshold=0.65);
汚染の比率またはスコアのしきい値を変更すると異常インジケーターのみが変更され、異常スコアは影響を受けないことに注意してください。したがって、iforest
または isanomaly
を使用して異常スコアを再度計算しない場合、既存のスコア値で新しい異常インジケーターを取得できます。
学習データ中の異常の比率を 0.01 に変更します。
newContaminationFraction = 0.01;
関数quantile
を使用して、新しいスコアのしきい値を求めます。
newScoreThreshold = quantile(scores,1-newContaminationFraction)
newScoreThreshold = 0.7045
新しい異常インジケーターを取得します。
newtf = scores > newScoreThreshold;
関数 iforest
を使用して、汚染されていない学習観測値用の IsolationForest
オブジェクトを作成します。次に、オブジェクトおよび新規データをオブジェクト関数 isanomaly
に渡して、新規性 (新規データ中の異常) を検出します。
census1994.mat
に保存されている 1994 年の国勢調査データを読み込みます。このデータ セットは、個人の年収が $50,000 を超えるかどうかを予測するための、米国勢調査局の人口統計データから構成されます。
load census1994
census1994
には学習データ セット adultdata
およびテスト データ セット adulttest
が含まれています。
adultdata
用に孤立森モデルに学習させます。adultdata
には外れ値が含まれていないと仮定します。
rng("default") % For reproducibility [Mdl,tf,s] = iforest(adultdata);
Mdl
は IsolationForest
オブジェクトです。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
テスト データ中にある異常の観測値のインデックスを表示します。
find(tf_test)
ans = 15655
テスト データの異常スコア分布は学習データの異常スコア分布と類似しているため、isanomaly
は既定のしきい値でテスト データ中にある少数の異常を検出します。名前と値のペア 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 のエントリに一致しなくてはなりません。文字行列の各行が同じ長さになるように、名前を余分な空白で埋めてください。 |
文字ベクトルの cell 配列または string 配列 | 配列の各要素は予測子変数の名前です。名前は PredictorNames のエントリに一致しなくてはなりません。 |
"all" | すべての予測子がカテゴリカルです。 |
既定では、予測子データが table (Tbl
) の場合、iforest
は、その変数が logical ベクトル、順序付けのない categorical ベクトル、文字配列、string 配列、または文字ベクトルの cell 配列のいずれかである場合に、変数を categorical であると見なします。予測子データが行列 (X
) である場合、iforest
はすべての予測子が連続的であると見なします。他の予測子をカテゴリカル予測子として指定するには、名前と値の引数 CategoricalPredictors
を使用してそれらを指定します。
64 個を超えるカテゴリをもつカテゴリカル変数の場合、関数 iforest
は近似分割法を使用しますが、これはモデルの精度を低下させる可能性があります。
例: CategoricalPredictors="all"
データ型: single
| double
| logical
| char
| string
| cell
学習データに含まれている異常の比率。範囲 [0,1]
の数値スカラーとして指定します。
ContaminationFraction
の値が 0 (既定) の場合、iforest
はすべての学習観測値を正常な観測値として扱い、スコアのしきい値 (forest
のScoreThreshold
プロパティの値) をscores
の最大値に設定します。ContaminationFraction
の値が範囲 (0
,1
] にある場合、iforest
は指定された比率の学習観測値が異常として検出されるようにしきい値を決定します。
例: ContaminationFraction=0.1
データ型: single
| double
孤立木の個数。正の整数スカラーとして指定します。
孤立森アルゴリズムで異常スコアの計算に使用されるパスの平均長さは、正常な点と異常のどちらについても、通常は 100 個の孤立木を成長させるまでに十分に収束します[1]。
例: NumLearners=50
データ型: single
| double
学習データから非復元抽出する各孤立木の観測値の個数。3 以上の正の整数スカラーとして指定します。
小さい標本サイズを使用すると、密な異常、および正常な点に近い異常の検出に役立つため、孤立森アルゴリズムは小さい NumObservationsPerLearner
の値で適切に機能します。ただし、N
が小さい場合は標本サイズを変えて試してみる必要があります。例については、小さいデータの NumObservationsPerLearner の調査を参照してください。
例: NumObservationsPerLearner=100
データ型: single
| double
この プロパティ は読み取り専用です。
予測子変数名。一意な名前の string 配列または一意な文字ベクトルの cell 配列として指定します。PredictorNames
の機能は、予測子データの提供方法によって決まります。
Tbl
を指定した場合、PredictorNames
を使用して使用する予測子変数を指定できます。つまり、iforest
は、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
並列実行のフラグ。数値または logical 1 (true
) または 0 (false
) として指定します。UseParallel=true
を指定した場合、関数 iforest
は parfor
を使用して for
ループの反復を実行します。Parallel Computing Toolbox™ がある場合、ループが並列に実行されます。
例: UseParallel=true
データ型: logical
出力引数
学習済み孤立森モデル。IsolationForest
オブジェクトとして返されます。
オブジェクト関数 isanomaly
を forest
で使用して、新規のデータの異常を見つけることができます。
異常インジケーター。logical 列ベクトルとして返されます。tf
の要素は、Tbl
または X
の対応する行の観測値が異常であれば true
、それ以外の場合は false
になります。tf
の長さは Tbl
または X
と同じです。
iforest
は、scores
がしきい値 (forest
の ScoreThreshold
プロパティの値) を超える観測値を異常として識別します。関数は、指定された比率 (名前と値の引数 ContaminationFraction
) の学習観測値が異常として検出されるようにしきい値を決定します。
詳細
孤立森アルゴリズム[1]は、孤立木のアンサンブルを使用して異常を正常な点から分離することにより、異常を検出します。
関数 iforest
は、学習観測値の孤立森モデル (孤立木のアンサンブル) を作成し、外れ値 (学習データ中の異常) を検出します。学習観測値の部分集合について、各孤立木に次のように学習させます。
iforest
は、それぞれの木について、学習観測値から標本を非復元抽出します。iforest
は、分岐変数と分岐位置を一様に無作為に選択することで木を成長させます。それぞれの木について、すべての標本が個別の葉ノードに到達するまでこれが繰り返されます。
このアルゴリズムでは、データ中の異常は数が少なく、正常な点と異なるものであると仮定します。そのため、異常はルート ノードに近い個別の葉ノードに到達し、パスの長さ (ルート ノードから葉ノードまでの距離) が正常な点より短くなります。関数 iforest
は、すべての孤立木に対するパスの平均長さを基に定義された異常スコアを使用して外れ値を識別します。
関数 isanomaly
は、学習済み孤立森モデルを使用してデータ中の異常を検出します。新規性の検出 (汚染されていない学習データで新規のデータの異常を検出) では、汚染されていない学習データ (外れ値がないデータ) で孤立森モデルに学習させ、このモデルを使用して新規のデータの異常を検出できます。新規のデータの各観測値について、それぞれの木の対応する葉ノードが特定された後、学習済み孤立森モデルのルート ノードから葉ノードに到達するパスの平均長さが計算され、異常インジケーターおよび異常スコアが返されます。
詳細については、孤立森による異常検出を参照してください。
孤立森アルゴリズムでは、パスの長さ h(x) を正規化することにより、観測値 x の異常スコア s(x) を計算します。
ここで、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 に近いスコア値は正常な点を示しています。
ヒント
アルゴリズム
iforest
は、Tbl
に含まれている NaN
、''
(空の文字ベクトル)、""
(空の string)、<missing>
、<undefined>
の値と X
に含まれている NaN
値を欠損値と見なします。
iforest
は、欠損値を含む観測値を使用して、それらの観測値が有効な値をもつ変数の分岐を特定します。それらの観測値は、葉ノードではなく枝ノードに配置されることがあります。その場合、iforest
は、ルート ノードから枝ノードまでの距離を使用して異常スコアを計算します。すべての値が欠損値である観測値はルート ノードに配置されるため、スコア値は 1 になります。
参照
[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.
拡張機能
並列実行するには、この関数を呼び出すときに名前と値の引数 UseParallel
を true
に設定します。
並列計算の全般的な情報については、自動並列サポートを使用した MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2021b で導入
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)