Menu
CoddyTech

Inersia

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

Bab ini membahas cara memilih k. Di akhir bab ini, kamu akan memilihnya untuk pengiriman toko roti dan memetakan zonanya:

Peta titik pengiriman di sebuah kota, arah timur dalam km ke samping dan arah utara dalam meter ke atas, dibagi menjadi tiga zona dengan 45, 40, dan 25 titik, masing-masing dengan bintang hitam di tengahnya

Pertama, skor. Inertia menjumlahkan kuadrat jarak setiap titik ke pusat kelompoknya: nilainya kecil saat titik-titik berkumpul dekat dengan pusatnya.

36 apel dalam tiga kelompok, masing-masing dihubungkan ke pusat bintang hitam kelompoknya dengan garis tipis berwarna abu-abu. Inertia menguadratkan panjang setiap garis lalu menjumlahkannya

KMeans menyimpannya di inertia_. Untuk 180 apel:

for k in [1, 2, 3, 4]:
    km = KMeans(n_clusters=k, n_init=10, random_state=0)
    km.fit(X)
    print(k, round(km.inertia_))

Ini mencetak:

1 1718
2 752
3 230
4 196

Semakin banyak pusat, semakin pendek jari-jarinya: inertia selalu mengecil saat k bertambah. Dengan satu pusat untuk setiap titik, nilainya 0, jadi nilai terkecil bukan yang terbaik.

challenge icon

Tantangan

Mudah

Sebuah usaha tembikar mengemas vas ke dalam kotak dengan beberapa ukuran. Setiap vas dimasukkan ke ukuran terdekat; inertia mengukur seberapa tidak pas ukurannya. Program membaca budget, yaitu batas ketidakcocokan yang diterima usaha tembikar.

  1. Coba k = 1, 2, 3, dan seterusnya: sesuaikan KMeans pada vases dan cetak inertia setiap k, setelah dibulatkan.
  2. Berhenti pada k pertama yang inertia-nya tidak melebihi budget, lalu cetak nilainya.

Untuk usaha tembikar lain:

k = 1, inertia 15120
k = 2, inertia 4811
k = 3, inertia 1290
Box sizes needed: 3

Coba sendiri

import numpy as np
from sklearn.cluster import KMeans

# Jangan ubah baris-baris di bawah ini
rng = np.random.default_rng(8)
# Empat jenis vas: tinggi dan lebar khas dalam cm, serta jumlah masing-masing
kinds = [(15, 8, 25), (38, 13, 25), (22, 22, 20), (58, 26, 10)]
parts = []
for h, w, n in kinds:
    parts.append(np.column_stack([rng.normal(h, 2.5, n), rng.normal(w, 2, n)]))
# 80 vas, masing-masing satu baris: tinggi dan lebar dalam cm
vases = np.round(np.concatenate(parts), 1)

# Batas ketidakcocokan, diukur sebagai inertia, yang diterima oleh tempat pembuatan tembikar
budget = int(input())

# 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