[AI] Feature 전처리(범주형 : Encoding, 연속형 : Feature Scaling) : Scikit-Learn

Ik·2022년 7월 16일
0

Data

목록 보기
4/34

Feature Type

Categorical : 범주형

  • 대상값들이 서로 떨어진 값을 가지는 변수. 대부분 몇 개의 범주 중 하나에 속하는 값들로 구성되어 어떤 분류에 대한 속성을 가진다
  • 종류
    • 명목(Norminal)/비서열(Unordered)
    • 순위(Ordinal)/서열(Ordered)

Continuous : 연속형

  • 대상 값들이 서로 연속된 값을 가지는 변수
  • 종류
    • 등간(Interval)
    • 비율(Ratio)

Feature 전처리

Categorical : 범주형

  • ML 알고리즘은 숫자(정수/실수)만 처리 가능
    • 범주형인 경우 숫자형으로 변환
    • 단순 문자열인 경우 일반적으로 제거
    • 종류
      • Label Encoding
        • 숫자의 차이가 모델에 영향을 주지 않는 경우
        • 변환 대상이 같은 경우는 같은 모델 객체로 학습 가능
        from sklearn.preprocessing import LabelEncoder  
         # 변환기(Transformer) 객체 생성 -> LabelEncoder(), 객체에 Label Encoding 결과 저장
         encoder = LabelEncoder()  
         # 어떻게 변환할지 학습 - fit(학습(=변환)할 대상), labeling = 학습
         encoder.fit(items)  
         # 변환 - transform(변환대상)
         labels = encoder.transform(items)
        fit() # 어떻게 변환할 지 학습, 내 생각에는 변환할 대상이라 생각하면 될 것 같다
         transform() # 문자열를 숫자로 변환
         fit_transform() # 학습과 변환을 한번에 처리
         inverse_transform() # 숫자를 문자열로 변환
         classes_ # 인코딩한 클래스 조회
      • One-Hot Encoding
        • N개의 클래스를 N 차원의 One-Hot 벡터로 표현되도록 변환
          • 고유값들을 피처(컬럼)로 만들고 정답에 해당하는 열은 1로 나머진 0으로 표시
            • Sparse Matrix : DecisionTree 계열의 알고리즘에서 Feature에 0이 많은 경우
        from sklearn.preprocesing import OneHotEncoder
        oh_encoder = OneHotEncoder(sparse=False)  
        # sparse=True : 1인 index들만 반환
        # sparse=False : ndarray형태로 2차원 형태(0과 1 모두 표시되어있는)로 반환
        oh_encoder.fit(items[...,np.newaxis])   # 2차원 형태로 입력해줘야하기 때문
        r = oh_encoder.transform(items[...,np.newaxis])
        get_feature_names_out()   # 원핫인코딩으로 변환된 컬럼의 이름을 반환
        • pandas get_dummies()이용해서 Encoding한 경우
        pd.get_dummies(dataframe)   # df 전체
        pd.get_dummies(dataframe, columns=['A', 'B'])  # 특정 열 선택해서 encoding

Continuous : 연속형

  • 학습하는데 있어 각 Feature들의 값의 범위가 다를 경우 가중치 영향력이 상이해 학습에 적절하지 않은 영향 있을 수 있다. 대부분의 모델이 영향을 받기 때문에 각 Feature들의 범위를 일정한 범위로 맞추는 작업이 필요하다
    • Feature Scaling(정규화) : 위에서 언급한 작업
      • 두 가지 중 선택에 대해 결정 조건 미비, data보고 확인해야되는데 처리 이전에 data를 볼 수 없기에 둘 다 해보고 비교를 통해 선정
  • 종류
    • Standardization : 표준화
      • 평균 0, 표준편차 1인 범위에 있도록 변환 ==> 0을 기준으로 모든 데이터들이 모여있게 된다
    from sklearn.preprocessing import StandardScaler
     # standardScaler 객체 생성
     stn_scaler = StandardScaler()
     # 학습시키기 -> data의 평균과 표준편차
     stn_scaler.fit(data)
     result = stn_scaler.transform(data)
    • Min Max Scaling
      • Dataset의 값들을 0(Min value)~1(Max value) 사이의 값으로 변환
    from sklearn.preprocessing import MinMaxScaler
    # 객체 생성
    mm_scaler = MinMaxScaler()
    # 학습 - 최소/최대값을 계산
    mm_scaler.fit(data)
    # 변환
    result = mm_scaler.transform(data)
    # 학습, 변환 한번에
    result2 = mm_scaler.fit_transform(data)

0개의 댓글