원 - 핫 인코딩으로 레이블 변환

PythonBeginner
지금 연습하기

소개

이 프로젝트에서는 단일 레이블 분류 작업에 대한 레이블 데이터에 원 - 핫 인코딩 (one-hot encoding) 을 수행하는 방법을 배우게 됩니다. 원 - 핫 인코딩은 범주형 변수를 머신 러닝 알고리즘에서 사용할 수 있는 형식으로 변환하는 데 사용되는 일반적인 기술입니다.

🎯 과제

이 프로젝트에서 다음을 배우게 됩니다:

  • 원 - 핫 인코딩의 개념과 머신 러닝에서의 중요성을 이해하는 방법.
  • 샘플 레이블 목록에 대해 원 - 핫 인코딩을 수행하는 함수를 구현하는 방법.
  • 샘플 데이터를 사용하여 레이블 인코딩 함수를 테스트하는 방법.

🏆 성과

이 프로젝트를 완료하면 다음을 수행할 수 있습니다:

  • 범주형 레이블을 머신 러닝 모델에 적합한 숫자 형식으로 변환합니다.
  • 머신 러닝 파이프라인에서 데이터 전처리 및 특징 공학 (feature engineering) 의 중요성을 이해합니다.
  • 머신 러닝 작업을 위해 데이터를 조작하고 변환하는 데 필요한 Python 코딩 기술을 실습합니다.

원 - 핫 인코딩으로 레이블 변환

이 단계에서는 단일 레이블 분류 작업에 대한 레이블 데이터에 원 - 핫 인코딩을 수행하는 방법을 배우게 됩니다.

원 - 핫 인코딩은 범주형 변수를 머신 러닝 알고리즘에서 사용할 수 있는 형식으로 변환하는 데 사용되는 일반적인 기술입니다. 단일 레이블 분류의 경우, 데이터 세트의 각 고유 레이블은 이진 벡터로 표현되며, 목록에서 레이블의 위치는 1 로 표시되고 다른 모든 위치는 0 으로 표시됩니다.

/home/labex/project 디렉토리에 있는 label_process.py 파일을 열고 다음 코드를 추가합니다:

def label_process(labels: List[str], sample_y: List[str]) -> List[List[int]]:
    """
    Transforms a list of sample labels into a format suitable for classification tasks.

    The function creates a binary list for each sample label, where the position
    of the label in the 'labels' list is marked as 1 and all other positions are 0.
    This is known as one-hot encoding.

    Args:
        labels (List[str]): List of unique labels/classes in the dataset.
        sample_y (List[str]): List of sample labels to be transformed.

    Returns:
        List[List[int]]: Transformed labels, each represented as a binary list corresponding
        to the positions in the 'labels' list.
    """
    train_y = []
    for y in sample_y:
        train = [0] * len(labels)
        train[labels.index(y)] = 1
        train_y.append(train)
    return train_y
  1. label_process 함수에서 원 - 핫 인코딩 로직을 구현합니다. 이 함수는 두 개의 인수를 받습니다:
    • labels: 데이터 세트의 고유 레이블/클래스 목록
    • sample_y: 변환할 샘플 레이블 목록
  2. 변환된 레이블을 저장하기 위해 train_y라는 빈 목록을 초기화합니다.
  3. sample_y 목록을 반복합니다:
    • 각 레이블 y에 대해, 고유 레이블 수 (len(labels)) 와 동일한 길이의 새 목록 train을 생성하고 모든 요소를 0 으로 초기화합니다.
    • index() 메서드를 사용하여 labels 목록에서 현재 레이블 y의 인덱스를 찾고, train에서 해당 요소를 1 로 설정합니다.
    • train 목록을 train_y 목록에 추가합니다.
  4. 루프가 끝나면 train_y 목록에는 모든 샘플에 대한 원 - 핫 인코딩된 레이블이 포함됩니다. label_process 함수에서 이 목록을 반환합니다.

레이블 인코딩 테스트

이 단계에서는 몇 가지 샘플 데이터를 제공하고 출력을 확인하여 label_process 함수를 테스트합니다.

label_process.py 파일에 다음 코드를 추가합니다:

## Continue in the same file
if __name__ == "__main__":
    labels = ["Python", "Java", "Tensorflow", "Springboot", "Keras"]
    sample_y = ["Python", "Python", "Python", "Java", "Java", "Keras"]
    train_y = label_process(labels, sample_y)
    print(train_y)

이 코드는 고유 레이블 목록 (labels) 과 샘플 레이블 목록 (sample_y) 을 정의한 다음, label_process 함수를 호출하고 결과 원 - 핫 인코딩된 레이블을 출력합니다.

  1. label_process.py 파일을 저장하고 터미널에서 스크립트를 실행합니다:
python label_process.py

출력은 다음과 같아야 합니다:

[[1, 0, 0, 0, 0],
 [1, 0, 0, 0, 0],
 [1, 0, 0, 0, 0],
 [0, 1, 0, 0, 0],
 [0, 1, 0, 0, 0],
 [0, 0, 0, 0, 1]]

이 출력은 샘플 데이터에 대한 원 - 핫 인코딩된 레이블을 보여줍니다. 각 행은 샘플을 나타내고, 열은 labels 목록에서 레이블의 위치에 해당합니다.

축하합니다! 단일 레이블 분류 작업에 대한 레이블의 원 - 핫 인코딩을 성공적으로 구현했습니다.

요약

축하합니다! 이 프로젝트를 완료했습니다. LabEx 에서 더 많은 랩을 연습하여 기술을 향상시킬 수 있습니다.

✨ 솔루션 확인 및 연습✨ 솔루션 확인 및 연습