Local Outlier Factor
CoddyのMachine Learningジャーニー「教師なし学習」セクションの一部。レッスン 36/51。
データの範囲内にも、いくつかの異常な点が隠れています。局所外れ値因子(LOF)は、各点の位置がどれだけ密集しているかを、近傍の点の位置と比較します。
買い物客が6時間滞在することもあります。しかし、この車の近傍は通勤者で、ぎっしり詰まっており、この車はその集団から遠く離れた場所にあります。
from sklearn.neighbors import LocalOutlierFactor
lof = LocalOutlierFactor(n_neighbors=20, contamination=0.02)
flags = lof.fit_predict(X)答えは前と同じです。-1は異常、1は正常です。n_neighborsは比較の局所性を設定します。
チャレンジ
中級ある携帯電話会社は、近隣のアカウントとは異なるアカウントを探しています。スターターコードではデータをスケーリングし、Isolation Forestでアカウントにフラグを付けます。プログラムはkを読み込みます。
- LOFでアカウントにフラグを付けます。
n_neighbors=k、contamination=0.03を指定します。 - 各検出器の件数と、両方の検出器がフラグを付けたアカウント数を出力します。
- 以下のように、LOFだけがフラグを付けたアカウントを、テーブルの順に一覧表示します。
より小規模な会社の場合で、10を指定すると:
Isolation forest: 5 accounts
LOF: 5 accounts
Both: 4 accounts
Only LOF:
A118: 960 minutes, 6.2 GB自分で試してみよう
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import IsolationForest
from sklearn.neighbors import LocalOutlierFactor
# 電話アカウントごとに1行:1か月間の通話時間とモバイルデータ通信量
accounts = pd.read_csv("accounts.csv")
X = StandardScaler().fit_transform(accounts[["call_minutes", "data_gb"]])
k = int(input())
# Isolation Forestの結果:フォレストが異常と判定したアカウントは-1
forest_flags = IsolationForest(contamination=0.03, random_state=0).fit_predict(X)
# 以下にコードを記述してください
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
教師なし学習のすべてのレッスン
自分で練習してみよう: Pythonオンラインコンパイラ