異常検出-高次元データの異常検出

主な内容は次のとおりです。

  • 機能のバギング

  • 孤立森林

1はじめに

実際のシナリオでは、多くのデータセットは多次元です。次元が大きくなると、データ空間のサイズ(ボリューム)が指数関数的に大きくなり、データがまばらになります。これが次元の呪いの問題です。次元の呪いは、異常検出に課題をもたらすだけでなく、距離の計算とクラスタリングにも困難をもたらします。たとえば、近接ベースの方法では、すべての次元で距離関数を使用して局所性を定義しますが、高次元の空間では、すべてのポイントペアの距離がほぼ等しく(距離集中)、一部の距離ベースの方法が無効になります。高次元のシナリオでは、一般的に使用される方法は部分空間法です。

統合は、部分空間思考で一般的に使用される方法の1つであり、データマイニングアルゴリズムの精度を効果的に向上させることができます。統合された方法は、複数のアルゴリズムまたは複数のベース検出器の出力を組み合わせます。基本的な考え方は、一部のアルゴリズムは一部のサブセットで適切に機能し、一部のアルゴリズムは他のサブセットで適切に機能し、それらを統合して出力をより堅牢にするというものです。アンサンブル法は、部分空間ベースの方法と自然に類似しています。部分空間はさまざまなポイントセットに関連付けられていますが、アンサンブル法は、ベース検出器を使用してさまざまな次元のサブセットを探索し、これらの基本学習者を収集します。

2つの一般的な統合方法は次のとおりです。

2、機能バギング

機能のバギング、基本的な考え方はバギングに似ていますが、オブジェクトは機能です。機能のバギングは、統合された方法の1つです。統合方法の設計には、次の2つの主要なステップがあります。

1.ベース検出器を選択しますこれらの基本的な検出器は、互いに完全に異なる場合もあれば、パラメーター設定が異なる場合もあります。また、サンプリングされたサブデータセットが異なる場合もあります。基本アルゴリズムとして一般的に使用される機能バギングlofアルゴリズム。次の図は、機能バギングの一般的なアルゴリズムを示しています。

