Menu
CoddyTech

Model Aglomeratif

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

Mobil memenuhi dua tempat parkir, dengan deretan mobil di sepanjang jalan di antaranya. Dua cara untuk menggabungkannya menjadi 2 klaster:

Dua diagram dari 102 mobil yang sama. Kiri, linkage ward: tempat parkir utara dan tempat parkir selatan menjadi dua klaster berisi 53 dan 49 mobil, jalan terbagi di antara keduanya. Kanan, linkage single: satu klaster berisi 101 mobil dan 1 mobil sendirian

scikit-learn melakukan penggabungan. Tentukan kapan harus berhenti dengan n_clusters:

from sklearn.cluster import AgglomerativeClustering
model = AgglomerativeClustering(n_clusters=2, linkage="ward")
labels = model.fit_predict(X)

linkage menentukan seberapa jauh jarak antara dua kelompok:

  • "ward", nilai default: menjaga kelompok tetap rapat
  • "complete": jarak pasangan terjauh
  • "average": rata-rata jarak semua pasangan
  • "single": jarak pasangan terdekat

Single mengikuti rantai: di sini jalan menelan kedua tempat parkir. Ward membentuk kelompok yang bulat dan seimbang.

challenge icon

Tantangan

Sedang

Stroberi liar tumbuh di tiga petak, ditambah beberapa tanaman di sepanjang jalan setapak. Linkage mana yang menemukan petak-petak tersebut? plants menyimpan posisi tanaman.

  1. Untuk setiap linkage di linkages, kelompokkan tanaman menjadi 3 grup.
  2. Cetak ukuran grup sebagai list, dari yang terbesar terlebih dahulu.
  3. Jika grup terbesar menampung lebih dari setengah jumlah tanaman, tambahkan chained.

Untuk padang rumput lain:

ward: [40, 38, 31]
complete: [41, 37, 31]
average: [41, 37, 31]
single: [86, 22, 1] chained

Coba sendiri

import numpy as np
import pandas as pd
from sklearn.cluster import AgglomerativeClustering

# Lokasi tumbuhnya 109 tanaman stroberi liar di padang rumput (meter): tiga kelompok dan satu jalur
rng = np.random.default_rng(4)
plants = np.round(np.concatenate([
    rng.normal([2, 3], 0.8, size=(40, 2)),
    rng.normal([9, 4], 1.0, size=(35, 2)),
    rng.normal([6, 10], 0.9, size=(25, 2)),
    np.column_stack([np.linspace(3, 8, 9), np.linspace(3.2, 4, 9)]) + rng.normal(0, 0.15, size=(9, 2)),
]), 2)
linkages = ["ward", "complete", "average", "single"]

# 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