다중 범주 형 변수에 대해 원-핫 인코딩을 수행하는 방법

소스 노드 : 841101

이 기사에서는 기능 엔지니어링 기술인 One Hot Encoding을 사용하여 다중 범주형 변수를 처리하는 방법에 대해 알아봅니다.

하지만 계속 진행하기 전에 기능 엔지니어링과 One Hot Encoding에 대해 간략하게 논의하겠습니다.

기능 공학

따라서 Feature Engineering은 문제에 대한 도메인 지식을 사용하여 원시 데이터에서 특징을 추출하는 프로세스입니다. 이러한 기능은 기계 학습 알고리즘의 성능을 향상시키는 데 사용될 수 있으며 성능이 향상되면 최고의 정확도를 제공합니다. 또한 기능 엔지니어링은 응용 기계 학습과 동일하다고 말할 수 있습니다. 기능 엔지니어링은 좋은 모델과 나쁜 모델 사이에 큰 차이를 만드는 기계 학습에서 가장 중요한 기술입니다. 이는 모든 데이터 과학 프로젝트 수명 주기의 세 번째 단계입니다.

기계 학습 모델의 투명성 개념은 모델마다 서로 다른 종류의 데이터에 대해 서로 다른 접근 방식이 필요한 경우가 많기 때문에 복잡한 것입니다. 와 같은:-

  • 연속 데이터
  • 범주 기능
  • 결 측값
  • 표준화
  • 날짜 및 시간

그러나 여기서는 범주형 기능만 논의하겠습니다. 범주형 기능은 데이터 유형이 개체 유형인 기능입니다. 모든 범주형 특성의 데이터 포인트 값은 숫자 형식이 아니라 개체 형식이었습니다.

범주형 변수를 처리하는 방법에는 여러 가지가 있으며 그 중 일부는 다음과 같습니다.

  • 라벨 인코딩 또는 서수 인코딩
  • 원 핫 인코딩
  • 더미 인코딩
  • 효과 인코딩
  • 바이너리 인코딩
  • 바젤 인코딩
  • 해시 인코딩
  • 대상 인코딩

따라서 여기서는 One Hot Encoding의 범주형 기능을 다루므로 먼저 One Hot Encoding에 대해 설명하겠습니다.

하나의 핫 인코딩

범주형 변수에는 숫자 값이 아닌 레이블 값이 포함되어 있다는 것을 알고 있습니다. 가능한 값의 수는 고정된 세트로 제한되는 경우가 많습니다. 범주형 변수는 흔히 명목형 변수라고 합니다. 많은 기계 학습 알고리즘은 레이블 데이터에서 직접 작동할 수 없습니다. 모든 입력 변수와 출력 변수는 숫자여야 합니다.

이는 범주형 데이터를 숫자 형식으로 변환해야 함을 의미합니다. 범주형 변수가 출력 변수인 경우 모델에 의한 예측을 다시 범주형 형식으로 변환하여 이를 표시하거나 일부 애플리케이션에서 사용할 수도 있습니다.

예를 들면 성별에 대한 데이터는 다음과 같은 형식입니다. '남성''여성'.

그러나 원-핫 인코딩을 사용하는 경우 모델이 카테고리 간 자연스러운 순서를 가정하도록 인코딩하고 허용하면 성능이 저하되거나 예상치 못한 결과가 발생할 수 있습니다.

원-핫 인코딩은 정수 표현에 적용될 수 있습니다. 여기에서 정수로 인코딩된 변수가 제거되고 각 고유 정수 값에 대해 새 이진 변수가 추가됩니다.

예를 들어 색상 변수를 인코딩합니다.

빨간색  푸른 색
0 1
1 0
0 1

이제 우리는 여행을 시작하겠습니다. 첫 번째 단계에서는 주택 가격 예측 데이터 세트를 사용합니다.

데이터 세트

여기서는 면적에 따른 주택 가격 예측에 사용되는 house_price 데이터 세트를 사용하겠습니다.

주택 가격 예측 데이터 세트를 다운로드하려면 다음을 클릭하십시오. 여기에서 지금 확인해 보세요..

