2011-07-26 18 views
6

Mam następujący problem:Algorytm do uzupełnienia uszkodzonej macierzy danych

Wyodrębniłem zestaw danych, ale część tych danych jest niedostępna lub ich brakuje; dla różnych przedmiotów zidentyfikowałem 10 parametry:

 param1 param2 ... param10 
Item 1 1220  N/A   1000 
Item 2 1300  200  ... 1000 
..  ...  ... 

item N N/A  1000 ...  200 

N ~ 1500 and half of the values are complete 

istnieje niejawna logika w tworzeniu przedmiotów, więc chciałbym, aby wypełnić te wartości z najlepszej możliwej wartości oczekiwanej.

Przykład:

Wyobraźmy sobie, masz 2 parametry i 3 pozycji.

 param1 param2 
item1 400 200 
item2 200 100 
item3 100  N/A 

Przy interpolacji liniowej będzie łatwo dostać param2 dla item3 = 50.

Mój pomysł:

Jak mam 10 parametrów i 1500 wartości, myślałem o robi PCA na covariance matrix z 750 elementów, które są kompletne (znalezienie główny kierunek zbioru danych).

PCA doprowadzi mnie do jednego głównego kierunku dla moich przedmiotów (największej wartości własnej) i podrzędnego kierunku dla podgrup przedmiotów (mniejsze wartości własne).

Chciałem wyświetlić na przykład wektory z brakującymi parametrami na głównym kierunku. aby uzyskać przybliżoną wartość brakujących parametrów.

Od mojego pierwszego przykładu:

 param1 param2 
item1 400 200 
item2 200 100 
item3 100  X ? 

kompletnej macierzy: macierzy

param1 param2 
item1 400 200 
item2 200 100 

kowariancji:

1 0.5 
    0.5 1 

eigen wektorów i Eigen wartości:

V1 i L1:

1 
1 associatedd to 1.5 

V2 i L2:

1 
-1 associated to 0.5 

wynik:

Gdybym projektu na Tylko V1 otrzymuję X1=100.

Jeśli wykonam projekt na l1.V1 + l2.V2, otrzymam X1=50. Jest tak dlatego, że istnieje idealna korelacja między pierwszymi 2 przedmiotami.


Więc moje pytanie:

tej pory to tylko teoria, że ​​nie zastosowano go jeszcze, ale zanim zacznę chciałbym wiedzieć, czy jadę gdzieś z tym.

Czy mogę zrobić lepiej? (Naprawdę uważam, że tak). Co mogę zrobić, jeśli wszystkie przedmioty mają jeden brakujący parametr? Skąd mam kierunek?

Czy są znane dobre algorytmy do wypełniania uszkodzonych matryc, czy możesz pomóc mi uzupełnić mój pomysł (zalecając mi dobre odczyty lub metody)?

Myślę, że Netflix używa tego rodzaju algorytmu do automatycznego wypełniania matrycy wyników filmowych (np. Problem z dolarem Netflix 1M).

Jeśli uważasz, że należy do innej witryny stosu, możesz ją przenieść.

Odpowiedz

1

Dlaczego nie używać prognoz numerycznych z uczenia maszynowego? W pierwszym przykładzie parametry są atrybutami, a elementy są instancjami. Dzięki niemu możesz wypróbować regresję liniową lub sieci neuronowe lub cokolwiek innego w ciągu kilku minut. Po szkoleniu otrzymasz kolejny równanie do pierwszego przykładu (param2 tutaj jest oznaczony jako klasa):

param2 = 0 + 1/2 * param1 

który jest dokładnie to, co chcesz.

Jeśli nie masz pewności, że relacje między parametrami są liniowe, zawsze możesz wypróbować inne rodzaje regresji (ANN, SVM, cokolwiek).

Do szybkiego uruchomienia użyj Weka. Konwertuj swoje dane do pliku CSV, załaduj go do Weka i zacznij grać. W przypadku prognoz numerycznych spójrz na zakładkę "Klasyfikacja".

+0

Masz rację, z powodu takiego problemu uczenie maszynowe może być dobrym podejściem. Spróbuję Weka. Dzięki –

2

This article Simon Simk opisuje użycie takiego podejścia do nagrody Netflix; być może właśnie o tym myślałeś, kiedy o tym wspomniałeś. W przeciwieństwie do twojego podejścia, obsługuje on brakujące dane. Istotą jest zastąpienie prostego użycia metod macierzowych w celu określenia rozkładu wartości osobliwych macierzy danych z mniej więcej równoważnym problemem optymalizacyjnym, który bardziej naturalnie odpowiada za brakujące dane.

+0

thx za odpowiedź. Muszę to uważnie przyjrzeć. Chyba rozumiem, jak możesz prawie rozwiązać netflix, który byłby wystarczający do tego, co muszę zrobić. –

1

Wypróbuj algorytm NIPALS. Jest to standardowa metoda z dziedziny "Chemometrii". Jest to metoda PCA zaprojektowana specjalnie dla brakujących danych. Następnie możesz ponownie wyświetlać swoje wyniki i ładowanie (t * p '), aby wypełnić luki zgodnie z modelem danych. Piękno tego podejścia polega na tym, że nie obciążasz danych poprzez imputację, po prostu używasz danych, które posiadasz. Spróbuj wyszukać dokumenty Herman lub Svante Wold, lub są implementacje w R i Matlab. Oczywiście im więcej brakujących danych, tym mniej wiarygodne są wyniki, ale w przypadku braku losowego można mieć dość duże ilości brakujących danych.

Legenda głosi, że Herman wymyślił algorytm, który ma na celu sklasyfikować konie wyścigowe w USA - ogromny problem z brakującymi danymi (jeśli się nad tym zastanowić, nie wszystkie konie się spotkają)!

Powiązane problemy