Menu
CoddyTech

DBSCAN

Termasuk bagian Pembelajaran Tanpa Pengawasan dalam perjalanan Machine Learning di Coddy. Pelajaran 20 dari 51.

Bab ini menemukan kerumunan dengan bentuk apa pun, serta titik-titik yang tidak termasuk dalam kerumunan mana pun. Di akhir bab ini, kamu memetakan cahaya di sebuah lembah:

Peta malam sebuah lembah: kota memanjang yang melengkung, kota berbentuk bundar, dan desa kecil, masing-masing dengan warna dan penandanya sendiri, serta 10 cahaya tunggal sebagai tanda x abu-abu di antaranya

Pertama, gosong pasir tempat anjing laut berkumpul yang membuat k-means gagal dalam When K-Means Fails. DBSCAN mengikuti kerumunan:

Dua grafik yang menampilkan 200 anjing laut yang sama di dua gosong pasir melengkung. Di sebelah kiri, k-means membaginya menjadi bagian kiri dan kanan. Di sebelah kanan, DBSCAN menemukan setiap gosong pasir secara utuh, dengan lingkaran kecil berlabel eps di sekitar seekor anjing laut

Titik yang memiliki min_samples titik (termasuk dirinya sendiri) dalam eps, yaitu jari-jari lingkaran, berada dalam kerumunan. Kerumunan menyebar melalui titik-titik seperti itu. Tidak perlu memilih k:

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

Ini mencetak 2: kerumunan diberi nomor mulai dari 0, jadi angka terbesar ditambah satu menunjukkan jumlahnya.

challenge icon

Tantangan

Sedang

Di sebuah danau beku, para pemain seluncur es berlomba di sepanjang lintasan yang berkelok di antara dua pulau, sementara kerumunan orang menonton pertandingan hoki. k-means akan memotong lintasan menjadi beberapa bagian. Program membaca eps dalam satuan meter.

  1. Fit DBSCAN dengan eps tersebut dan min_samples=5; simpan kerumunan dalam labels.
  2. Cetak jumlah kerumunan yang ditemukan.
  3. Gambar kerumunan tersebut dengan draw_crowds(ax, X, labels) lalu tampilkan.

Untuk danau lain dan eps 3.5:

Crowds found: 3

Grafik berjudul Skaters on the Lake: lintasan berkelok berbentuk S dengan 150 pemain seluncur es berwarna biru, kerumunan berbentuk bulat dengan 30 orang berwarna oranye di atas belokan kirinya, dan kelompok berisi 22 orang berwarna hijau di bawah belokan kanannya, dengan legenda jumlah orang

Coddy mendeskripsikan grafikmu. Lalu jalankan dengan eps 8: ke mana kerumunan itu pergi?

Coba sendiri

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

# Lokasi 170 pemain seluncur es di danau yang membeku, dalam meter
skaters = pd.read_csv("skaters.csv")
X = np.column_stack([skaters["x_m"], skaters["y_m"]])
eps = float(input())


# Menggambar setiap kelompok dengan warna berbeda dan memberi label sesuai jumlah anggotanya
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)")

# Tulis kodemu di bawah ini
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pembelajaran Tanpa Pengawasan

Latihan sendiri: Compiler Python online