모듈 가져 오기

이제 원-핫 인코딩에 사용할 중요한 모듈을 Python에서 가져와야 합니다.

# pandas 가져오기 import pandas as pd # numpy 가져오기 import numpy as np # OneHotEncoder from sklearn.preprocessing import OneHotEncoder()

여기서는 데이터 분석에 사용되는 pandas, n차원 배열에 NumPyused를 사용하고, sklearn에서는 범주형 인코딩에 중요한 클래스인 One Hot Encoder를 사용합니다.

이제 Python을 사용하여 이 데이터를 읽어야 합니다.

데이터세트 읽기

일반적으로 데이터 세트는 CSV 형식이며, 우리가 사용하는 데이터 세트도 CSV 형식입니다. CSV 파일을 읽으려면 pandas read_csv() 함수를 사용합니다. 아래를 참조하세요:

# 데이터세트 읽기 df = pd.read_csv('house_price.csv') df.head()

산출:-

하지만 하나의 핫 엔코더에 대해서는 범주형 변수만 사용해야 하며 이해하기 쉽도록 범주형 변수로만 설명하도록 하겠습니다.

데이터에서 범주형 변수를 분할하려면 범주형 값을 갖는 기능 수를 확인해야 합니다.

범주형 값 확인

값을 확인하기 위해 변수의 데이터 유형을 선택하는 데 사용되는 pandas select_dtypes 함수를 사용합니다.

# 기능 확인 cat = df.select_dtypes(include='O').keys() # 변수 표시 cat

산출:-

 

이제 데이터 세트에서 해당 숫자 열을 삭제해야 하며 이 범주형 변수를 사용하겠습니다. 원-핫 인코딩을 적용하기 위해 데이터세트에서 3~4개의 범주형 열만 사용합니다.

새 DataFrame 만들기

이제 범주형 변수를 사용하기 위해 선택한 범주형 열의 새 데이터프레임을 만듭니다.

# 새 df 만들기 # 사용하는 열 설정 new_df = pd.read_csv('house_price.csv',usecols=['이웃','외장1st','외장2nd']) new_df.head()

산출:-

이제 모든 범주형 열에 고유한 범주가 몇 개 있는지 알아내야 합니다.

고유한 가치 찾기

고유한 값을 찾기 위해 pandas Unique() 함수를 사용합니다.

# 각 열의 고유 값 for x in new_df.columns: # 고유 값 인쇄 print(x ,':', len(new_df[x].unique()))

산출:-

인근지역 : 25
외장1차 : 15
외장2차 : 16

이제 다중 범주형 변수에 원-핫 인코딩을 적용하는 기술을 살펴보겠습니다.

다중 범주형 변수에 대한 기술

이 기술은 원-핫 인코딩을 변수의 가장 빈번한 10개 레이블로 제한하는 것입니다. 이는 가장 자주 사용되는 10개의 레이블 각각에 대해 하나의 이진 변수를 만든다는 의미입니다. 이는 다른 모든 레이블을 새 범주로 그룹화하는 것과 동일하며 이 경우 삭제됩니다. 따라서 10개의 새로운 더미 변수는 가장 빈번한 레이블 10개 중 하나가 존재하는지 여부를 나타냅니다. 1 아니면 그렇지 않으면 0 특별한 관찰을 위해.

가장 자주 사용되는 변수

여기서는 가장 자주 사용되는 변수 20개를 선택하겠습니다.

하나의 범주형 변수를 취한다고 가정합니다. 이웃.

# 상위 20개 카테고리 찾기 new_df.Neighborhood.value_counts().sort_values(ascending=False).head(20)

출력 :

이 출력 이미지를 보면 이름 레이블은 Neighborhood 열에서 225번 반복되며 아래로 내려가면 이 숫자가 감소하고 있습니다.

따라서 우리는 위에서 상위 10개 결과를 가져와 이 상위 10개 결과를 원-핫 인코딩으로 변환하고 왼쪽 레이블은 XNUMX으로 바꿉니다.

산출:-

 

가장 자주 사용되는 범주형 변수 목록

