Project/DACON: 건설기계 오일 상태 분류 AI 경진대회

Data Processing (2) Feature Scaling

문세희 2023. 1. 11. 23:48

Feature Scaling이란?

  • 서로 다른 변수의 값 범위를 일정한 수준으로 맞추는 작업이다.

Feature Scaling을 하는 이유는?

  1. 변수 값의 범위 또는 단위가 달라서 발생 가능한 문제를 예방할 수 있다.
  2. 머신러닝 모델이 특정 데이터의 편향성을 갖는 걸 방지할 수 있다.
  3. 데이터 범위 크기에 따라 모델이 학습하는 데 있어서 bias가 달라질 수 있으므로 하나의 범위 크기로 통일해주는 작업이 필요할 수 있다.

연속형 변수를 가진 피쳐들의 단위가 대부분 비슷하지만, 다른 단위가 섞여 있으므로 정규화를 진행하고, 범주형 변수를 가진 피쳐들은 label encoding을 진행해 주었다.

Scaling Code 작성

categorical_features = ['COMPONENT_ARBITRARY', 'YEAR']
# Inference(실제 진단 환경)에 사용하는 컬럼
test_stage_features = ['COMPONENT_ARBITRARY', 'ANONYMOUS_1', 'YEAR' , 'ANONYMOUS_2', 'AG', 'CO', 'CR', 'CU', 'FE', 'H2O', 'MN', 'MO', 'NI', 'PQINDEX', 'TI', 'V', 'V40', 'ZN']
all_X = train_dropmissing.drop(['ID', 'Y_LABEL'], axis = 1)
all_y = train_dropmissing['Y_LABEL']

test = test.drop(['ID'], axis = 1)

train_X, val_X, train_y, val_y = train_test_split(all_X, all_y, test_size=0.2, random_state=CFG['SEED'], stratify=all_y)
def get_values(value):
    return value.values.reshape(-1, 1)

for col in train_X.columns:
    if col not in categorical_features:
        scaler = MinMaxScaler()
        train_X[col] = scaler.fit_transform(get_values(train_X[col]))
        val_X[col] = scaler.transform(get_values(val_X[col]))
        if col in test.columns:
            test[col] = scaler.transform(get_values(test[col]))
            
le = LabelEncoder()
for col in categorical_features:    
    train_X[col] = le.fit_transform(train_X[col])
    val_X[col] = le.transform(val_X[col])
    if col in test.columns:
        test[col] = le.transform(test[col])

학습을 위해 훈련 세트와 검증 세트를 나누어 주고, 수치형 변수에는 정규화를, 범주형 변수는 label encoding을 진행해 주었다.