Menu
CoddyTech

Klaster sebagai Fitur

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

Model garis lurus tidak bisa melengkung. Sinyal ponsel di tiga desa melemah seiring bertambahnya jarak dari menara di setiap desa, pola yang tidak terlihat hanya dari posisi:

135 rumah di tiga desa, arah timur ke kanan dan utara ke atas, setiap desa mengelilingi tanda silang hitam, pusat k-means-nya. Garis putus-putus menghubungkan satu rumah merah ke ketiga pusat: 4.9 km, 5.2 km, dan yang terdekat, 1.0 km

k-means menemukan desa-desa tersebut. km.transform memberikan jarak setiap baris ke semua pusat, dan .min(axis=1) memilih yang terdekat:

km = KMeans(n_clusters=3, n_init=10, random_state=0).fit(X_train)
near_train = km.transform(X_train).min(axis=1)
near_test = km.transform(X_test).min(axis=1)
X_train2 = np.column_stack([X_train, near_train])
X_test2 = np.column_stack([X_test, near_test])

Dengan satu kolom tambahan itu, R kuadrat pada pengujian model linear meningkat dari 0.000 menjadi 0.886.

Latih k-means hanya pada baris pelatihan, seperti scaler, lalu transformasikan kedua set.

challenge icon

Tantangan

Sedang

Tim suara festival ingin mengetahui seberapa keras suara di tempat orang-orang berdiri. Kode awal membagi crowd.csv, membaca k, dan mencetak skor berdasarkan posisi saja.

  1. Latih k-means dengan k cluster pada posisi data latih.
  2. Tambahkan jarak setiap baris ke pusat terdekatnya sebagai kolom ketiga, di kedua set.
  3. Cetak R kuadrat pengujian yang baru dan peningkatannya, dengan 3 angka desimal.

Untuk festival lain dan k = 4:

Position only: R squared 0.097
With the nearest of 4 centers: R squared 0.734
Gain: 0.637

Coba sendiri

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.cluster import KMeans

# 250 pengunjung festival: posisi mereka berdiri (m) dan tingkat suara di sana (dB)
crowd = pd.read_csv("crowd.csv")
X = crowd[["x_m", "y_m"]].to_numpy()
y = crowd["sound_db"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
k = int(input())


# Menerapkan regresi linear pada kolom pelatihan, lalu mengembalikan nilai R kuadratnya pada kolom pengujian
def test_r2(A_train, A_test):
    model = LinearRegression().fit(A_train, y_train)
    return model.score(A_test, y_test)


before = test_r2(X_train, X_test)
print(f"Position only: R squared {before:.3f}")

# 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