살콤아내 자기계발/파이썬

파이썬 머신러닝 완벽가이드 2주차 정리 (데이터 전처리 118pg~, )

살콤아내 2021. 4. 28. 12:54
728x90
반응형

파이썬머신러닝완벽가이드 118pg.py
0.00MB

 

 

118pg. 데이터 전처리 (Data Preprocessing)

- Null, NaN값(결손값)은 허용되지 않으므로 고정된 다른 값(평균값 등)으로 변환한다. Null값이 대부분이라면 해당 feature는 drop한다.

- 사이킷런 ML알고리즘은 문자열을 입력값으로 허용하지 않으므로 숫자형으로 변환하거나 불필요한 경우 삭제한다. (feature vectorization)

 

데이터 인코딩

- Label encoding: 카테고리 feature를 코드형 숫자값으로 변환 (1, 2, 3...)

- One Hot encoding: 고유 값에 해당하는 Column에만 1을 표시, 나머지는 0

 

 

Label Encoding

encoder는 클래스 LabelEncoder( )의 인스턴스다.

items안의 string 값의 unique한 값들을 모아 번호를 부여한다. (중복된 값 제거)

encoder에 items를 학습시킨다.

labels에는 학습된 encoder를 transform을 통해 변환값을 호출한다.

 

인코딩 클래스와 디코딩 원본 값을 프린트해보자

인코딩 클래스를 보면 TV=0, 냉장고=1 ....컴퓨터=5 임을 알 수 있다. (객체의 class_속성값)

참고) 레이블 인코딩은 category feature를 숫자값으로 변환하기 때문에 (숫자의 큼, 작음이 있어서 의도치 않은 가중치를 부여하게 됨) 선형회귀와 같은 ML알고리즘에는 적용하기 어렵다. (Tree계열의 ML알고리즘에는 적합)

 

 

One-Hot Encoding

위와 같은 레이블 인코딩의 문제점을 해결하고자 도입되었다. feature의 유형에 따라 새로운 feature를 추가하고 고유 값에 해당되는 칼럼에만 1을표시한다. (행 형태로 된 feature값을열 형태로 변환)

- OneHotEncoder 클래스로 변환 (단, 작업 전 모든 문자열 값이 숫자형 값으로 변환돼야 함. 2차원 데이터의 입력값이 필요함)

- 단점: column의 개수가 늘어나서 알고리즘 실행 속도가 느려진다.

 

 

124pg. 피처 스케일링과 정규화

Feature scaling: 서로다른 변수의 값 범위를 일정한 수준으로 맞추는 작업 (일반적인 의미의 표준화, 정규화)

-표준화 Standardization: x-mean(x)/stdev(x)  >>>변수가 평균0, 분산1인 가우시안 정규분포를 따름

*stedv 표준편차

-정규화 Normalization: x-min(x)/max(x)-min(x) >>>변수를 0~1의 값으로 변환

참고) 벡터정규화: 선형대수의 개념의 정규화 (사이킷런의 Normalizer 모듈에 적용)

 

 

참고) 모분산은 n으로 나누는데 표본분산을 n-1로 나누는 이유

표본을 셀렉(샘플링)할 때 모집단에 비해 약간의 어긋난 값이 있기 때문이다. 표본집단에서 구한 편차값은 n개로 나눌 경우 모집단에서 구한 편차값보다 더 작은 값이 나온다. n-1로 나눠주면서 모집단의 표준편차와 더 가까워지기 위해 피처스케일링을 하는 샘이다.

** 분산에서 평균값이 달라지면 표준편차가 크게 계산된다.

 

 

125pg. StandardScaler

표준화를 지원하는 클래스 (개별 피처를 평균0, 분산1 값으로 변환)

- 사이킷런 RBF커널을 이용하는 벡터머신, 선형회귀, 로지스틱회귀는 데이터가 가우시안 분포를 가지고 있다고 가정하고 구현

 

 

feature의 평균값은  -15승이므로 0.000000000169....이렇게 값이 나온다. 즉 평균을 0으로 볼 수 있다.

 

 

iris_df_scaled는 iris_scaled 즉, 표준화가 된 iris_df의 데이터프레임을 말한다.

 

 

127pg. MinMaxScaler

데이터값을 0~1 범위로 변환. (음수가 있으면 -1~1로 변환)

 

 

128pg. 학습데이터와 테스트데이터의 스케일링 변환 시 유의점

- fit( ), transform( ), fit_transform( ) 메소드를 이용

- 학습(train)데이터 세트로 scaler를 수행한 결과를 이용해 테스트데이터에 동일한 scaling적용을 해야 함.

 

질문) scaling을 처음 전체 데이터에 적용하면 안되는가? 

답) 데이터 전처리는 train_test_split하기 전에 모두 이루어지지 않는다. (train데이터는 전처리 대상이지만 test 데이터는 전처리 대상이 아님) 또한 데이터분석시 원본데이터를 사용할 수 있기 때문에 scaling을 처음부터 전체 데이터에 적용할 수 없다.

 

참고) scaling을 할 때 test데이터가 train데이터의 최소값 이하나 최대값 이상일 때 대부분의 경우 0, 1로 대체한다. (MixMaxScaler는 0~1사이의 값을 가지므로) 하지만 train데이터가 test데이터 값보다 index값이 많으므로 test데이터가 train데이터의 범위 밖을 나가는 경우는 별로 없다.

 

 

 

train데이터와 test데이터에 각각 다른 MinMaxScaler를 모델을 적용하면 Scale된 값이 맞지 않는다.

train데이터에서 1은 0.1로 scale되는데, test데이터에서 1은 0.2로 scale됨. 

train/test데이터는 동일한 scale된 값을 가져야 한다.

따라서 test_array에 scale 변환할 때에는 transform( ) 만으로 변환해야 한다.

 

 

 

 

 

728x90
반응형