본문 바로가기
Machine Learning

One-Hot Encoding(원-핫 인코딩)

by ISLA! 2023. 8. 31.

 

One-Hot Encoding  : 예제 코드와 함께 간단히 리뷰

 

1. 원 핫 인코딩 시행

from sklearn.preprocessing import OneHotEncoder

ohe = OneHotEncoder()
train_encoded = ohe.fit_transform(train[['Position']]).toarray()
test_encoded = ohe.fit_transform(test[['Position']]).toarray()

print(train_encoded)
  • OneHotEncoder() 객체를 생성 : ohe

 

  • fit_transform() 메서드를 사용하여 학습 & 인코딩 수행
    ▶︎ train 데이터프레임의 Position 피처(feature)를 입력으로 넣음
    ▶︎ 단, OneHotEncoder는 2차원 배열을 입력으로 받아야 함
    ▶︎ toarray() 함수를 사용하여 희소행렬(Sparse Matrix)을 밀집 배열(Dense Array)로 변환
ohe.fit_transform(train[['Position']]) 결과는 희소 행렬(sparse matrix)로 반환되며,
이를 toarray() 메서드를 사용하여 밀집 행렬(dense matrix) 형태의 NumPy 배열로 변환
그 후, 이 결과를 train_encoded 변수에 저장

2. 원 핫 인코딩 결과를 데이터프레임으로 생성

원-핫 인코딩된 데이터를 가지고 새로운 데이터프레임을 생성하고, 열 이름(column names)을 설정

train_encoded_df = pd.DataFrame(train_encoded, columns=ohe.get_feature_names(['Position']))
test_encoded_df = pd.DataFrame(test_encoded, columns=ohe.get_feature_names_out(['Position']))

 

  • train_encoded는 'train' 데이터프레임의 'Position' 피처를 원-핫 인코딩한 결과를 가지고 있는 2차원 배열이다.
    이 배열을 활용하여 새로운 데이터프레임을 생성한다
  • columns 인자에는 get_feature_names_out() 함수를 이용하여 Position 인자를 전달
    • ohe.get_feature_names_out() 메서드를 사용하여 원-핫 인코딩된 열 이름을 가져온다
    • 여기서 ['Position'] 인자를 전달함으로써 기존 열 이름 Position에 접두어로 사용된다
    • 결과적으로, 원-핫 인코딩된 열 이름은 Position_범주값 형태로 생성된다

 

 

3. pd.concat() 함수를 사용하여 train, train_encoded_df 두 데이터프레임을 합치기

train = pd.concat([train, train_encoded_df], axis=1)
test = pd.concat([test, test_encoded_df], axis=1)
​
train.head()
728x90