>  기사  >  백엔드 개발  >  Scikit-Learn에서 여러 열을 효율적으로 레이블 인코딩하는 방법은 무엇입니까?

Scikit-Learn에서 여러 열을 효율적으로 레이블 인코딩하는 방법은 무엇입니까?

DDD
DDD원래의
2024-11-12 03:48:02154검색

How to Label Encode Multiple Columns Efficiently in Scikit-Learn?

Scikit-Learn의 여러 열에 걸친 레이블 인코딩

레이블 인코딩은 범주형 데이터를 숫자 특성으로 변환하는 일반적인 기술입니다. 각 열에 대해 별도의 LabelEncoder 인스턴스를 생성할 수 있지만 여러 열에 레이블 인코딩이 필요한 경우 단일 인코더를 사용하는 것이 더 효율적입니다.

많은 문자열 레이블 열이 있는 DataFrame을 고려해 보세요. 전체 DataFrame을 레이블 인코딩하려면 아래와 같이 전체 DataFrame을 LabelEncoder에 전달하는 것이 간단한 접근 방식일 수 있습니다.

import pandas as pd
from sklearn.preprocessing import LabelEncoder 

df = pd.DataFrame({
    'pets': ['cat', 'dog', 'cat', 'monkey', 'dog', 'dog'], 
    'owner': ['Champ', 'Ron', 'Brick', 'Champ', 'Veronica', 'Ron'], 
    'location': ['San_Diego', 'New_York', 'New_York', 'San_Diego', 'San_Diego', 
                 'New_York']
})

le = LabelEncoder()

le.fit(df)

그러나 이 접근 방식을 사용하면 다음과 같은 오류가 발생합니다.

ValueError: bad input shape (6, 3)

이 문제를 해결하려면 적용 함수를 사용하여 DataFrame의 각 열에 LabelEncoder를 적용하는 것이 해결책입니다. 이 방법은 각 열을 독립적으로 변환하여 여러 열의 효율적인 1단계 인코딩을 허용합니다.

df.apply(LabelEncoder().fit_transform)

또는 scikit-learn 0.20 이상에서 권장되는 접근 방식은 OneHotEncoder를 사용하는 것입니다.

OneHotEncoder().fit_transform(df)

이제 OneHotEncoder는 문자열 입력 인코딩을 직접 지원합니다.

더 많은 유연성을 위해 ColumnTransformer를 사용하여 특정 열 또는 열 내의 특정 데이터 유형에만 레이블 인코딩을 적용할 수 있습니다.

역 변환 및 향후 데이터 변환의 경우 defaultdict를 사용하여 각 열의 레이블 인코더를 유지할 수 있습니다. 사전에서 인코더에 액세스하면 원래 LabelEncoder 인스턴스로 데이터를 디코딩하거나 인코딩할 수 있습니다.

또한 Neuraxle과 같은 라이브러리는 동일한 LabelEncoder를 평면화된 데이터에 쉽게 적용할 수 있는 FlattenForEach 단계를 제공합니다.

열마다 서로 다른 LabelEncoder가 필요하거나 열의 하위 집합만 인코딩해야 하는 경우 ColumnTransformer는 선택 및 인코딩 프로세스에 대한 세부적인 제어를 제공합니다.

위 내용은 Scikit-Learn에서 여러 열을 효율적으로 레이블 인코딩하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.