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:
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.
Tantangan
SedangTim 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.
- Latih k-means dengan
kcluster pada posisi data latih. - Tambahkan jarak setiap baris ke pusat terdekatnya sebagai kolom ketiga, di kedua set.
- 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.637Coba 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
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