Coding Diary.

(Machine Learning) one-hot encoding 본문

Coding/Machine Learning

(Machine Learning) one-hot encoding

life-of-nomad 2023. 9. 18. 08:49
728x90
반응형

머신 러닝에 사용되는 데이터는 크게 두 종류가 있습니다.

  • 수치형 (numerical) 데이터 : 나이, 몸무게, 키
  • 범주형 (categorical) 데이터 : 혈액형, 성별

많은 머신 러닝 알고리즘은 인풋 데이트, 즉 입력 변수의 값이 수치형 데이터여야 합니다. 선형 회귀에서 손실함수를 구하고, 경사 하강법을 적용하려면 인풋 데이터가 수치형 데이터여야 합니다. 그럼 범주형 데이터가 있을 때는 어떻게 해야 하는지 알아봅시다.

 

범주형 데이터를 수치형 데이터로 바꿔 주면 됩니다. 가장 먼저 떠오르는 방법은 1,2,3, 과 같은 자연수를 각 카테고리에 지정해주는 것입니다. 예를 들어 A형은 1, AB형은 2, B형은 3, O형은 4 이런 방식으로 데이터를 변환하는 것입니다. 이제 혈액형은 숫자 값을 가지게 되니가 입력 변수로 쓸 수 있습니다.

하지만 이렇게 데이터를 바꿔 주면 혈액형에 크고 작다는 개념이 생깁니다. 예를 들어 A형은 1이니까 가장 작고, O형은 4니까 가장 크다 라는 관계가 생기는 것입니다. 머신 러닝 알고리즘은 이런 엉뚱한 관계도 학습하기 때문에 오히려 예측에 방해가 될 수 있습니다.

 

그래서 범주형 데이터를 수치형 데이터로 바꿀 때는 이 방법을 사용하지 않고 One-hot encoding이라는 방법을 사용합니다. 

 

One-hot encoding은 각 카테고리를 하나의 새로운 열로 만들어 주는 방법입니다. 예를 들어 혈액형이라는 열에는 A,B,AB,B형 네 카테고리가 있으니까 이걸 4개의 새로운 열로 만들어 주는 방법입니다.

그 다음엔 주어진 데이터가 어떤 혈액형인지에 따라 새로운 열들의 값을 0또는 1로 채워줍니다. 처음 데이터 행은 B형이니까 B형 열을 1로, 그리고 나머지 열을 0으로 설정해주고, 다음 데이터 행은 O형이니까 O형 열을 1로, 나머지 열을 0으로 설정해 주는 것ㅇ비니다. 이제 이 열들은 0과 1, 두 값만 가지기 때문에 범주형 데이터에게 크고 작은 관계가 생기는 것을 막을 수 있는 것입니다.

결론적으로 one-hot encoding을 하면 범주형 데이터에게 크고 작음의 엉뚱한 관계가 생기는 걸 방지하면서도 수치형 데이터로 바꿔 줄 수 있게 되는 것입니다.

728x90
반응형