Menu
CoddyTech

Isolation Forest

Coddy'nin Machine Learning Journey'sinin Denetimsiz Öğrenme bölümünün bir parçası. Ders 35 / 51.

Aykırı noktaları ayırmak kolaydır. Verileri rastgele, tekrar tekrar dilimleyin; ta ki bir nokta tek başına kalana kadar:

Aynı saçılım grafiği iki kez, gri rastgele kesitlerle dilimlenmiş. Sol: üst köşedeki uzak bir nokta 2 kesitten sonra tek başına kalıyor. Sağ: kalabalığın ortasındaki bir nokta 8 kesit gerektiriyor

Uzak nokta için 2 kesim, kalabalık nokta için 8 kesim gerekti. Bir izolasyon ormanı, 100 rastgele ağaçtaki kesimlerin ortalamasını alır:

from sklearn.ensemble import IsolationForest
forest = IsolationForest(contamination=0.02, random_state=0)
flags = forest.fit_predict(X)

fit_predict aykırı satırlar için -1, geri kalanlar için 1 verir. contamination, aykırı olmasını beklediğiniz satırların oranıdır.

challenge icon

Görev

Orta

Bir liman, saatteki hareket sayısı ve hareket başına enerji miktarı için 160 vinç vardiyasının kaydını tuttu. Hangi vardiyalar tuhaftı?

  1. Vardiyaları contamination=0.03, random_state=0 değerleriyle bir yalıtım ormanı kullanarak işaretle. Aşağıdaki gibi sayıyı yazdır.
  2. Normal vardiyaları normal etiketiyle noktalar olarak dağılım grafiğinde göster.
  3. İşaretlenenleri daire içine al: s=150, facecolors="none", edgecolors="red", flagged etiketiyle. Bir gösterge ekle ve grafiği göster.

200 vardiyası olan başka bir liman için:

Flagged: 6 of 200 shifts

Düşen bir bulut şeklinde noktalarla gösterilen vinç vardiyaları; daha hızlı vinçler hareket başına daha az enerji kullanıyor ve etrafında kırmızıyla daire içine alınmış, tek başına duran altı vardiya var; bir gösterge de bulunuyor

Coddy daha sonra grafiğini açıklar.

Kendin dene

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.ensemble import IsolationForest

# Limandaki her vinç vardiyası için bir satır: hız ve enerji tüketimi
shifts = pd.read_csv("cranes.csv")
X = shifts[["moves_per_hour", "kwh_per_move"]]

# Aşağıdaki satırları değiştirmeyin
fig, ax = plt.subplots()
ax.set_title("Crane Shifts")
ax.set_xlabel("Moves per hour")
ax.set_ylabel("Energy per move (kWh)")

# Kodunuzu aşağıya yazın
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Denetimsiz Öğrenme bölümündeki tüm dersler

Kendi başına pratik yap: Online Python derleyicisi