2015-01-07 3 views
7

기계 학습 알고리즘을 적용하기 전에 데이터 세트에서 누락 된 값을 처리하는 방법 ??파이썬에서 기계 학습을 위해 누락 된 NaN을 처리하는 방법

나는 누락 된 NAN 값을 떨어 뜨리는 것이 현명하지 않다는 것을 알아 차렸다. 저는 보통 팬더를 사용하여 보간 (계산)을하고 일종의 데이터로 채우고 분류 정확도를 향상 시키지만 최선의 방법은 아닙니다.

여기는 매우 중요한 질문입니다. 데이터 세트에서 누락 된 값을 처리하는 가장 좋은 방법은 무엇입니까?

예를 들어이 데이터 세트를 보면 30 %만이 원래 데이터를 가지고 있습니다.

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

"데이터 세트에서 누락 된 값을 처리하는 가장 좋은 방법은 무엇입니까?" 이 질문에 대한 대답은 상황에 따라 다르며 의견을 기반으로한다고 주장 할 것이다. – CoryKramer

+0

누락 된 값이있는 행은 삭제할 수 있지만 성능이 저하되거나 누락 된 값을 예측에 영향을주지 않는 값으로 설정할 수 있지만 누락 된 값이 많으면 실제 모델에 비뚤어 질 수 있습니다. . 평균/중간 값을 사용할 수 있지만 모든 접근법의 성능을 측정하고 무엇이 가장 좋은지를 확인해야합니다. 이는 해당 기능에 어떤 가치가 있는지 그리고 어떤 모델을 선별 했느냐에 달려 있습니다 – EdChum

답변

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

더 좋은 방법이있다, 각 솔루션/알고리즘 (그리고 당신도 함께 자신의 전략과 조정을 만드는 데 그 중 일부를 혼합 할 수있는 관련 파라미터를 마련하기 위해 자신의 장점과 단점이 없습니다 귀하의 데이터를 가장 잘 만족 시키십시오,이 주제에 관한 많은 연구/논문이 있습니다). 예를 들어

평균 전가 빠르고 간단하지만 분산을 과소 것이고 KNN 전가 큰 데이터 세트에 적합하지 않을 수있는 반면 분포 형상은 평균값과 NaN를 대체함으로써 왜곡 모든 데이터 요소를 반복하고 각 NaN 값에 대해 계산을 수행하므로 NaN 속성이 다른 속성과 상호 연관된다는 점에서 시간 복잡성 측면에서 매우 중요합니다. 외에도

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

당신은 또한 K-가장 가까운 이웃 전가회귀 전가 한 번 봐 걸릴 수 있습니다, 당신이 언급 전가를 의미하고, 기존의 API를 확인하기 위해 scikit-learn에 강력한 Imputer 클래스를 참조 사용.

KNN 전가는

이 NaN이 지점의 K 가장 가까운 이웃의 평균을 계산합니다.

회귀 전가

회귀 모형은 다른 변수에 기초하여 변수의 관측 값을 예측하는 것으로 추정되고, 그 모델은 그 변수가없는 곳의 경우에 값을 전가하는 데 사용된다.

Here scikit의 '누락 값의 대체'는 섹션으로 연결됩니다. 나는 또한 돌연변이를위한 Orange 라이브러리에 대해 들었지만 아직 사용하지는 못했습니다.

2

누락 된 데이터를 처리하는 유일한 방법은 없습니다. 가장 엄격한 접근법은 빠진 값을 PyMC와 같은 확률 적 프레임 워크에서 추가 매개 변수로 모델링하는 것입니다. 이 방법을 사용하면 단일 답변 대신 가능한 값으로 분배 할 수 있습니다.다음은 PyMC를 사용하여 누락 된 데이터를 처리하는 예입니다. http://stronginference.com/missing-data-imputation.html

실제로 예상치와 함께 구멍을 연결하려면 "대체"를 수행해야합니다. 나는 그들이 진짜로 당신의 특징의 공동 분배를 도살하기 때문에 평균 채우기와 같은 단순한 대체 방법을 피하려고한다. 대신 softImpute과 같은 것을 시도해보십시오 (낮은 순위의 근사값을 통해 누락 된 값을 추측 해 봅니다). softImpute의 원본 버전은 R 용으로 작성되었지만 kNN 대체와 같은 다른 방법과 함께 Python 버전을 만들었습니다. https://github.com/hammerlab/fancyimpute