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:
Pertama, gosong pasir tempat anjing laut berkumpul yang membuat k-means gagal dalam When K-Means Fails. DBSCAN mengikuti kerumunan:
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.
Tantangan
SedangDi 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.
- Fit DBSCAN dengan eps tersebut dan
min_samples=5; simpan kerumunan dalamlabels. - Cetak jumlah kerumunan yang ditemukan.
- Gambar kerumunan tersebut dengan
draw_crowds(ax, X, labels)lalu tampilkan.
Untuk danau lain dan eps 3.5:
Crowds found: 3Coddy 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
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pembelajaran Tanpa Pengawasan
1Menemukan Kelompok
Belajar Tanpa LabelMengukur KemiripanK-Means secara ManualK-Means dengan scikit-learnRangkuman: Anggota Gym4Pengelompokan Hierarkis
Penggabungan Langkah demi LangkahModel AglomeratifDendrogramRingkasan: Ras Anjing7PCA dalam Praktik
Melihat 64 DimensiKomponen sebagai PolaKompres dan RekonstruksiPCA Sebelum ModelRangkuman: Pemindai Wajah10Proyek: Penjelajah Digit
Amati DigitnyaPerkecil dengan PCAKelompokkan DigitBeri Nama pada KelompokTemukan yang Tidak BiasaLatihan sendiri: Compiler Python online