소개
이 프로젝트에서는 단일 레이블 분류 작업에 대한 레이블 데이터에 원 - 핫 인코딩 (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
label_process함수에서 원 - 핫 인코딩 로직을 구현합니다. 이 함수는 두 개의 인수를 받습니다:labels: 데이터 세트의 고유 레이블/클래스 목록sample_y: 변환할 샘플 레이블 목록
- 변환된 레이블을 저장하기 위해
train_y라는 빈 목록을 초기화합니다. sample_y목록을 반복합니다:- 각 레이블
y에 대해, 고유 레이블 수 (len(labels)) 와 동일한 길이의 새 목록train을 생성하고 모든 요소를 0 으로 초기화합니다. index()메서드를 사용하여labels목록에서 현재 레이블y의 인덱스를 찾고,train에서 해당 요소를 1 로 설정합니다.train목록을train_y목록에 추가합니다.
- 각 레이블
- 루프가 끝나면
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 함수를 호출하고 결과 원 - 핫 인코딩된 레이블을 출력합니다.
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 에서 더 많은 랩을 연습하여 기술을 향상시킬 수 있습니다.



