본문 바로가기

오늘의 코딩/Python3

[4강] 좋은 훈련 세트 만들기 : 데이터 전처리

1. 누락된 데이터 제거.대체하기

일반적으로 누락된 값은 NaN이나 NULL으로 채워짐.

(1)누락된 데이터 확인하기 :

.isnull 메서드: 셀이 수치값을 담고 있다면 0 누락되어있다면 1이 채워진 DataFrame을 반환.

 

데이터프레임.isnull()

 

isnull().sum() 메서드와 isnull() 메서드 비교

(2)누락된 데이터 제외

dropna 메서드:

 

df.dropna(axis=0/1)    # 0:행삭제 1:열삭제

df.dropna(how='all')    # 모든 열이 NaN일 때만 행을 삭제합니다. 

df.dropna(thresh=4)    # 실수 값이 4개보다 작은 행을 삭제합니다

df.dropna(subset=['C']) #특정 열에 NaN이 있는 행만 삭제합니다(여기서는 ‘C’열).

 

(3)누락된 값 대체

Imputer 클래스 -평균으로 대체함

Imputer(missing_values='대체할 값', strategy='대체할 계산법',axis=0)     #axis = 0:열 / 1:행

  -대체할 값: NaN , NULL

  -대체할 계산법: mean, median, most_frequent 등

 

(4)사이킷런 추정기 API 입력기

Imputer: 변환기 클래스

fit 메서드 : 훈련 데이터에서 모델 파라미터를 학습한다.

transform 메서드 : 학습한 파라미터로 데이터를 변환한다.

 

2. 머신러닝 알고리즘을 위해 범주형 데이터 변환

순서가 있는 특성과 순서가 없는 특성을 구분해야 한다.

 

(1) 순서 특성 매핑

-순서에 따른 특성간 산술적 차이에 맞춰 맞춰 범주형 문자열 값을 정수로 바꿔야 한다.

ex. 'XL':3, 'L':2, 'M':1

 

-대부분의 분류 추정기는 자체적으로 클래스 레이블을 정수로 변환해주지만 사소한 실수를 방지하기 위해 클래스 레이블을 정수 배열로 전달하는 것이 좋다.

(! 클래스 레이블은 순서가 없다!)

    1)enumerate-map

    2)LableEncoder 클래스

 

(2) 순서가 없는 특성 : 원-핫 인코딩 적용

목적:

순서가 없는 특성을 정수로 인코딩하면, 학습 알고리즘은 값의 크기를 비교할 것이다.

이를 해결하기 위해 원-핫 인코딩 기법을 이용한다. 

방식:

순서 없는 특성에 들어있는 고유한 값마다 새로운 더미 특성을 만드는 것.(?)

 

OneHotEncoder(categorical_features=[열 위치])

 

 

 

3. 모델과 관련이 높은 특성 선택하기

 

(1)데이터셋을 훈련 세트와 테스트 세트로 나누기

 

train_test_split( 변수1 , 변수2 , test_size=테스트 세트 비율 , random_state = 0 , stratify = 클래스 레이블 )

변수 1: 특성 열 ,변수 2 :클래스 레이블 열

stratify = 클래스 레이블 열에 있는 원소의 비율과 테스트 세트 내부의 원소 비율을 같게 설정

 

 

(2)특성 스케일 맞추기

결정 트리와 랜덤 포레스트는 특성 스케일 조정을 할 필요 없음.

대부분의 머신 러닝과 최적화 알고리즘은 특성의 스케일이 같을 때 성능이 좋다.

(예: 아달린의 제곱 오차 함수, K-최근접 이웃(KNN) 등.)

 

-정규화: 특성의 스케일을 [0,1]의 범위에 맞추는 것

최소-최대 스케일 변환

 

-표준화 : 특성의 평균을 0에 맞추고 표준 편차를 1로 만들어 정규 분포와 같은 특징을 가지도록 한다.

이상치 정보가 유지되므로 알고리즘이 이상치에 덜 민감하다.

 

(3) 유용한 특성 선택

과대적합을 방지하기 위해 

더 많은 훈련 데이터를 모으거나

규제를 통해 복잡도를 제한하거나

파라미터 개수가 적은 간단한 모델을 선택하거나

데이터 차원을 줄인다.

 

(3.1) 규제 : 개별 가중치 값을 제한하여 모델 복잡도를 줄이고 일반성을 띄게 한다.

 

L1 규제Lasso : 규제 함수가 1차항

 

L2 규제Ridge : 규제 함수가 2차항

 

참고 블로그: https://dailyheumsi.tistory.com/57

 

L1, L2 Regularization (Lasso, Ridge)

머신러닝을 위한 파이썬 워밍업에서 Linear Regression 파트를 공부하며 복습한 내용을 적어본다. Overfitting 의 문제 Regularization 이라는 문제에 앞서 항상 먼저 나오는게 overfitting 이슈다. 기술 관련 이..

dailyheumsi.tistory.com

"(L1이) 이게 어떤 효과를 불러일으키냐면,

W가 계속해서 업데이트 해나갈 때, W의 원소인 어떤 wi 는 0 이 되도록 한다. 

왜냐하면 계속해서 특정상수를 빼나가기 때문이다.

따라서, L1은 영향을 크게 미치는 핵심적인 피처 xi 들만 반영하도록 한다."


"즉, 위의 Lasso 같이 일부 항의 계수를 0으로 만들어버리지는 않고, 

전체적인 wi 값의 절대값을 감소시켜 덜 구불구불하게 하는 것이다.

Lasso 보다는 좀 더 구불구불하지만, 일반 GD 보다는 덜 구불구불한 느낌의 그래프를 갖는다."

 

(3.2) 데이터 차원을 줄인다.

순차 특성 선택 알고리즘

규제가 없는 모델에서 유용하다.

특성 선택특성 추출이 있다. 특성 선택은 원본 특성에서 일부를 선택하고 특성 추출은 일련의 특성에서 얻은 정보로 새로운 특성을 만든다.

 

순차 특성 선택 알고리즘(순차 후진 선택SBS):

d차원의 공간을 k<d인 k차원의 공간으로 축소한다.

주어진 문제에 가장 관련이 높은 특성 부분 집합을 자동으로 선택한다.

각 단계에서 제거할 특성은 기준 값이 가장 큰 특성으로, 제거했을 때 성능 손실이 최대가 되는 특성을 제거한다.