Faktoryzacja macierzy za pomocą SVD
Macierz użytkownik–element, rozkład SVD, czynniki ukryte, implementacja z biblioteką Surprise.
Faktoryzacja macierzy za pomocą SVD to bezpłatna lekcja Learn AI with Python na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Learn AI with Python, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Learn AI with Python zawiera 4 lekcji w sumie.
Dlaczego faktoryzacja macierzy?
Macierz użytkownik–element jest ogromna i w większości pusta. Faktoryzacja macierzy kompresuje ją do dwóch mniejszych macierzy czynników ukrytych: jednej dla użytkowników i jednej dla elementów. Ich iloczyn odtwarza istniejące oceny i uzupełnia brakujące. Metoda ta znacznie lepiej radzi sobie z rzadkością danych niż metody oparte na sąsiadach.
Intuicja czynników ukrytych
Każdy użytkownik i każdy element są opisywane krótkim wektorem ukrytych cech (na przykład upodobania do filmów akcji lub komedii). Przewidywana ocena jest iloczynem skalarnym wektora użytkownika i wektora elementu, wyuczonym wyłącznie na podstawie danych.
SVD w systemach rekomendacyjnych
Modele w stylu SVD uczą się tych czynników, minimalizując błąd predykcji dla znanych ocen i uwzględniając regularyzację. Biblioteka surprise udostępnia gotowy algorytm SVD zoptymalizowany pod kątem rekomendacji, który zyskał popularność dzięki konkursowi Netflix Prize.
Biblioteka Surprise
Proszę zaimportować potrzebne elementy: algorytm, opakowanie zbioru danych oraz czytnik opisujący format danych.
from surprise import SVD, Dataset, Reader
from surprise.model_selection import cross_validateReader i rating_scale
Reader przekazuje bibliotece Surprise prawidłowy zakres ocen za pośrednictwem parametru rating_scale. Należy dopasować go do danych (na przykład od 1 do 5 gwiazdek), w przeciwnym razie predykcje będą nieprawidłowo skalibrowane.
reader = Reader(rating_scale=(1, 5))Wczytywanie obiektu DataFrame
Należy wczytać obiekt DataFrame zawierający dokładnie trzy kolumny w następującej kolejności: użytkownik, element, ocena.
data = Dataset.load_from_df(
df[["user_id", "item_id", "rating"]],
reader
)Walidacja krzyżowa
cross_validate ocenia model na kilku podzbiorach, raportując metryki błędu, dzięki czemu można rzetelnie ocenić dokładność na danych wyłączonych z treningu.
results = cross_validate(
SVD(), data,
measures=["RMSE", "MAE"],
cv=5,
verbose=True
)RMSE i MAE
- RMSE (pierwiastek z błędu średniokwadratowego) silnie karze duże błędy.
- MAE (średni błąd bezwzględny) oznacza średnią wartość bezwzględnego odchylenia i jest łatwiejszy do interpretacji.
W obu przypadkach niższa wartość jest lepsza; RMSE jest standardową główną metryką predykcji ocen.
Trenowanie na pełnym zbiorze
Po zakończeniu walidacji należy wytrenować model na całym zbiorze danych przed uruchomieniem predykcji.
trainset = data.build_full_trainset()
algo = SVD()
algo.fit(trainset)Wykonywanie predykcji
algo.predict(uid, iid) zwraca obiekt predykcji, którego pole .est zawiera oszacowaną ocenę dla danej pary użytkownik–element.
pred = algo.predict(uid="user_42", iid="item_99")
print(pred.est) # estimated ratingStrojenie hiperparametrów
Najważniejsze parametry SVD to n_factors (wymiar czynników ukrytych), n_epochs, lr_all (współczynnik uczenia) i reg_all (regularyzacja). Proszę użyć GridSearchCV, aby znaleźć najlepszą kombinację według RMSE.
from surprise.model_selection import GridSearchCV
grid = {"n_factors": [50, 100], "reg_all": [0.02, 0.1]}
gs = GridSearchCV(SVD, grid, measures=["rmse"], cv=3)
gs.fit(data)
print(gs.best_params["rmse"])Szybki test
Sprawdź swoją wiedzę na temat faktoryzacji macierzy.
Podsumowanie
Zapoznano się z faktoryzacją macierzy za pomocą SVD: wektory użytkowników i elementów zawierają czynniki ukryte, a ich iloczyn skalarny służy do przewidywania ocen. Za pomocą biblioteki surprise ustawiono parametr rating_scale, wczytano dane, uruchomiono cross_validate z użyciem RMSE/MAE, wytrenowano model i wywołano algo.predict(uid, iid). Następny temat: filtrowanie oparte na treści.
Często zadawane pytania
Czy lekcja „Faktoryzacja macierzy za pomocą SVD” jest bezpłatna?
Tak — pełny tekst „Faktoryzacja macierzy za pomocą SVD” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Learn AI with Python, przejdź na CoddyKit PRO. Kurs Learn AI with Python zawiera 4 lekcji w sumie.
Co nauczysz się w „Faktoryzacja macierzy za pomocą SVD”?
Macierz użytkownik–element, rozkład SVD, czynniki ukryte, implementacja z biblioteką Surprise. Ćwiczysz Learn AI with Python z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Learn AI with Python?
Nie wymagamy żadnego doświadczenia. Learn AI with Python w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „Faktoryzacja macierzy za pomocą SVD”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Learn AI with Python?
Tak. Każda lekcja Learn AI with Python zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Filtrowanie kolaboratywne: oparte na użytkownikach i elementach
- Faktoryzacja macierzy za pomocą SVD
- Filtrowanie oparte na treści
- Systemy hybrydowe i metryki oceny