KNN để phát hiện ngoại lệ

Phát hiện bất thường với Python

Bekhruz (Bex) Tuychiev

Kaggle Master, Data Science Content Creator

Ứng dụng của KNN

  • Có giám sát:
    • Hồi quy
    • Phân loại
  • Không giám sát:
    • Phân cụm
    • Phát hiện ngoại lệ
Phát hiện bất thường với Python

KNN đơn giản

Điểm bất thường được tính bằng
  • Isolation Forest:
    • Độ sâu cây
    • Kích thước mẫu con
    • Nhiều thành phần khác
  • KNN:
    • Chỉ khoảng cách giữa các điểm
Phát hiện bất thường với Python

Tập dữ liệu Ansur (nam)

import pandas as pd

males = pd.read_csv("ansur_male.csv")
males.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4082 entries, 0 to 4081
Data columns (total 95 columns):
 #   Column                          Non-Null Count  Dtype
 0   abdominalextensiondepthsitting  4082 non-null   int64
 1   acromialheight                  4082 non-null   int64
  2   acromionradialelength           4082 non-null   int64
 3   anklecircumference              4082 non-null   int64
 4   axillaheight                    4082 non-null   int64
  ...
Phát hiện bất thường với Python

KNN thực hành

from pyod.models.knn import KNN

knn = KNN(contamination=0.01, n_jobs=-1)

knn.fit(males)
Phát hiện bất thường với Python

KNN với xác suất ngoại lệ

probs = knn.predict_proba(males)


# Dùng ngưỡng 55% để lọc is_outlier = probs[:, 1] > 0.55 # Tách các ngoại lệ outliers = males[is_outlier] len(outliers)
13
Phát hiện bất thường với Python

Số láng giềng

# k=20 khi contamination <=10%
knn = KNN(n_neighbors=20, n_jobs=-1)
knn.fit(males)

probs = knn.predict_proba(males)

is_outlier = probs[:, 1] > .55
outliers = males[is_outlier]

len(outliers)
15

Biểu đồ tập dữ liệu mẫu với 8 điểm, A là ngoại lệ và các mũi tên nối A với 4 láng giềng gần nhất.

Phát hiện bất thường với Python

Đặc điểm của KNN

Biểu đồ tập dữ liệu mẫu với 8 điểm, A là ngoại lệ và các mũi tên nối A với 4 láng giềng gần nhất.

Phát hiện bất thường với Python

Hạn chế của KNN

  • Ghi nhớ toàn bộ dữ liệu → tốn bộ nhớ
  • Dự đoán chậm
  • Nhạy với thang đo đặc trưng
Phát hiện bất thường với Python

Ayo berlatih!

Phát hiện bất thường với Python

Preparing Video For Download...