SVD macierzy z brakującymi wartościami

12

Załóżmy, że mam macierz rekomendacji w stylu Netflix i chcę zbudować model, który przewiduje potencjalne przyszłe oceny filmów dla danego użytkownika. Stosując podejście Simona Funka, można by użyć stochastycznego spadku gradientu, aby zminimalizować normę Frobeniusa między pełną macierzą a macierzą element po elemencie * użytkownik-użytkownik w połączeniu z terminem regularyzacji L2.

W praktyce, co ludzie robią z brakującymi wartościami z matrycy rekomendacji, co jest celem wykonywania obliczeń? Domyślam się, że po przeczytaniu posta na blogu Simona używa TYLKO brakujących terminów (które składają się (powiedzmy) ~ 1% matrycy rekomendacji) do zbudowania modelu (z pewnym rozsądnym wyborem hiperparametrów i regularyzacji) do przewidywania pozostałe 99% matrycy?

Czy w praktyce pomijasz te wszystkie wartości? A może wnioskujesz jak najwięcej PRZED wykonaniem stochastycznego spadku? Jakie są standardowe praktyki postępowania z brakującymi wartościami?

Vishal
źródło
1
Wydaje się, że to samo pytanie do tego . Odpowiedziałem tam na pytanie.
d_ijk_stra
2
Ja też odpowiedziałem .
Stumpy Joe Pete,
2
@d_ijk_stra „odpowiedział” stawia to hojnie za to, co stanowi link do pliku PDF
ali_m

Odpowiedzi:

6

Tak, w praktyce wartości te są pomijane. W twoim opisie w kategoriach normy Frobeniusa odpowiada to zminimalizowaniu składników normy, które można zmierzyć, tj. Tych, które mają znane oceny. Termin regularyzacji można postrzegać jako pierwszeństwo bayesowskie na elementach wektorów cech, przy czym SVD oblicza estymator maksymalnego prawdopodobieństwa, z zastrzeżeniem tego wcześniejszego i znanych wartości.

Prawdopodobnie najlepiej pomyśleć o SVD jako metodzie wnioskowania o brakujących wartościach. Jeśli masz już lepszy sposób na zrobienie tego, dlaczego potrzebujesz SVD? Jeśli tego nie zrobisz, SVD z przyjemnością wypełni twoje luki.

Martin O'Leary
źródło
1
Jak używasz SVD do wnioskowania o brakujących wartościach? Czy wypróbowałeś inne metody wnioskowania o brakujących wartościach, np. Użycie nie brakujących wartości do wyszkolenia klasyfikatora lasów losowych, którego można by następnie użyć do odgadnięcia brakujących wartości? Czy osiągasz lepsze wyniki, czy naprawdę zależy to od problemu?
Vishal
1
Wnioskujesz brakujące wartości w taki sam sposób, w jaki przewidywałbyś przyszłe wartości, używając odpowiednich składników rozkładu SVD. Prognozowanie przyszłych ocen to dokładnie ten sam problem, co wnioskowanie o brakujących wartościach. Jeśli masz dobry sposób na wywnioskowanie brakujących wartości, użyj tego, aby przewidzieć przyszłe oceny. Jeśli nie, to po to jest SVD.
Martin O'Leary
„Prawdopodobnie najlepiej myśleć o SVD jako metodzie wnioskowania o brakujących wartościach”. Ach, nie, tak naprawdę SVD zależy od użytkownika, aby wstępnie wywnioskować wszystkie brakujące wartości w inny sposób, przed uruchomieniem SVD. SVD w ogóle nic nie przypisuje.
Geoffrey Anderson
1

W praktyce, co ludzie robią z brakującymi wartościami z matrycy rekomendacji, co jest celem wykonywania obliczeń? Domyślam się, że po przeczytaniu posta na blogu Simona używa TYLKO brakujących terminów do budowy modelu.

Zgadza się - to jest cel jego i twojego modelu, aby przewidzieć brakujące warunki, prawda? Jest to kluczowa kwestia, o której wielu zapomina. Myślą, że mogą po prostu „założyć”, że przypisują stałą do brakujących danych bez opieki na świecie, a wszystko zacznie się magicznie wystarczająco dobrze z SVD. Kosz na śmieci, śmieci na śmieci: to prawda, i lepiej to obserwuj. Lepiej nie podawaj śmieciowych danych do modelu, jeśli chcesz uzyskać coś użytecznego.

