html
머신러닝에서 레이블 인코딩 마스터하기: 종합 가이드
목차
레이블 인코딩 소개
머신러닝에서 레이블 인코딩은 범주형 데이터를 숫자 형식으로 변환하는 데 사용되는 기법입니다. 많은 알고리즘이 범주형 데이터를 직접 처리할 수 없기 때문에 이러한 범주를 숫자로 인코딩하는 것이 필수적입니다. 레이블 인코딩은 각 범주에 고유한 정수를 할당하여 모델이 데이터를 효율적으로 해석하고 처리할 수 있도록 도와줍니다.
주요 개념:
- 범주형 데이터: "예/아니오", "빨강/파랑/초록" 등과 같이 범주를 나타내는 변수.
- 수치 인코딩: 범주형 데이터를 수치 값으로 변환하는 과정.
데이터셋 이해하기
이 가이드에서는 Kaggle에서 제공하는 Weather AUS 데이터셋을 사용할 것입니다. 이 데이터셋은 다양한 호주 지역과 날짜에 걸친 여러 날씨 관련 속성을 포함하고 있습니다.
데이터셋 개요:
- URL: Weather AUS 데이터셋
- 특징: 날짜, 위치, 온도 지표, 강수량, 바람 세부 정보, 습도, 기압, 구름 덮개 등.
- 타겟 변수:
RainTomorrow
다음 날 비가 올지 여부를 나타냅니다.
결측 데이터 처리
실제 데이터셋에는 종종 결측 값이 포함되어 있으며, 이는 머신러닝 모델의 성능을 저해할 수 있습니다. 이러한 결측 값을 적절히 처리하는 것은 강력한 모델을 구축하는 데 중요합니다.
수치 데이터
전략: 열의 평균을 사용하여 결측 값을 대체합니다.
구현:
123456789101112
import numpy as npfrom sklearn.impute import SimpleImputer # 평균 전략으로 임퓨터 초기화imp_mean = SimpleImputer(missing_values=np.nan, strategy='mean') # 수치 열 식별numerical_cols = list(np.where((X.dtypes == np.int64) | (X.dtypes == np.float64))[0]) # 데이터에 적합 및 변환imp_mean.fit(X.iloc[:, numerical_cols])X.iloc[:, numerical_cols] = imp_mean.transform(X.iloc[:, numerical_cols])
범주형 데이터
전략: 가장 빈번한 범주를 사용하여 결측 값을 대체합니다.
구현:
123456789
# 문자열 열 식별string_cols = list(np.where((X.dtypes == object))[0]) # 최빈값 전략으로 임퓨터 초기화imp_mean = SimpleImputer(missing_values=np.nan, strategy='most_frequent') # 데이터에 적합 및 변환imp_mean.fit(X.iloc[:, string_cols])X.iloc[:, string_cols] = imp_mean.transform(X.iloc[:, string_cols])
범주형 변수 인코딩
결측 데이터를 처리한 후, 다음 단계는 머신러닝 알고리즘에 맞게 범주형 변수를 인코딩하는 것입니다.
원-핫 인코딩
원-핫 인코딩은 범주형 변수를 ML 알고리즘에 더 나은 예측을 할 수 있는 형식으로 변환합니다.
구현:
123456789
from sklearn.compose import ColumnTransformerfrom sklearn.preprocessing import OneHotEncoder def OneHotEncoderMethod(indices, data): columnTransformer = ColumnTransformer( [('encoder', OneHotEncoder(), indices)], remainder='passthrough' ) return columnTransformer.fit_transform(data)
레이블 인코딩
레이블 인코딩은 범주형 열의 각 값을 고유한 정수로 변환합니다. 특히 이진 범주형 변수에 유용합니다.
구현:
123456
from sklearn import preprocessing def LabelEncoderMethod(series): le = preprocessing.LabelEncoder() le.fit(series) return le.transform(series)
적절한 인코딩 기법 선택
원-핫 인코딩과 레이블 인코딩 중 선택은 범주형 데이터의 특성에 따라 달라집니다.
지침:
- 이진 범주: 레이블 인코딩으로 충분합니다.
- 다중 범주: 순서적 관계를 도입하지 않기 위해 원-핫 인코딩이 바람직합니다.
구현:
123456789101112131415161718
def EncodingSelection(X, threshold=10): # 문자열 열 선택 string_cols = list(np.where((X.dtypes == object))[0]) one_hot_encoding_indices = [] # 고유 값에 따라 인코딩 방법 결정 for col in string_cols: unique_length = len(pd.unique(X[X.columns[col]])) if unique_length == 2 or unique_length > threshold: X[X.columns[col]] = LabelEncoderMethod(X[X.columns[col]]) else: one_hot_encoding_indices.append(col) # 원-핫 인코딩 적용 X = OneHotEncoderMethod(one_hot_encoding_indices, X) return X X = EncodingSelection(X)
특징 선택
가장 관련성이 높은 특징을 선택하면 모델의 성능을 향상시키고 계산 복잡성을 줄일 수 있습니다.
기법: 카이제곱(chi2
)을 점수 함수로 사용하는 SelectKBest.
구현:
123456789101112131415161718192021
from sklearn.feature_selection import SelectKBest, chi2from sklearn import preprocessing # SelectKBest 초기화kbest = SelectKBest(score_func=chi2, k=10) # Min-Max 스케일러 초기화MMS = preprocessing.MinMaxScaler() # 특징 스케일링x_temp = MMS.fit_transform(X) # SelectKBest 적합x_temp = kbest.fit(x_temp, y) # 최고의 특징 식별best_features = np.argsort(x_temp.scores_)[-K_features:]features_to_delete = best_features = np.argsort(x_temp.scores_)[:-K_features] # 데이터셋 축소X = np.delete(X, features_to_delete, axis=1)
KNN 모델 구축 및 평가
데이터셋 전처리 및 특징 선택이 완료되면, 우리는 K-최근접 이웃(KNN) 분류기를 구축하고 평가합니다.
훈련-테스트 분할
데이터셋을 분할하면 모델이 보지 못한 데이터에 대해 평가되어 일반화 능력을 측정할 수 있습니다.
구현:
12345678
from sklearn.model_selection import train_test_split # 데이터 분할X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.20, random_state=1) print(X_train.shape) # 출력: (113754, 12)
특징 스케일링
특징 스케일링은 특징의 범위를 표준화하여 KNN과 같이 데이터의 스케일에 민감한 알고리즘에 필수적입니다.
구현:
1234567891011121314
from sklearn import preprocessing # StandardScaler 초기화sc = preprocessing.StandardScaler(with_mean=False) # 훈련 데이터에 적합 및 변환sc.fit(X_train)X_train = sc.transform(X_train) # 테스트 데이터 변환X_test = sc.transform(X_test) print(X_train.shape) # 출력: (113754, 12)print(X_test.shape) # 출력: (28439, 12)
모델 훈련 및 평가
구현:
123456789101112131415
from sklearn.neighbors import KNeighborsClassifierfrom sklearn.metrics import accuracy_score # KNN 분류기 초기화knnClassifier = KNeighborsClassifier(n_neighbors=3) # 모델 훈련knnClassifier.fit(X_train, y_train) # 테스트 데이터 예측y_pred = knnClassifier.predict(X_test) # 정확도 평가accuracy = accuracy_score(y_pred, y_test)print(f"Accuracy: {accuracy}")
출력:
1
Accuracy: 0.8258
약 82.58%의 정확도는 제공된 특징을 기반으로 다음 날 비가 올지를 예측하는 모델이 상당히 잘 작동함을 나타냅니다.
결정 영역 시각화
결정 영역을 시각화하면 KNN 모델이 어떻게 예측을 수행하는지에 대한 통찰을 얻을 수 있습니다. 특징이 적을수록 시각화가 더 효과적이지만, 시각화를 위한 샘플 코드 조각을 제공합니다.
구현:
1234567891011121314
# mlxtend가 설치되어 있지 않은 경우 설치# pip install mlxtend from mlxtend.plotting import plot_decision_regionsimport matplotlib.pyplot as plt # 결정 영역 플로팅 (첫 두 특징 예시)plot_decision_regions(X_train[:, :2], y_train, clf=knnClassifier, legend=2) # 축 레이블 추가plt.xlabel('Feature 1')plt.ylabel('Feature 2')plt.title('KNN 결정 영역')plt.show()
참고: 시각화는 두 개의 특징일 때 가장 효과적입니다. 더 많은 특징을 가진 데이터셋의 경우, 시각화 전에 PCA와 같은 차원 축소 기법을 고려하십시오.
결론
레이블 인코딩은 데이터 전처리 도구에서 기본적인 기법으로, 머신러닝 모델이 범주형 데이터를 효과적으로 해석할 수 있도록 합니다. 결측 데이터를 체계적으로 처리하고, 관련성이 높은 특징을 선택하며, 범주형 변수를 적절히 인코딩함으로써 강력한 예측 모델을 구축할 수 있는 견고한 기반을 마련할 수 있습니다. 이러한 실무를 워크플로에 통합하면 모델 성능을 향상시킬 뿐만 아니라 머신러닝 프로젝트의 확장성과 효율성을 보장할 수 있습니다.
주요 요점:
- 레이블 인코딩은 범주형 데이터를 수치 형식으로 변환하여 ML 알고리즘에 필수적입니다.
- 결측 데이터 처리는 모델의 왜곡된 결과를 방지할 수 있습니다.
- 인코딩 기법은 범주의 특성과 수에 따라 선택해야 합니다.
- 특징 선택은 관련 없거나 중복된 특징을 제거하여 모델 성능을 향상시킵니다.
- KNN 모델의 효과는 적절한 전처리 및 특징 스케일링에 의해 좌우됩니다.
이러한 전처리 기법을 숙달하여 머신러닝 여정을 시작하고, 정확하고 신뢰할 수 있는 모델을 구축할 수 있는 잠재력을 발휘하십시오.
학습 강화:
- 우리의 고급 데이터 전처리 가이드에서 더 많은 전처리 기법을 탐구하십시오.
- 우리의 포괄적인 ML 모델 튜토리얼을 통해 머신러닝 알고리즘에 대해 더 깊이 파고들어보십시오.
행복한 코딩 되세요!