Algorytm isolation forrest - wykrywanie anomalii
Algorytm isolation forrest stosowany jest do wykrywania naomalii.
Ten kod pokazuje:
Generowanie przykładowych danych (normalne + anomalie),
Trening modelu IsolationForest,
Wykrywanie anomalii,
Wizualizację wyników.
Isolation Forest "izoluje" punkty, które wyglądają inaczej niż większość – im łatwiej dany punkt odizolować, tym bardziej podejrzany.
contamination=0.1 zakłada, że 10% danych to anomalie – to ważny parametr.
Predykcja:
1 – normalny punkt
-1 – anomalia
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.ensemble import IsolationForest
# 1. Generowanie danych - 100 normalnych punktów + 10 anomalii
rng = np.random.RandomState(42)
# Dane "normalne"
X_normal = 0.3 * rng.randn(100, 2)
X_normal = np.r_[X_normal + 2, X_normal - 2] # wokół (2,2) i (-2,-2)
# Anomalie
X_outliers = rng.uniform(low=-4, high=4, size=(10, 2))
# Połączenie danych
X = np.r_[X_normal, X_outliers]
# 2. Model Isolation Forest
model = IsolationForest(contamination=0.1, random_state=42)
model.fit(X)
# 3. Predykcja: -1 = anomalia, 1 = normalny punkt
y_pred = model.predict(X)
df = pd.DataFrame(X, columns=["x1", "x2"])
df["label"] = y_pred
# 4. Wizualizacja
plt.figure(figsize=(8, 6))
plt.title("Isolation Forest – Wykrywanie anomalii")
# Punkty normalne
normal = df[df["label"] == 1]
plt.scatter(normal["x1"], normal["x2"], c='blue', label="Normalne", alpha=0.6)
# Anomalie
outliers = df[df["label"] == -1]
plt.scatter(outliers["x1"], outliers["x2"], c='red', label="Anomalie", edgecolors='k')
plt.legend()
plt.xlabel("x1")
plt.ylabel("x2")
plt.grid(True)
plt.tight_layout()
plt.show()