Z pewnością NIE jest „najlepiej wnioskować o brakujących wartościach” w większości rzadkich zestawów danych, a następnie uruchamiać na nich SVD z pewną nadzieją na przypisanie ci wartości (które już przypisałeś przed uruchomieniem SVD, prawda?). Jak myślisz, model to magia? Nie ma magii ani technologii do przezwyciężenia większości śmieci. Nie możesz kłamać modelowi, że dane są prawdziwymi danymi, gdy w ogóle nie są prawdziwe, ale tak naprawdę tylko śmieci, które po prostu wymyśliłeś z powietrza.

SVD robi inne przydatne rzeczy, więc z pewnością nie twierdzę, że SVD jest co najmniej bezwartościowe. Śmiało, używaj SVD tylko dla kompletnych zestawów danych, być może, które inteligentnie przypisałeś brakującym wartościom już przy użyciu modelu uczenia maszynowego, zwracając szczególną uwagę na błąd odchylenia i błąd wariancji podczas jego opracowywania.

Uczenie maszynowe jest drogą. Jeśli więc nadal chcesz wiedzieć, jak przypisywać wartości za pomocą projektowania faktoryzacji macierzy, z pewnością istnieją dobre sposoby, aby to zrobić przy użyciu uczenia maszynowego, a co ważniejsze, nie przekazują żadnych niepotrzebnych danych do modelu z którego bezcelowo próbują się uczyć.

Dokładnie taki model faktoryzacji macierzy uczenia maszynowego jest dość dobrze prezentowany przez instruktorów kursu online Stanford Mining Massive Data Sets, w module 5. Pokazują matematykę i wyjaśniają model. Nie kodują tego jednak dla ciebie.

Jest w porządku, ponieważ możesz samodzielnie go kodować, jeśli rozumiesz podstawowe uczenie maszynowe. Czy wiesz, czym jest funkcja straty i funkcja kosztów? Regularyzacja? Spadek gradientu? Czy wszystko jest w porządku z pomnożeniem i dodaniem macierzy? Błąd odchylenia i błąd wariancji? Jeśli tak, to jesteś dobry. Jeśli nie, to powinieneś rozważyć kurs online Andrew Ng Machine Learning w Coursera, który jest jednym z wielu dobrych miejsc startowych. Następnie przejdź także na kurs online Mining Massive Data Sets, który mówi dokładnie o rozkładzie macierzy i uczeniu maszynowym do tworzenia modeli rekomendujących.

Wystarczy powiedzieć, że możesz całkowicie zaprojektować i zakodować własny model faktoryzacji, który bardzo dobrze radzi sobie z brakującymi danymi, tak jak zrobił to Simon Funk, i możesz to zrobić od zera, ale wcale nie jest tak trudno, jakby wrócił w jego czasach, ponieważ teraz możesz używać narzędzia takiego jak TensorFlow lub Microsoft CNTK, które wiele dla ciebie robią. Zdefiniuj funkcję straty i funkcję kosztów, wybierz optymalizator, podziel zestaw danych na szkolenie, twórz, testuj na podstawie danych, które są faktycznie dostępne (dane oznaczone) i pozwól mu działać. Poważnie, to działa. Nie jest to łatwe debugowanie TF i błędów budowania wykresów, ale w końcu może działać świetnie i zajmuje mniej niż jedną stronę kodu.

W szczególności jednym ze sposobów, aby nie podawać fałszywych danych do modelu uczenia maszynowego faktoryzacji macierzy, jest pominięcie elementów macierzy brakujących danych w funkcjach strat i kosztów .

Geoffrey Anderson
źródło
1

Istnieje teza, która dokonuje przeglądu wielu systemów rekomendacji i porównuje je, ale nie mówi o długoterminowym śledzeniu brakujących elementów, na przykład w celu przetestowania prognoz. To część twojego pytania? Używasz w ten sposób komponentu czasu? Wśród wielu prac i metod recenzje pracy magisterskiej obejmują systemy wrażliwe na czas / wrażliwe, takie jak badania w pracach Rendle. Jeśli twoje pytanie dotyczy również radzenia sobie z rzadkością danych, jest to również szczegółowo omówione w całej pracy i istnieje wiele metod. rzadkie macierze i imputacja zerami lub faktoryzacja macierzy, która dodaje macierz łączenia klastrów użytkowników (użytkowników, którzy oceniają przedmioty podobnie) lub macierz łączenia klastrów przedmiotów.

Tytuł pracy to „Modele niskiej rangi dla systemów rekomendujących z ograniczonymi informacjami preferencyjnymi” autorstwa Evgeny'ego Frolova https://www.skoltech.ru/app/data/uploads/2018/09/Frolov_Dissertation_Final1.pdf

nichole
źródło