Local Outlier Factor
Coddy Machine Learning 여정의 비지도 학습 섹션에 포함된 레슨. 51개 중 36번째.
일부 이상한 점들은 데이터의 범위 안에 숨어 있습니다. 국소 이상치 계수인 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
# 전화 계정당 한 행: 한 달간의 통화 시간과 모바일 데이터 사용량
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 컴파일러