Menu
CoddyTech

Özellik Olarak Kümeler

Coddy'nin Machine Learning Journey'sinin Denetimsiz Öğrenme bölümünün bir parçası. Ders 40 / 51.

Doğrusal bir model bükülemez. Üç köydeki telefon sinyali, her köyün baz istasyonundan uzaklaştıkça zayıflar; yalnızca konumun gösteremediği bir biçim:

Üç köyde 135 ev; doğu yatayda, kuzey yukarıda, her köyün çevresinde k-means merkezi olan siyah bir çarpı. Kesikli çizgiler, kırmızı bir evi üç merkezin tümüne bağlar: 4.9 km, 5.2 km ve en yakını 1.0 km

k-means köyleri bulur. km.transform her satırın her merkeze olan uzaklığını verir ve .min(axis=1) en yakını tutar:

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])

Bu bir ek sütunla, doğrusal bir modelin test R kare değeri 0.000'dan 0.886'ya yükseliyor.

Bir ölçekleyicide olduğu gibi, k-means'i yalnızca eğitim satırlarına uydurun, ardından her iki kümeyi de dönüştürün.

challenge icon

Görev

Orta

Bir festivalin ses ekibi, insanların bulunduğu yerde sesin ne kadar yüksek olduğunu öğrenmek istiyor. Başlangıç kodu crowd.csv dosyasını böler, k değerini okur ve yalnızca konuma göre elde edilen skoru yazdırır.

  1. Eğitim konumlarında k küme ile k-means uygulayın.
  2. Her satırın en yakın merkeze olan uzaklığını her iki kümede de üçüncü bir sütun olarak ekleyin.
  3. Yeni test R kare değerini ve kazanımı 3 ondalık basamakla yazdırın.

Başka bir festival ve k = 4 için:

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

Kendin dene

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 festival katılımcısı: durdukları yer (m) ve oradaki ses seviyesi (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())


# Eğitim sütunlarına doğrusal regresyon uygular, test sütunları üzerindeki R kare değerini döndürür
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}")

# Kodunuzu aşağıya yazın
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Denetimsiz Öğrenme bölümündeki tüm dersler

Kendi başına pratik yap: Online Python derleyicisi