Klastry jako cechy
Część sekcji Uczenie nienadzorowane ścieżki Machine Learning w Coddy. Lekcja 40 z 51.
Model o przebiegu liniowym nie może się zakrzywiać. Sygnał telefoniczny w trzech wsiach słabnie wraz z odległością od masztu w każdej z nich — zależności, której nie da się uchwycić samym położeniem:
k-średnich znajduje wioski. km.transform podaje odległość każdego wiersza od każdego środka, a .min(axis=1) zachowuje najbliższy:
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])Dzięki tej jednej dodatkowej kolumnie współczynnik determinacji R² modelu liniowego w zbiorze testowym wzrasta z 0.000 do 0.886.
Dopasuj k-means tylko do wierszy treningowych, tak jak skaler, a następnie przekształć oba zbiory.
Wyzwanie
ŚredniZespół nagłośnienia festiwalu chce wiedzieć, jak głośno jest w miejscach, w których stoją ludzie. Kod początkowy dzieli dane z crowd.csv, odczytuje k i wyświetla wynik uzyskany wyłącznie na podstawie pozycji.
- Dopasuj k-średnich z
kklastrami do pozycji w zbiorze treningowym. - Dodaj odległość każdego wiersza od najbliższego środka jako trzecią kolumnę w obu zbiorach.
- Wyświetl nowe R kwadrat dla zbioru testowego oraz przyrost, z dokładnością do 3 miejsc po przecinku.
Dla innego festiwalu i k = 4:
Position only: R squared 0.097
With the nearest of 4 centers: R squared 0.734
Gain: 0.637Spróbuj swoich sił
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 uczestników festiwalu: gdzie stali (m) i jaki był tam poziom dźwięku (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())
# Dopasowuje regresję liniową do kolumn treningowych i zwraca jej R kwadrat dla kolumn testowych
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}")
# Napisz swój kod poniżej
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Uczenie nienadzorowane
1Znajdowanie grup
Uczenie się bez etykietMierzenie podobieństwaK-Means krok po krokuK-Means w scikit-learnPodsumowanie: członkowie siłowni4Klasteryzacja hierarchiczna
Łączenie krok po krokuModele aglomeracyjneDendrogramyPodsumowanie: rasy psów7PCA w praktyce
Poznajemy 64 wymiarySkładowe jako wzorceKompresuj i odtwórzPCA przed modelemPodsumowanie: skaner twarzy10Projekt: Odkrywca cyfr
Przyjrzyj się cyfromZmniejsz wymiar za pomocą PCAGrupuj cyfryNazwij grupyZnajdź te nietypowe2Wybór k
InercjaMetoda łokciaWyniki silhouetteSkalowanie przed klasteryzacjąPodsumowanie: strefy dostawPoćwicz samodzielnie: Kompilator Python online