2009-07-23 26 views
7

Mam bazę danych, składającą się z całej gamy rekordów (około 600 000), gdzie w niektórych rekordach brakuje niektórych pól. Moim celem jest znalezienie sposobu przewidywania, jakie wartości powinny być (aby móc je wypełnić) na podstawie istniejących danych.Przewidywanie brakujących wartości danych w bazie danych

Jedną z opcji, której szukam, jest tworzenie klastrów - tj. Reprezentowanie rekordów, które są kompletne jako punkty w przestrzeni, wyszukiwanie klastrów punktów, a następnie podanie rekordu z brakującymi wartościami danych pozwala sprawdzić, czy istnieją wszelkie klastry, które mogą należeć do tego, są zgodne z istniejącymi wartościami danych. Może to jednak nie być możliwe, ponieważ niektóre pola danych mają nominalną skalę (na przykład kolor) i dlatego nie można ich uporządkować.

Inną ideą, którą miałem, było stworzenie pewnego rodzaju probabilistycznego modelu, który przewidywał dane, szkolił je na istniejących danych, a następnie używał go do ekstrapolacji.

Jakie algorytmy są dostępne, aby wykonać powyższe czynności, i czy istnieje dowolne dostępne oprogramowanie, które implementuje te algorytmy (To oprogramowanie będzie w C# przy okazji).

+2

Ogromny problem. Bardzo zależy od wielu rzeczy, których nie możemy przewidzieć. Najprostsza instancja: czy są jakieś błędy dotyczące selekcji, w których rekordy mają brakujące pola? Skąd wiesz? Co możesz z tym zrobić? Czy są dostępne wskaźniki proxy? I tak dalej ... – dmckee

+1

Zgadzam się z powyższym komentarzem. Mogą istnieć pewne ogólne algorytmy, których możesz użyć, ale musisz dostosować każdy z nich do swojej domeny. – job

Odpowiedz

7

Radzenie sobie z brakującymi wartościami jest metodyczny wątpliwości, że ma do czynienia z rzeczywistym rozumieniu dane.

kilka metod można użyć (szczegółowy post on my blog):

  1. Ignoruj ​​wiersz danych. Zwykle robi się to, gdy brakuje etykiety klasy (zakładając, że celem eksploracji danych jest klasyfikacja) lub w danym wierszu brakuje wielu atrybutów (nie tylko jednego).Oczywiście uzyskasz niską wydajność, jeśli procent takich wierszy jest wysoki. Aby uzyskać brakujące wartości, należy wypełnić stałą globalną, aby uzyskać wartość procentową takich wierszy:

  2. Podobnie jak "nieznany", "N/A" lub minus nieskończoność. Jest to używane, ponieważ czasami nie ma sensu próbować przewidywania brakującej wartości. Na przykład, jeśli masz DB, jeśli, powiedzmy, kandydaci na studia i miejsce zamieszkania jest niedostępne dla niektórych, wypełnienie go nie ma większego sensu ...

  3. Użyj atrybutu oznacza. Na przykład, jeśli średni dochód amerykańskiej rodziny wynosi X, możesz użyć tej wartości do zastąpienia brakujących wartości dochodu.

  4. Użyj średniej atrybutu dla wszystkich próbek należących do tej samej klasy. Powiedzmy, że masz DB wyceny samochodów, które, między innymi, klasyfikuje samochody do "luksusu" i "niskiego budżetu" i masz do czynienia z brakującymi wartościami w polu kosztów. Wymiana brakuje koszt luksusowego samochodu z przeciętnego kosztu wszystkich luksusowych samochodów jest prawdopodobnie bardziej dokładne wówczas wartość chcesz uzyskać, jeśli czynnikiem w niskich samochodach budżetowych

  5. Zastosowanie algorytmu eksploracji danych do przewidywania wartości. Wartość można określić za pomocą regresji, narzędzi opartych na wnioskach z użyciem formalizmu baysiańskiego, drzew decyzyjnych, algorytmów grupowania używanych do generowania danych wejściowych dla metody krokowej nr 4 (K-Mean \ Median itp.). Proponuję najpierw sprawdzić regresję i drzewa decyzyjne (Generowanie drzewa ID3), ponieważ są stosunkowo łatwe i istnieje wiele przykładów w sieci.

Jeśli chodzi o pakiety, jeśli możesz sobie na to pozwolić, a Ty korzystasz z usług Microsoft SQL Server Analysis Services (w skrócie SSAS), które implementują większość wyżej wymienionych.

Oto kilka linków do swobodnego Górnictwo danych pakietów oprogramowania:

Chociaż nie C#, że jest to całkiem dobry wstęp do drzew decyzyjnych i nauki baysian (przy użyciu Ruby): http://www.igvita.com/2007/04/16/decision-tree-learning-in-ruby/ http://www.igvita.com/2007/05/23/bayes-classification-in-ruby/

Jest też biblioteka ta Ruby, które uważam za bardzo przydatne (również w celach edukacyjnych): http://ai4r.rubyforge.org/machineLearning.html

Nie powinno być mnóstwo próbek do tych algorytmów online w dowolnym języku, więc jestem pewien, że będziesz C# łatwo znaleźć rzeczy też ...

edycja:

pamiętasz to w moim oryginalnym poście. Jest to zdecydowanie MUSI MIEĆ, jeśli grasz z eksploracją danych ... Pobierz Microsoft SQL Server 2008 Data Mining Add-ins for Microsoft Office 2007 (Wymaga to usług SQL Server Analysis Services - SSAS - która nie jest darmowa, ale możesz pobrać wersję próbną).

Umożliwi to łatwą grę i wypróbowanie różnych technik w programie Excel przed samodzielnym wdrożeniem.Z drugiej strony, ponieważ jesteś w ekosystemie Microsoftu, możesz nawet zdecydować się na rozwiązanie oparte na SSAS i liczyć na facetów SQL Server, aby to zrobić dla ciebie :)

2

Przewidywanie brakujących wartości jest generalnie uważane za część fazy czyszczenia danych, którą należy wykonać przed dalszą eksploracją danych lub ich analizą. Jest to dość widoczne w danych rzeczywistych.

Proszę spojrzeć na tego algorytmu http://arxiv.org/abs/math/0701152

Obecnie Microsoft SQL Server Analysis Services 2008 jest również wyposażony w algorytmy jak te http://technet.microsoft.com/en-us/library/ms175312.aspx które pomagają w modelowaniu predykcyjnej atrybutów.

okrzyki

+0

Nice. Ale wydaje się, że praca ta zakłada domyślne założenie, że nie ma stronniczości wyboru. Czy też coś mi umknęło? – dmckee

6

Jest mniej algorytmiczne i bardziej filozoficznej i metodologicznej pytanie. Dostępnych jest kilka różnych technik rozwiązywania tego typu pytań. Acock (2005) daje dobre wprowadzenie do niektórych metod. Chociaż może się wydawać, że w grę wchodzi wiele matematyki/statystyk (i może się wydawać, że jest to dużo wysiłku), warto zastanowić się, co by się stało, gdybyś zawiódł. blog

Andrew Gelman jest również dobrym źródłem informacji, chociaż funkcjonalność wyszukiwania na swoim blogu pozostawia wiele do życzenia ...

nadzieję, że to pomaga.


Acock (2005)

blog

http://oregonstate.edu/~acock/growth-curves/working%20with%20missing%20values.pdf

Andrew Gelman za

http://www.stat.columbia.edu/~cook/movabletype/mlm/

Powiązane problemy