# 상위 10개 변수로 목록 만들기 top_10 = [x for x in new_df.Neighborhood.value_counts().sort_values(ascending=False).head(10).index] top_10

산출:-

['이름',
'CollgCr',
'구시 가지',
'에드워즈',
'서머스트',
'길버트',
'NridgHt',
'하늘소',
'NWA메스',
'소여W']

Neighborhood 열에는 상위 10개의 범주형 라벨이 있습니다.

바이너리 만들기

이제 top_10 레이블의 10개 이진 변수를 만들어야 합니다.

# 레이블의 바이너리를 만듭니다.

top_10의 라벨:

new_df = np.where(new_df['이웃']==label,1,0)

new_df[['이웃']+top_10]


산출:-

이름 CollgCr 구시 가지 Edwards 서머스트 길버트 NridgHt 하늘소 NWA메스 소이어W
0 CollgCr 0 1 0 0 0 0 0 0 0 0
1 빈커 0 0 0 0 0 0 0 0 0 0
2 CollgCr 0 1 0 0 0 0 0 0 0 0
3 크로포 0 0 0 0 0 0 0 0 0 0
4 노리지 0 0 0 0 0 0 0 0 0 0
5 미첼 0 0 0 0 0 0 0 0 0 0
6 서머스트 0 0 0 0 1 0 0 0 0 0
7 NWA메스 0 0 0 0 0 0 0 0 1 0
8 구시 가지 0 0 1 0 0 0 0 0 0 0
9 브크사이드 0 0 0 0 0 0 0 0 0 0
10 하늘소 0 0 0 0 0 0 0 1 0 0
11 NridgHt 0 0 0 0 0 0 1 0 0 0

이제 top_10 레이블이 이진 형식으로 변환되는 방식을 확인할 수 있습니다.

예를 들어 보겠습니다. 표에서 확인하세요. 1 색인 빈커 이는 top_10 카테고리 라벨에 속하지 않았으므로 결과는 다음과 같습니다. 0 모든 열.

이제 위에서 선택한 모든 범주형 변수에 대해 이 작업을 수행하겠습니다.

OneHotEncoding에서 선택된 모든 변수

# 우리가 선택한 모든 범주형 변수에 대해 def top_x(df2,variable,top_x_labels): for label in top_x_labels: df2[variable+'_'+label] = np.where(data[variable]==label,1,0) # 읽기 데이터를 다시 data = pd.read_csv('D://xdatasets/train.csv',usecols = ['Neighborhood','Exterior1st','Exterior2nd']) # 이웃을 가장 빈번한 10개 범주로 인코딩합니다 top_x(data, 'Neighborhood',top_10) # 데이터 표시 data.head()

산출:-

이제 여기서는 모든 다중 범주형 변수에 원-핫 인코딩을 적용합니다.

이제 다중 변수에 대한 One Hot Encoding의 장점과 단점을 살펴보겠습니다.

장점

  • 구현이 간단함
  • 변수 탐색에 많은 시간이 필요하지 않습니다.
  • 기능 공간을 대규모로 확장하지 않습니다.

단점

  • 변수의 예측 가능성을 높일 수 있는 정보를 추가하지 않습니다.
  • 무시된 변수의 정보를 보관하지 마십시오.

최종 메모

따라서 요약하면 다중 범주형 변수를 처리하는 방법에 대해 배우는 것입니다. 이 문제가 발생하면 매우 어려운 작업입니다. 그럼 이 글을 읽어주셔서 감사합니다.

Linkedin에서 저와 연결 : 프로필

내 다른 기사를 읽어보세요: https://www.analyticsvidhya.com/blog/author/mayurbadole2407/

감사합니다😋

이 기사에 표시된 미디어는 Analytics Vidhya의 소유가 아니며 작성자의 재량에 따라 사용됩니다.

모바일 APP에서이 기사를 읽을 수도 있습니다. Google Play에서 그것을 얻을

관련 기사

출처 : https://www.analyticsvidhya.com/blog/2021/05/how-to-perform-one-hot-encoding-for-multi-categorical-variables/

타임 스탬프 :

더보기 분석 Vidhya