본문 바로가기
CODING/AI & ML & DL

[기계학습/데이터 전처리] 1. 데이터 실수화 & 데이터 변환 ( 표준화 / 정규화 )

by 밍톨맹톨 2020. 9. 12.
728x90
728x90

데이터 전처리란?

  •     데이터의 품질을 올리는 과정

하는 이유는 ?

  1.    컴퓨터가 이해할 수 있는 값으로 변환해 주기 위해서 
    • ex) 남성 ➡️ 0  , 여성 ➡️ 1
  2.  불완전한 데이터 제거
    • ex) NULL , NA , NAN 제거
  3. 잡음 섞인 데이터 제거
    • 가격 데이터에 ➖ 값 제거
    • 연령 데이터에 있는 큰 값 제거 ex) 200 , 300 •••
  4. 모순된 데이터 해결
    • ex) 남성인데 주민번호 뒷자리 시작이 2인 경우
  5. 불균형 데이터 해결
    • 클래스의 값이 너무 차이가 많이 나는 것을 해결
    • ex ) 🅰️ - 10000개 🅱️ - 100개 ➡️ 이런 상황을 해결하기 위해

 


데이터 전처리 기법 

🟢 데이터 실수화 ( Data vectorization )

- 범주형, 텍스트, 이미지 자료를 실수 형태로 전환하는 것

  • 자료의 유형 
    • 연속형 - 100-90점 89-80점  
    • 범주형 - A형 B형 O형 AB형
    • 텍스트 자료

1️⃣ 범주형 자료

1. one - hot encoding

표현하고 싶은 단어의 인덱스에 1의 값을 부여하고 다른 인덱스에는 0을 부여하는 방법

 

    2. scikit-learn / dictvectorizer 함수 사용

from sklearn.feature_extraction import DictVectorizer

DicVectorizer(sparse=False) ➡️ defalut값의 sparse = True

    ➖true로 하게 되면 위와 같이 [ 0, 0 ,1 , 10 ], •••처럼 화면에 나오지는 않지만 메모리를 줄일 수 있음

True로 하게 되면 이렇게 나옴

‼️ 여기서 나오는 sparse는 sparse matrix ( 희소 행렬 ) 에서 나온 것인데
희소 행렬이란 행렬의 값의 대부분 0인 경우를 말하는 것이고 
불필요한 0 값으로 메모리 낭비도 심하고 크기가 커서 연산 시 시간도 많이 소모된다
➡️ COO(coordinate : 좌표 ) 형식 & CSR(compressed sparse row) 형식으로 해결
🌿CSR표현식이 메모리가 더 적게 들고 빠른 연산이 가능하여 더 많이 쓰임

2️⃣ 텍스트형 자료

1. 단어 출현 횟수를 이용

‼️ 출현 횟수가 정보의 양과 비례하는 것이 아니기 때문에 자주 등장하여 분석에 의미를 갖지 못하는 것 ( The , a 등 ) 의 중요도를 낮춰야 함

     ▶️ TF - IDF ( Term Frequency Inverse Document Frequency) 이용

➡️ 여기까지는 그냥 등장 횟수를 샌 것 CountVectorizer을 이용 

from sklearn.feature_extraction.text import CountVectorizer

from sklearn.feature_extraction.text import CountVectorizer

➡️ 여기서 TF - IDF 을 사용해서 높은 빈도에 낮은 가중치, 낮은 빈도에 높은 가중치를 줌

from sklearn.feature_extraction.text import TfidfVectorizer

 

🔴  데이터 변환 ( Data Transformation )

 ✔️ 머신러닝데이터가 가진 특성들을 비교하여 데이터 패턴을 찾는데 데이터가 가진 특성 간에 정도 차이가 심하면 패턴을 찾는데 문제가 발생

 

1. 표준화 (standardization) 🔺 데이터 특성이 bell - shape 이거나 이상치가 있을 경우 유용

분모가 표준편차로 데이터가 평균으로부터 얼마나 떨어져 있는지로 나타내는 값

from sklearn.preprocessing import StandardScaler

 

2. 정규화 (normalization)    ✔️ 보통은 표준화보다 유용함

데이터의 상태적 크기에 대한 영향을 줄이기 위해 0 ~ 1 로 데이터 변환

from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()

 


여기까지 데이터 실수화와 변환이고 , 다음에는 데이터 균형, 데이터 통합, 데이터 정제 📝👩🏻‍💻

728x90

댓글