Menu
CoddyTech

Skalakan Sebelum Pengelompokan

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

K-means mengelompokkan berdasarkan jarak, jadi satuan yang lebih besar mendominasi. Kucing di penampungan berdasarkan berat dalam gram dan usia dalam tahun: selisih 500 g lebih mendominasi daripada selisih 10 tahun.

Dua grafik berisi 120 kucing di penampungan, usia dalam tahun pada sumbu mendatar dan berat dalam gram pada sumbu tegak. Kiri, dikelompokkan dengan data mentah: kucing dewasa terpisah berdasarkan berat, mencampur kucing muda dan tua. Kanan, dikelompokkan setelah penskalaan: anak kucing, kucing dewasa, dan kucing senior terpisah berdasarkan usia

Lakukan standardisasi terlebih dahulu, seperti pada k-NN, agar setiap fitur dihitung dengan bobot yang sama:

X_scaled = StandardScaler().fit_transform(X)
km = KMeans(n_clusters=3, n_init=10, random_state=0)
km.fit(X_scaled)

make_pipeline(StandardScaler(), KMeans(...)) melakukan keduanya dalam satu model. Lalu, baca setiap kelompok dalam satuan nyata: hitung rata-rata baris aslinya, X[km.labels_ == c].mean(axis=0).

challenge icon

Tantangan

Mudah

Aplikasi pencarian apartemen mengelompokkan 100 listing berdasarkan harga sewa dan jarak ke stasiun. Kode awal mengelompokkan kolom mentah, dan semua kelompoknya berada sekitar 3 km dari stasiun: nilai dolar mendominasi nilai kilometer.

  1. Skalakan kedua kolom dengan StandardScaler.
  2. Kelompokkan baris yang sudah diskalakan. Pertahankan laporan: laporan itu membaca setiap kelompok dalam satuan sebenarnya.

Untuk kota lain:

38 flats: $1820 a month, 0.9 km out
33 flats: $1130 a month, 4.2 km out
29 flats: $2760 a month, 1.5 km out

Coba sendiri

import pandas as pd
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler

# Satu baris untuk tiap apartemen: sewa bulanan dalam dolar, jarak ke stasiun dalam km
flats = pd.read_csv("flats.csv")
X = flats[["rent", "station_km"]]

# Ini mengelompokkan kolom mentah: perbaiki
km = KMeans(n_clusters=3, n_init=10, random_state=0)
km.fit(X)

# Tampilkan tiap kelompok dalam satuan sebenarnya, mulai dari yang terbesar
sizes = pd.Series(km.labels_).value_counts()
for c in sizes.index:
    group = flats[km.labels_ == c]
    print(f"{sizes[c]} flats: ${round(group['rent'].mean())} a month, {group['station_km'].mean():.1f} km out")
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