2015-01-07 12 views
7

Jak radzić sobie z brakującymi wartościami w zestawach danych przed zastosowaniem algorytmu uczenia maszynowego ??.Jak radzić sobie z brakami NaN w uczeniu maszynowym w pythonie

Zauważyłem, że nie jest mądrze rzucić brakujące wartości NAN. Zwykle robię interpolację (średnia obliczeniowa) za pomocą pand i uzupełniam dane, które są rodzajem pracy i poprawiają dokładność klasyfikacji, ale może nie być najlepszą rzeczą do zrobienia.

Oto bardzo ważne pytanie. Jaki jest najlepszy sposób na obsługę brakujących wartości w zestawie danych?

Na przykład, jeśli widzisz ten zestaw danych, tylko 30% ma oryginalne dane.

Int64Index: 7049 entries, 0 to 7048 
Data columns (total 31 columns): 
left_eye_center_x   7039 non-null float64 
left_eye_center_y   7039 non-null float64 
right_eye_center_x   7036 non-null float64 
right_eye_center_y   7036 non-null float64 
left_eye_inner_corner_x  2271 non-null float64 
left_eye_inner_corner_y  2271 non-null float64 
left_eye_outer_corner_x  2267 non-null float64 
left_eye_outer_corner_y  2267 non-null float64 
right_eye_inner_corner_x  2268 non-null float64 
right_eye_inner_corner_y  2268 non-null float64 
right_eye_outer_corner_x  2268 non-null float64 
right_eye_outer_corner_y  2268 non-null float64 
left_eyebrow_inner_end_x  2270 non-null float64 
left_eyebrow_inner_end_y  2270 non-null float64 
left_eyebrow_outer_end_x  2225 non-null float64 
left_eyebrow_outer_end_y  2225 non-null float64 
right_eyebrow_inner_end_x 2270 non-null float64 
right_eyebrow_inner_end_y 2270 non-null float64 
right_eyebrow_outer_end_x 2236 non-null float64 
right_eyebrow_outer_end_y 2236 non-null float64 
nose_tip_x     7049 non-null float64 
nose_tip_y     7049 non-null float64 
mouth_left_corner_x   2269 non-null float64 
mouth_left_corner_y   2269 non-null float64 
mouth_right_corner_x   2270 non-null float64 
mouth_right_corner_y   2270 non-null float64 
mouth_center_top_lip_x  2275 non-null float64 
mouth_center_top_lip_y  2275 non-null float64 
mouth_center_bottom_lip_x 7016 non-null float64 
mouth_center_bottom_lip_y 7016 non-null float64 
Image      7049 non-null object 
+4

"Jaki jest najlepszy sposób radzenia sobie z brakującymi wartościami w zestawie danych?" "I twierdził, że odpowiedź na to pytanie jest zarówno zależna od sytuacji, jak i oparta na opiniach. – CoryKramer

+0

Można albo upuścić wiersze, które mają brakujące wartości, ale może to zmniejszyć wydajność, albo ustawić brakujące wartości na pewną wartość, która nie ma wpływu na przewidywanie, ale może to nadal być przekrzywione dla modelu, jeśli masz wiele brakujących wartości, to naprawdę zależy . Możesz użyć średniej/mediany, ale będziesz musiał zmierzyć wydajność wszystkich podejść i zobaczyć, co jest najlepsze, zależy to od tego, czy w tych funkcjach jest jakaś wartość i jaki model wybierzesz – EdChum

Odpowiedz

9
What is the best way to handle missing values in data set? 

nie ma najlepszego sposób, każde rozwiązanie/algorytm ma swoje wady i zalety (a można nawet mieszać niektóre z nich razem, aby stworzyć własną strategię i dostroić odnośne parametry wymyślić jedną najlepiej zaspokoić swoje dane, istnieje wiele badań/artykułów na ten temat).

Na przykład Mean Przypisanie jest szybkie i proste, ale byłoby lekceważyć wariancji i kształt dystrybucja jest zniekształcony poprzez zastąpienie NaN o wartości średniej, natomiast KNN Przypisanie może nie być idealne w dużym zbiorze danych pod względem złożoności czasu, ponieważ iteruje on po wszystkich punktach danych i wykonuje obliczenia dla każdej wartości NaN, a założeniem jest, że atrybut NaN jest skorelowany z innymi atrybutami.

How to handle missing values in datasets before applying machine learning algorithm?? 

Oprócz oznaczać przypisania wspomniałeś, można też spojrzeć na K-Najbliższy sąsiad imputacja i regresji imputacja, oraz zapoznać się z potężną Imputer klasie scikit-learn sprawdzić istniejące API używać.

KNN Przypisanie

Oblicz średnią k najbliższych sąsiadów niniejszego punktu Nan.

regresji Przypisanie

modelu regresji szacuje się przewidzieć zaobserwowanych wartości zmiennej opartej na innych zmiennych, i że model jest następnie używany do przypisania wartości w przypadkach, w których ta zmienna nie brakuje.

Here Łącza do sekcji 'scikit' Implantacja brakujących wartości '. Słyszałem też o bibliotece Orange dla imputacji, ale jeszcze nie miałem okazji jej użyć.

2

Nie ma jednego najlepszego sposobu radzenia sobie z brakującymi danymi. Najbardziej rygorystyczne podejście polega na modelowaniu brakujących wartości jako dodatkowych parametrów w ramach probabilistycznej, takiej jak PyMC. W ten sposób otrzymasz dystrybucję możliwych wartości zamiast jednej odpowiedzi.Oto przykład radzenia sobie z brakującymi danymi przy użyciu PyMC: http://stronginference.com/missing-data-imputation.html

Jeśli naprawdę chcesz podłączyć te otwory za pomocą estymacji punktowej, to chcesz wykonać "imputację". Odwróciłem się od zwykłych metod imputacji, takich jak średnie wypełnienie, ponieważ w rzeczywistości zajmują się wspólną dystrybucją twoich funkcji. Zamiast tego spróbuj czegoś takiego, jak softImpute (który próbuje określić brakującą wartość poprzez przybliżenie niskiego poziomu). Oryginalna wersja softImpute jest napisana dla R, ale stworzyłem wersję Pythona (wraz z innymi metodami, takimi jak imputacja kNN) tutaj: https://github.com/hammerlab/fancyimpute

Powiązane problemy