[外部リンクの画像転送に失敗しました。ソースサイトにヒル防止チェーンメカ​​ニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします(img-Mb6YMoDa-1611510884509)(https://github.com/datawhalechina/team- Learning-data-mining / raw /master/AnomalyDetection/img/image-20210104144520790.png)]

2.スコアの標準化と組み合わせ方法:検出器が異なれば、異なるスケールでスコアが生成される場合があります。たとえば、平均k最近傍検出器は元の距離スコアを出力しますが、LOFアルゴリズムは正規化された値を出力します。さらに、一般的な状況では、より大きな外れ値スコアが出力されますが、一部の検出器は、より小さな外れ値スコアを出力します。したがって、さまざまな検出器からのスコアを、意味のある組み合わせが可能な正規化された値に変換する必要があります。スコアが標準化された後、さまざまな基本検出器のスコアを組み合わせるために組み合わせ関数を選択する必要があります。最も一般的な選択肢には、組み合わせ関数の平均化と最大化が含まれます。

次の図は、2つの機能バギングの2つの異なる組み合わせスコア方法を示しています。

[外部リンク画像の転送に失敗しました。ソースサイトにヒル防止リンクメカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします(img-wohP9zti-1611510884513)(https://github.com/datawhalechina/team- Learning-data-mining / raw /master/AnomalyDetection/img/image-20210105140222697-1609839336763.png)]

(幅優先)

[外部リンク画像の転送に失敗しました。ソースサイトにヒル防止リンクメカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします(img-i26ssjvd-1611510884516)(https://github.com/datawhalechina/team- Learning-data-mining / raw /master/AnomalyDetection/img/image-20210105140242611.png)]

(累計)

ベース検出器の設計とその組み合わせ方法はすべて、特定の積分方法の特定の目標に依存します。多くの場合、データの元の分布を知ることはできず、データの一部からしか学ぶことができません。さらに、アルゴリズム自体にも、データの完全な情報を学習できないという特定の問題がある場合があります。これらの問題によって引き起こされるエラーは、通常、バイアスと分散の2つのタイプに分けられます。

分散:アルゴリズムの出力結果とアルゴリズムの期待される出力の間の誤差を指し、モデルの分散の程度とデータの変動性を表します。

偏差:予測値と真の値の差を指します。外れ値検出問題で利用可能な基本的な真理値がない場合でも

3、孤立の森

Isolation Forest(Isolation Forest)アルゴリズムは、周志華教授らが2008年に提案した異常検出アルゴリズムです。機械学習における異常検出用に特別に設計された珍しいアルゴリズムの1つです。この方法は、時間効率が高く、高い処理を効果的に処理できます。サンプルにラベルを付ける必要のない次元データと大量のデータは、業界で広く使用されています。

分離フォレストは、ノンパラメトリックで教師なしアルゴリズムであり、数学モデルを定義したり、トレーニングデータにラベルを付けたりする必要はありません。外れ値を見つけるための孤立した森林の戦略は非常に効率的です。ランダムな超平面を使用してデータ空間を切り取り、1回の切り取りで2つの部分空間を生成できるとします。次に、ランダム超平面を使用して各部分空間を切り取り、各部分空間にデータポイントが1つだけになるまでループします。直感的に言えば、高密度のクラスターはそれらを分離するために何度も切断する必要があり、低密度のクラスターはまもなく部分空間に個別に割り当てられます。分離フォレストは、すぐに分離されたこれらのポイントを異常ポイントと見なします。

4つのサンプルを使用して単純で直感的な理解を行うと、dが最初に分離されるため、dは異常である可能性が最も高くなります。

[外部リンク画像の転送に失敗しました。ソースサイトにヒル防止リンクメカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします(img-p19QtE7j-1611510884520)(https://github.com/datawhalechina/team- Learning-data-mining / raw /master/AnomalyDetection/img/v2-bb94bcf07ced88315d0a5de47677200e_720w.png)]

このデータスペースをどのように削減するかは、分離フォレストの中心的なアイデアです。カットはランダムであるため、結果の信頼性を高めるために、アンサンブル法を使用して収束値を取得します。つまり、最初から繰り返しカットし、各カットの結果を平均します。孤立したフォレストはt個の孤立した番号で構成され、各ツリーはランダムな二分木です。つまり、ツリー内の各ノードには、2つの子ノードがあるか、まったくありません。樹木構築方法は、ランダムフォレストでの樹木構築方法にいくぶん似ています。プロセスは次のとおりです。

  1.  从训练数据中随机选择一个样本子集,放入树的根节点;
    
  2.  随机指定一个属性,随机产生一个切割点V,即属性A的最大值和最小值之间的某个数;
    
  3.  根据属性A对每个样本分类,把A小于V的样本放在当前节点的左孩子中,大于等于V的样本放在右孩子中,这样就形成了2个子空间;
    
  4.  在孩子节点中递归步骤2和3,不断地构造左孩子和右孩子,直到孩子节点中只有一个数据,或树的高度达到了限定高度。
    

t本の樹木が取得された後、孤立した森林のトレーニングは終了し、生成された孤立した森林はテストデータを評価するために使用できます。

孤立した森林の異常を検出するための仮説は、異常なポイントは一般に非常にまれであり、ツリー内のリーフノードにすばやく分割されるため、リーフノードからルートノードまでのパスの長さを使用して、レコードが異常な。ランダムフォレストと同様に、孤立したフォレストは、構築されたすべてのツリーの平均結果を使用して最終結果を形成します。トレーニング中に、各ツリーのトレーニングサンプルがランダムにサンプリングされます。孤立した森林の樹木構築プロセスの観点からは、サンプルのラベルを知る必要はありませんが、しきい値を使用してサンプルが異常であるかどうかを判断します。異常点の経路は比較的短く、正常点の経路は比較的長いため、孤立林は経路の長さに基づいて各サンプル点の異常を推定します。

パス長の計算方法:

[外部リンク画像の転送に失敗しました。ソースサイトにヒル防止リンクメカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします(img-0BlTdEe0-1611510884524)(https://github.com/datawhalechina/team- Learning-data-mining / raw /master/AnomalyDetection/img/image-20210103183909407.png)]

分離フォレストも部分空間ベースの方法です。異なるブランチはデータの異なるローカル部分空間領域に対応し、小さいパスは分離された部分空間の低次元性に対応します。

4.まとめ

1.機能のバギングは分散を減らすことができます

2.孤立した森林の利点は次のとおりです。

  • 計算コストは​​、距離ベースまたは密度ベースのアルゴリズムよりも小さくなります。
  • 線形時間計算量があります。
  • 大規模なデータセットの処理に利点があります。

孤立した森林は、毎回ランダムに次元を選択することが推奨されるため、超高次元のデータには適していません。次元が高すぎると、ノイズが多すぎます。

5.練習

1. PyODライブラリを使用して、おもちゃの例を生成し、機能のバギングを呼び出します

from pyod.models.feature_bagging import FeatureBagging
from pyod.utils.data import generate_data
from pyod.utils.data import evaluate_print
from pyod.utils.example import visualize

contamination = 0.1  # percentage of outliers
n_train = 200  # number of training points
n_test = 100  # number of testing points

# Generate sample data
X_train, y_train, X_test, y_test = \
    generate_data(n_train=n_train,
                  n_test=n_test,
                  n_features=2,
                  contamination=contamination,
                  random_state=42)

# train Feature Bagging detector
clf_name = 'FeatureBagging'
clf = FeatureBagging(check_estimator=False)
clf.fit(X_train)

# get the prediction labels and outlier scores of the training data
y_train_pred = clf.labels_  # binary labels (0: inliers, 1: outliers)
y_train_scores = clf.decision_scores_  # raw outlier scores

# get the prediction on the test data
y_test_pred = clf.predict(X_test)  # outlier labels (0 or 1)
y_test_scores = clf.decision_function(X_test)  # outlier scores

# evaluate and print the results
print("\nOn Training Data:")
evaluate_print(clf_name, y_train, y_train_scores)
print("\nOn Test Data:")
evaluate_print(clf_name, y_test, y_test_scores)

# visualize the results
visualize(clf_name, X_train, y_train, X_test, y_test, y_train_pred,
          y_test_pred, show_figure=True, save_figure=False)

2. PyODライブラリを使用しておもちゃの例を生成し、IsolationForestsを呼び出します

from pyod.models.iforest import IForest
from pyod.utils.data import generate_data

from pyod.utils.data import evaluate_print
from pyod.utils.example import visualize


contamination = 0.1  # percentage of outliers
n_train = 200  # number of training points
n_test = 100  # number of testing points

# Generate sample data
X_train, y_train, X_test, y_test = \
    generate_data(n_train=n_train,
                  n_test=n_test,
                  n_features=2,
                  contamination=contamination,
                  random_state=42)

# train IForest detector
clf_name = 'IForest'
clf = IForest()
clf.fit(X_train)

# get the prediction labels and outlier scores of the training data
y_train_pred = clf.labels_  # binary labels (0: inliers, 1: outliers)
y_train_scores = clf.decision_scores_  # raw outlier scores

# get the prediction on the test data
y_test_pred = clf.predict(X_test)  # outlier labels (0 or 1)
y_test_scores = clf.decision_function(X_test)  # outlier scores

# evaluate and print the results
print("\nOn Training Data:")
evaluate_print(clf_name, y_train, y_train_scores)
print("\nOn Test Data:")
evaluate_print(clf_name, y_test, y_test_scores)

# visualize the results
visualize(clf_name, X_train, y_train, X_test, y_test, y_train_pred,
          y_test_pred, show_figure=True, save_figure=False)


3.(質問:フィーチャーバギングが分散を減らすことができるのはなぜですか?)

フィーチャバギングでは、各サンプル値が全体の平均と大きく異ならないようにディメンションを組み合わせることができるため、分散が減少します。

4.(思考の質問:機能のバギングの欠陥は何ですか?また、どのようなアイデアを最適化できますか?)

多くのスペースと時間を消費する必要があります

6.参考文献

[1] Goldstein、M。およびDengel、A.、2012年。ヒストグラムベースの外れ値スコア(hbos):高速の教師なし異常検出アルゴリズム。ポスターやデモトラック:KI-2012、pp.59-63。

[2] https://cs.nju.edu.cn/zhouzh/zhouzh.files/publication/icdm08b.pdf

[3]《異常分析》 -Charu C. Aggarwal

Datawhaleについて

Datawhaleは、データサイエンスとAIに焦点を当てたオープンソース組織であり、多くの大学やこの分野の有名企業から優秀な学習者を集め、オープンソースと探索精神を備えたチームメンバーのグループを集めています。Datawhaleは、「学習者のために、学習者とともに成長する」というビジョンを持って、真の自己表現、開放性と寛容性、相互信頼と相互支援、間違いを犯そうとする勇気、責任を取る勇気を奨励しています。同時に、Datawhaleはオープンソースの概念を使用して、オープンソースコンテンツ、オープンソース学習およびオープンソースソリューションを探索し、人材トレーニングを強化し、人材の成長を支援し、人、人と知識、人と企業の間の接続を確立します。人々と未来。

おすすめ

転載: blog.csdn.net/huochuangchuang/article/details/113101461