web-dev-qa-db-ja.com

分離フォレストの使用方法

データセットの外れ値を検出しようとしていますが、sklearnの Isolation Forest が見つかりました。私はそれを扱う方法を理解できません。トレーニングデータをその中に収めると、-1と1の値を持つベクトルが返されます。

誰かがそれがどのように機能するか説明し、例を提供できますか?

外れ値が「実際の」外れ値であることをどのように知ることができますか?

パラメーターの調整?

ここに私のコードがあります:

clf = IsolationForest(max_samples=10000, random_state=10)
clf.fit(x_train)
y_pred_train = clf.predict(x_train)
y_pred_test = clf.predict(x_test)

[1 1 1 ..., -1 1 1]
16
dapo

あなたには多くの質問があるようです。私の知識を最大限に使って一つ一つ答えてみましょう。 - 使い方? ->外れ値であるデータセットの外れ値の性質が「わずかで異なる」という事実に基づいて機能し、これは典型的なクラスタリングベースまたは距離ベースのアルゴリズムとはまったく異なります。最上位レベルでは、データセットの「通常」ポイントと比較して、「外れ値」が「分離」するステップが少なくなるというロジックで機能します。これを行うには、これがIFの動作です。トレーニングデータセット[〜#〜] x [〜#〜]withnデータポイントはそれぞれmの特徴を持ちます。トレーニングでは、IFはさまざまな機能の分離ツリー(バイナリ検索ツリー)を作成します。トレーニングには、調整用の3つのパラメーターがあります。1つは分離ツリーの数(sklearn_IsolationForestの「n_estimators」)、2つ目はサンプルの数(sklearn_IsolationForestの「max_samples」)、3つ目はXから描画してそれぞれを訓練する特徴の数ですベースエスティメータ(sklearn_IFの「max_features」)。 'max_sample'は、分離ツリーを作成するために元のデータセットから選択するランダムサンプルの数です。

テストフェーズでは、トレーニングされたすべてのアイソレーションツリーからテスト対象のデータポイントのパス長を見つけ、平均パス長を見つけます。パスの長さが長いほど、ポイントはより正常になり、逆も同様です。平均パス長に基づきます。異常スコアを計算し、sklearn_IFのdecision_functionを使用してこれを取得できます。 sklearn_IFの場合、スコアを下げ、サンプルをより異常にします。異常スコアに基づいて、sklearn_IFオブジェクトにcontaminationの適切な値を設定することにより、特定のサンプルが異常かどうかを判断できます。汚染のデフォルト値は0.1で、しきい値を決定するために調整できます。データセットの汚染量、つまりデータセット内の外れ値の割合。

調整パラメータトレーニング-> 1. n_estimators、2。max_samples、3.max_features。テスト-> 1.汚染

22

-1は、外れ値を表します(近似モデルによる)。プロセスの素敵な描写については IsolationForestの例 をご覧ください。事前の知識がある場合は、より正確なフィッティングを得るためにより多くのパラメーターを提供できます。たとえば、汚染(データセット内の外れ値の割合)がわかっている場合は、それを入力として提供できます。デフォルトでは、0.1と想定されています。パラメーターの説明を参照してください こちら

7
Miriam Farber