Menu
CoddyTech

DBSCAN

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

Bu bölüm, her şekildeki kümeleri ve hiçbirine ait olmayan noktaları bulur. Bölümün sonunda bir vadinin ışıklarını haritalarsın:

Bir vadinin gece haritası: uzun, kıvrımlı bir kasaba, yuvarlak bir kasaba ve küçük bir köy; her biri kendi renginde ve işaretçisiyle gösterilmiş, aralarında gri x işaretleriyle gösterilen 10 tekil ışık

Önce, When K-Means Fails bölümünde k-means'i bozan fokların kum setleri. DBSCAN bunun yerine kalabalıkları takip eder:

İki kıvrımlı kum setindeki aynı 200 fokun iki grafiği. Solda, k-means onları sol ve sağ yarı olarak ayırıyor. Sağda, DBSCAN her kum setini bir bütün olarak buluyor; bir fokun etrafında eps etiketli küçük bir daire var

eps yarıçapındaki dairenin içinde kendisi de dahil olmak üzere min_samples nokta bulunan bir nokta, bir kalabalığın içindedir. Kalabalıklar bu tür noktalar üzerinden yayılır. Seçilecek bir k yoktur:

from sklearn.cluster import DBSCAN
labels = DBSCAN(eps=0.2, min_samples=5).fit_predict(X)
print(labels.max() + 1)

Bu, 2 değerini yazdırır: kalabalıklar 0'dan başlayarak numaralandırılır, bu nedenle en büyük değere 1 eklemek onların sayısını verir.

challenge icon

Görev

Orta

Donmuş bir gölde patenciler iki ada arasından kıvrılarak geçen bir pistte yarışırken, bir kalabalık hokey maçı izliyor. k-means pisti parçalara ayırırdı. Program eps değerini metre cinsinden okur.

  1. DBSCAN'i bu eps ve min_samples=5 ile eğit; kalabalıkları labels içinde tut.
  2. Bulduğu kalabalık sayısını yazdır.
  3. Onları draw_crowds(ax, X, labels) ile çiz ve göster.

Başka bir göl ve eps 3.5 için:

Crowds found: 3

Skaters on the Lake başlıklı bir grafik: mavi renkte 150 patenciden oluşan kıvrımlı S biçimli bir pist, sol kıvrımının üstünde turuncu renkte 30 kişilik yuvarlak bir kalabalık ve sağ kıvrımının altında yeşil renkte 22 kişilik bir grup; boyutları gösteren bir açıklama

Coddy grafiğini açıklıyor. Ardından eps 8 ile çalıştır: kalabalıklar nereye gitti?

Kendin dene

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.cluster import DBSCAN

# Donmuş gölde 170 patencinin durduğu yerler, metre cinsinden
skaters = pd.read_csv("skaters.csv")
X = np.column_stack([skaters["x_m"], skaters["y_m"]])
eps = float(input())


# Her kalabalığı kendi renginde çizer ve büyüklüğüyle etiketler
def draw_crowds(ax, X, labels):
    for crowd in range(labels.max() + 1):
        rows = labels == crowd
        ax.scatter(X[rows, 0], X[rows, 1], s=14, label=f"{rows.sum()} skaters")
    ax.legend()


fig, ax = plt.subplots()
ax.set_title("Skaters on the Lake")
ax.set_xlabel("East (m)")
ax.set_ylabel("North (m)")

# 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