sklearn.preprocessing 의 LabelEncoder 를 사용하여 범주형 타겟 인코딩
이 단계에서는 타겟 변수 y를 전처리할 것입니다. Iris 데이터셋의 타겟은 범주형이며, 세 가지 다른 Iris 꽃 종에 해당하는 숫자 0, 1, 2 로 표현됩니다. 이미 숫자 형식이지만, 범주형 레이블을 인코딩하는 방법을 이해하는 것은 좋은 습관입니다. 특히 문자열 형식 (예: 'setosa', 'versicolor') 인 경우 더욱 그렇습니다.
LabelEncoder 설명:
- 목적: 범주형 레이블 (문자열 또는 혼합 유형) 을 정수로 변환합니다.
- 작동 방식: 고유한 각 범주에 고유한 정수를 할당합니다.
- 예시: ['cat', 'dog', 'cat'] → [0, 1, 0]
LabelEncoder 를 사용하는 이유:
- 많은 ML 알고리즘은 숫자 입력을 요구합니다.
- 효율적인 저장 및 계산이 가능합니다.
- 데이터의 범주형 특성을 유지합니다.
주요 메서드:
fit(y): 범주에서 정수로의 매핑을 학습합니다.
transform(y): 학습된 매핑을 적용합니다.
fit_transform(y): 두 단계를 하나의 호출로 결합합니다.
inverse_transform(y_encoded): 정수를 원래 범주로 다시 변환합니다.
중요 참고 사항:
- 순서는 임의적입니다 (첫 번째 등장 또는 정렬 기준).
- 순서가 중요한 순서형 데이터에는 적합하지 않습니다 (대신 OrdinalEncoder 를 사용하세요).
- 특성 (타겟이 아닌) 의 경우, 명목형 데이터에는 OneHotEncoder 를 고려하세요.
preprocess.py 파일에서 ## --- Step 5: Encode the target --- 주석 아래에 다음 코드를 추가합니다. LabelEncoder 인스턴스를 생성하고 fit_transform() 메서드를 사용할 것입니다. 이 메서드는 학습과 변환을 단일 단계로 결합합니다.
## --- Step 5: Encode the target ---
encoder = LabelEncoder()
y_encoded = encoder.fit_transform(y)
print("\nOriginal target sample:", y[:5]) ## Show first 5 original labels
print("Encoded target sample:", y_encoded[:5]) ## Show first 5 encoded labels
print("Unique encoded values:", np.unique(y_encoded)) ## Show all unique encoded values
파일을 저장하고 마지막으로 실행합니다.
python3 preprocess.py
출력에서 타겟 변수가 인코딩되었음을 확인할 수 있습니다. 이미 올바른 정수 형식이었기 때문에 결과는 동일하지만, 문자열 기반 레이블에 사용할 프로세스를 보여줍니다.
Shape of features (X): (150, 4)
Shape of target (y): (150,)
Scaler object created: StandardScaler()
Scaler mean: [5.84333333 3.05733333 3.758 1.19933333]
Original data mean: [5.84 3.06 3.76 1.2 ]
Scaled data mean: [-0. -0. -0. -0.]
Scaled data sample:
[[-0.9 1.02 -1.34 -1.32]
[-1.14 -0.13 -1.34 -1.32]
[-1.39 0.33 -1.4 -1.32]
[-1.51 0.1 -1.28 -1.32]
[-1.02 1.25 -1.34 -1.32]]
Original target sample: [0 0 0 0 0]
Encoded target sample: [0 0 0 0 0]
Unique encoded values: [0 1 2]