LocalOutlierFactor
説明
局所外れ値因子モデル オブジェクト LocalOutlierFactor
を異常検出に使用します。
外れ値検出 (学習データ中の異常を検出) — 関数
lof
を使用して、学習データ中の異常を検出します。関数lof
は、LocalOutlierFactor
オブジェクトを作成し、学習データの異常インジケーターおよびスコア (局所外れ値因子の値) を返します。新規性の検出 (汚染されていない学習データで新規のデータの異常を検出) — 汚染されていない学習データ (外れ値がないデータ) を
lof
に渡してLocalOutlierFactor
オブジェクトを作成し、このオブジェクトおよび新規データをオブジェクト関数isanomaly
に渡して新規のデータの異常を検出します。関数isanomaly
は、新規データの異常インジケーターおよびスコアを返します。
作成
関数 lof
を使用して LocalOutlierFactor
オブジェクトを作成します。
プロパティ
この プロパティ は読み取り専用です。
局所外れ値因子モデルの学習に使用された予測子。数値行列または table として指定します。X
の各行は 1 つの観測値に対応し、各列は 1 つの変数に対応します。
この プロパティ は読み取り専用です。
Kd 木の各葉ノードにおけるデータ点の最大数。正の整数を指定します。
このプロパティは、SearchMethod
が 'kdtree'
の場合に有効です。SearchMethod
が 'exhaustive'
の場合、BucketSize
の値は空 ([]
) になります。
この プロパティ は読み取り専用です。
カテゴリカル予測子のインデックス。正の整数のベクトルとして指定します。CategoricalPredictors
には、対応する予測子がカテゴリカルであることを示すインデックス値が格納されます。インデックス値の範囲は 1 ~ p
です。p
はモデルの学習に使用した予測子の数です。どの予測子もカテゴリカルではない場合、このプロパティは空 ([]
) になります。
この プロパティ は読み取り専用です。
学習データに含まれている異常の比率。範囲 [0,1]
の数値スカラーとして指定します。
ContaminationFraction
の値が 0 の場合、lof
はすべての学習観測値を正常な観測値として扱い、スコアのしきい値 (ScoreThreshold
プロパティの値) を学習データの異常スコアの最大値に設定します。ContaminationFraction
の値が範囲 (0
,1
] にある場合、lof
は、指定した比率の学習観測値が異常として検出されるように、しきい値 (ScoreThreshold
プロパティの値) を決定します。
この プロパティ は読み取り専用です。
距離計量。文字ベクトルを指定します。
すべての予測子変数が連続 (数値) 変数である場合、
Distance
の値は次の距離計量のいずれかになります。値 説明 'euclidean'
ユークリッド距離
"fasteuclidean"
データ点における要素の数が 10 個を超える場合に通常は時間の短縮になるアルゴリズムを使用したユークリッド距離。アルゴリズムを参照してください。
"fasteuclidean"
は"exhaustive"
SearchMethod
にのみ適用されます。'mahalanobis'
マハラノビス距離 — この距離には、
DistanceParameter
プロパティに格納された共分散行列が使用されます。'minkowski'
ミンコフスキー距離 — この距離には、
DistanceParameter
プロパティに格納された指数値が使用されます。'chebychev'
チェビシェフ距離 (最大座標差)
'cityblock'
市街地距離
'correlation'
1 から、観測値間の標本相関を減算 (値の系列として処理)
'cosine'
1 から、ベクトルとして扱われる観測間の夾角の余弦を減算
'spearman'
1 から観測値間の標本スピアマン順位相関係数を減算 (値の系列として処理)
すべての予測子変数がカテゴリカル変数である場合、
Distance
の値は次の距離計量のいずれかになります。値 説明 'hamming'
ハミング距離 (異なる座標の比率)
'jaccard'
1 からジャカード係数 (異なる非ゼロ座標の比率) を減算
さまざまな距離計量の詳細については、距離計量を参照してください。
この プロパティ は読み取り専用です。
マハラノビス距離またはミンコフスキー距離の距離計量のパラメーター値。正のスカラーを指定します。その他の距離の場合、DistanceParameter
の値は空 ([]
) になります。これは、指定された距離計量の式にパラメーターがないことを示します。
この プロパティ は読み取り専用です。
k 番目に小さい距離値の近傍をすべて LocalOutlierFactor
に含めるかどうかを示す同順位使用フラグ。logical 0
(false
) または 1
(true
) を指定します。IncludeTies
が true
である場合、すべての近傍が LocalOutlierFactor
に含まれます。それ以外の場合、LocalOutlierFactor
には正確に k 個の近傍が含まれます。
この プロパティ は読み取り専用です。
局所外れ値因子の値の計算に使用する X
内の最近傍の個数。正の整数値を指定します。
この プロパティ は読み取り専用です。
予測子変数の名前。文字ベクトルの cell 配列を指定します。PredictorNames
の要素の順序は、予測子名が学習データに現れる順序に対応します。
この プロパティ は読み取り専用です。
学習データに含まれている異常の識別に使用される異常スコアのしきい値。非負のスカラーとして指定します。
しきい値を超える異常スコアをもつ観測値が異常であると識別されます。
関数
lof
は、指定した比率 (ContaminationFraction
プロパティ) の学習観測値が異常として検出されるように、しきい値を決定します。
オブジェクト関数
isanomaly
は、ScoreThreshold
プロパティの値を名前と値の引数ScoreThreshold
の既定値として使用します。
この プロパティ は読み取り専用です。
最近傍探索法。'kdtree'
または 'exhaustive'
を指定します。
'kdtree'
— この方法では、Kd 木アルゴリズムを使用して最近傍を探索します。このオプションは、距離計量 (Distance
) が次のいずれかである場合に有効です。'euclidean'
— ユークリッド距離'cityblock'
— 市街地距離'minkowski'
— ミンコフスキー距離'chebychev'
— チェビシェフ距離
'exhaustive'
— この方法では、網羅的探索アルゴリズムを使用して最近傍を探索します。関数
lof
を使用してX
の局所外れ値因子の値を計算する場合、この関数は、X
内のすべての点からX
内の各点までの距離の値を計算することにより、最近傍を探索します。関数
isanomaly
を使用して新しいデータXnew
の局所外れ値因子の値を計算する場合、この関数は、X
内のすべての点からXnew
内の各点までの距離の値を計算することにより、最近傍を探索します。
オブジェクト関数
isanomaly | 局所外れ値因子を使用したデータ中の異常の検出 |
例
関数 lof
を使用して、外れ値 (学習データ中の異常) を検出します。
標本データ セット 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
NYCHousing2015
から非数値変数を削除します。変数 BOROUGH
のデータ型は double ですが、これは不動産の所在地の区を示すカテゴリカル変数です。変数 BOROUGH
も削除します。
NYCHousing2015 = NYCHousing2015(:,vartype("numeric"));
NYCHousing2015.BOROUGH = [];
NYCHousing2015
用に局所外れ値因子モデルに学習させます。学習観測値に含まれている異常の比率を 0.01 と指定します。
[Mdl,tf,scores] = lof(NYCHousing2015,ContaminationFraction=0.01);
Mdl
は LocalOutlierFactor
オブジェクトです。lof
は、学習データ NYCHousing2015
の異常インジケーター (tf
) および異常スコア (scores
) も返します。
スコア値のヒストグラムをプロットします。指定した比率に対応するスコアのしきい値に垂直線を作成します。
h = histogram(scores,NumBins=50); h.Parent.YScale = 'log'; xline(Mdl.ScoreThreshold,"r-",["Threshold" Mdl.ScoreThreshold])
異なる汚染の比率 (たとえば 0.05) で異常を識別する場合は、新しい局所外れ値因子モデルに学習させることができます。
[newMdl,newtf,scores] = lof(NYCHousing2015,ContaminationFraction=0.05);
汚染の比率を変更すると異常インジケーターのみが変更され、異常スコアは影響を受けないことに注意してください。したがって、lof
を使用して異常スコアを再度計算しない場合、既存のスコア値で新しい異常インジケーターを取得できます。
学習データ中の異常の比率を 0.05 に変更します。
newContaminationFraction = 0.05;
関数quantile
を使用して、新しいスコアのしきい値を求めます。
newScoreThreshold = quantile(scores,1-newContaminationFraction)
newScoreThreshold = 6.7493
新しい異常インジケーターを取得します。
newtf = scores > newScoreThreshold;
関数 lof
を使用して、汚染されていない学習観測値用の LocalOutlierFactor
オブジェクトを作成します。次に、オブジェクトおよび新規データをオブジェクト関数 isanomaly
に渡して、新規性 (新規データ中の異常) を検出します。
census1994.mat
に保存されている 1994 年の国勢調査データを読み込みます。このデータ セットは、個人の年収が $50,000 を超えるかどうかを予測するための、米国勢調査局の人口統計データから構成されます。
load census1994
census1994
には学習データ セット adultdata
およびテスト データ セット adulttest
が含まれています。LocalOutlierFactor
オブジェクトに学習させるには、予測子データはすべて連続、またはすべて categorical のいずれかでなければなりません。adultdata
および adulttest
から非数値変数を削除します。
adultdata = adultdata(:,vartype("numeric")); adulttest = adulttest(:,vartype("numeric"));
adultdata
用に局所外れ値因子モデルに学習させます。adultdata
には外れ値が含まれていないと仮定します。
[Mdl,tf,s] = lof(adultdata);
Mdl
は LocalOutlierFactor
オブジェクトです。lof
は、学習データ adultdata
の異常インジケーター tf
および異常スコア s
も返します。名前と値の引数 ContaminationFraction
を 0 を超える値として指定していない場合、lof
はすべての学習観測値を正常な観測値として扱います。つまり tf
の値はすべて logical 0 (false
) となります。この関数によりスコアのしきい値が最大のスコア値に設定されます。しきい値を表示します。
Mdl.ScoreThreshold
ans = 28.6719
学習済みの局所外れ値因子モデルを使用して、adulttest
内の異常を見つけます。
[tf_test,s_test] = isanomaly(Mdl,adulttest);
関数 isanomaly
は、adulttest
の異常インジケーター tf_test
およびスコア s_test
を返します。既定では、isanomaly
はしきい値 (Mdl.ScoreThreshold
) を超えるスコアをもつ観測値を異常として識別します。
異常スコア s
および s_test
のヒストグラムを作成します。異常スコアのしきい値に垂直線を作成します。
h1 = histogram(s,NumBins=50,Normalization="probability"); hold on h2 = histogram(s_test,h1.BinEdges,Normalization="probability"); xline(Mdl.ScoreThreshold,"r-",join(["Threshold" Mdl.ScoreThreshold])) h1.Parent.YScale = 'log'; h2.Parent.YScale = 'log'; legend("Training Data","Test Data",Location="north") hold off
テスト データ中にある異常の観測値のインデックスを表示します。
find(tf_test)
ans = 0×1 empty double column vector
テスト データの異常スコア分布は学習データの異常スコア分布と類似しているため、isanomaly
は既定のしきい値でテスト データ中にある異常を検出しません。名前と値のペア ScoreThreshold
を使用して、異なるしきい値を指定できます。例については、異常スコアのしきい値の指定を参照してください。
詳細
局所外れ値因子 (LOF) アルゴリズムでは、周囲の近傍に対する観測値の相対的な密度に基づいて異常を検出します。
このアルゴリズムでは、観測値の k 最近傍を探索し、観測値とその近傍の局所到達可能性密度を計算します。局所外れ値因子は、観測値とその近傍の平均密度比です。つまり、観測値 p の局所外れ値因子は次のようになります。
ここで
lrdk(·) は、観測値の局所到達可能性密度です。
Nk(p) は、観測値 p の k 最近傍を表します。名前と値の引数
IncludeTies
をtrue
に指定して k 番目に小さい距離値の近傍をすべて含めるか、false
に指定して正確に k 個の近傍を含めることができます。効率性能を高めるため、lof
のIncludeTies
の既定値はfalse
です。[1]のアルゴリズムではすべての近傍が使用されることに注意してください。|Nk(p)| は Nk(p) 内の観測値数です。
正常な観測値の場合、局所外れ値因子の値は 1 未満かそれに近い値で、観測値の局所到達可能性密度がその近傍より高いか同等であることを示します。局所外れ値因子の値が 1 より大きい場合は、異常の可能性を示します。局所外れ値因子の値のしきい値は、lof
の ContaminationFraction
引数と isanomaly
の ScoreThreshold
引数で制御します。
このアルゴリズムでは、到達可能性距離に基づいて密度を測定します。観測値 o に対する観測値 p の到達可能性距離は次のように定義されます。
ここで
dk(o) は、観測値 o からその近傍までの距離の中で k 番目に短い距離です。
d(p,o) は、観測値 p と観測値 o の間の距離です。
このアルゴリズムでは、到達可能性距離を使用して、観測値 o に近い観測値の d(p,o) の統計変動を低減します。
観測値 p の局所到達可能性密度は、観測値 p からその近傍までの平均到達可能性距離の逆数です。
重複の数が近傍の数 (k) より大きい場合、密度値は無限大になる可能性があります。そのため、学習データに重複が含まれている場合、関数 lof
と関数 isanomaly
では加重局所外れ値因子 (WLOF) アルゴリズムが使用されます。このアルゴリズムでは、加重局所到達可能性密度 (wlrd) を使用して加重局所外れ値因子を計算します。
ここで
w(o) は、学習データに含まれている観測値 o の重複の数です。重みの値を計算した後、このアルゴリズムでは重複の各セットが 1 つの観測値として扱われます。
距離計量は、2 つの観測値の間の距離を定義する関数です。LocalOutlierFactor
は、連続変数とカテゴリカル変数用のさまざまな距離計量をサポートします。
mx 行 n 列のデータ行列 X (mx 個の 1 行 n 列の行ベクトル x1、x2、...、xmx として扱われる) と、my 行 n 列のデータ行列 Y (my 個の 1 行 n 列の行ベクトル y1、y2、...、ymy として扱われる) が与えられた場合、ベクトル xs と yt の間のさまざまな距離は次のように定義されます。
連続 (数値) 変数の距離計量
ユークリッド距離
ユークリッド距離はミンコフスキー距離の特殊なケース、p = 2 の場合です。
高速ユークリッド距離はユークリッド距離と同じですが、観測値 n における変数の数が 10 個を超える場合に通常は時間の短縮になるアルゴリズムを使用します。アルゴリズムを参照してください。
マハラノビス距離
ここで、C は共分散行列です。
市街地距離
市街地距離はミンコフスキー距離の特殊なケース、p = 1 の場合です。
ミンコフスキー距離
p = 1 という特殊なケースでは、ミンコフスキー距離は市街地距離を与えます。p = 2 という特殊なケースでは、ミンコフスキー距離はユークリッド距離を与えます。p = ∞ という特殊なケースでは、ミンコフスキー距離はチェビシェフ距離を与えます。
チェビシェフ距離
チェビシェフ距離はミンコフスキー距離の特殊なケース、p = ∞ の場合です。
コサイン距離
相関距離
ここで
および
スピアマン距離は、1 から一連の値として扱われる観測値間の標本スピアマン順位相関係数を引きます。
ここで
カテゴリカル変数の距離計量
ハミング距離
ハミング距離は、一致しない座標の比率です。
Jaccard 距離は、1 からジャカード係数 (異なる非ゼロ座標の比率) を引きます。
ヒント
lime
、shapley
、partialDependence
、plotPartialDependence
などの解釈可能性機能を使用して、異常スコアに対する予測子の寄与の程度を解釈できます。異常スコアを返すカスタム関数を定義してから、そのカスタム関数を解釈可能性関数に渡します。例については、関数ハンドルを使用したモデルの指定を参照してください。
参照
[1] Breunig, Markus M., et al. “LOF: Identifying Density-Based Local Outliers.” Proceedings of the 2000 ACM SIGMOD International Conference on Management of Data, 2000, pp. 93–104.
バージョン履歴
R2022b で導入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)