사이킷 런에서
사이킷런(Scikit-learn)은 머신러닝을 위한 강력한 파이썬 라이브러리로, 데이터 전처리, 모델 학습, 평가 등 다양한 기능을 제공합니다. 결측치 처리, 원-핫 인코딩, 스케일링 이외에도 많은 기능이 있으며, 이를 체계적으로 정리해보겠습니다.
1. 데이터 전처리 기능
데이터를 학습 가능한 형태로 변환하는 작업이 중요합니다. 사이킷런은 다양한 전처리 도구를 제공합니다.
1.1 결측치 처리
- SimpleImputer
- 결측치를 평균, 중앙값, 최빈값 등으로 채우는 도구.
- 예:
from sklearn.impute import SimpleImputer imputer = SimpleImputer(strategy='mean') # 'mean', 'median', 'most_frequent' X = imputer.fit_transform(X)
- KNNImputer
- K-최근접 이웃(KNN)을 기반으로 결측치를 채웁니다.
- 예:
from sklearn.impute import KNNImputer imputer = KNNImputer(n_neighbors=5) X = imputer.fit_transform(X)
1.2 카테고리 데이터 처리
- OneHotEncoder
- 범주형 데이터를 원-핫 인코딩으로 변환.
- 예:
from sklearn.preprocessing import OneHotEncoder encoder = OneHotEncoder() X_encoded = encoder.fit_transform(X)
- OrdinalEncoder
- 카테고리 데이터를 정렬된 정수 값으로 변환.
- 예:
from sklearn.preprocessing import OrdinalEncoder encoder = OrdinalEncoder() X_encoded = encoder.fit_transform(X)
1.3 스케일링 및 정규화
1. 스케일링 및 정규화의 차이
- 스케일링: 데이터의 크기를 조정하여 모든 feature가 동일한 범위를 가지도록 변환. (예: 0~1, 평균 0 & 표준편차 1)
- 정규화: 각 데이터 포인트를 벡터의 크기로 나눠 조정. (예: 유클리드 노름으로 벡터 크기를 1로 조정)
2. 주요 스케일링 방법
2.1 StandardScaler (표준화)
- 목적: 평균 0, 표준편차 1로 데이터를 변환.
- 적합한 경우: 데이터가 정규분포(가우시안 분포)를 따를 때.
코드 예제:
from sklearn.preprocessing import StandardScaler
import numpy as np
# 데이터 생성
X = np.array([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0], [7.0, 8.0, 9.0]])
# 스케일링 적용
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
print("스케일링 후 데이터:")
print(X_scaled)
2.2 MinMaxScaler (최소-최대 정규화)
- 목적: 데이터를 0~1 사이의 값으로 변환.
- 적합한 경우: 데이터 분포가 정규분포가 아니며, 이상치가 없을 때.
코드 예제:
from sklearn.preprocessing import MinMaxScaler
# 데이터 생성
X = np.array([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0], [7.0, 8.0, 9.0]])
# 정규화 적용
scaler = MinMaxScaler()
X_normalized = scaler.fit_transform(X)
print("정규화 후 데이터:")
print(X_normalized)
2.3 RobustScaler
- 목적: 중앙값(median)과 IQR(Interquartile Range)을 사용해 데이터를 변환.
- 적합한 경우: 이상치(outlier)에 민감하지 않은 스케일링이 필요할 때.
코드 예제:
from sklearn.preprocessing import RobustScaler
# 데이터 생성
X = np.array([[1.0, 2.0, 100.0], [4.0, 5.0, 200.0], [7.0, 8.0, 300.0]])
# RobustScaler 적용
scaler = RobustScaler()
X_robust_scaled = scaler.fit_transform(X)
print("RobustScaler 후 데이터:")
print(X_robust_scaled)
3. 주요 정규화 방법
3.1 Normalizer (벡터 정규화)
- 목적: 각 샘플의 크기(노름, norm)를 1로 조정.
- 적합한 경우: 데이터가 방향성에 더 의미가 있을 때(예: 텍스트 데이터의 TF-IDF).
코드 예제:
from sklearn.preprocessing import Normalizer
# 데이터 생성
X = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# Normalizer 적용
normalizer = Normalizer()
X_normalized = normalizer.fit_transform(X)
print("Normalizer 후 데이터:")
print(X_normalized)
4. 스케일링 및 정규화 비교
방법 | 적용 목적 | 특징 | 적용 시 주의점 |
StandardScaler | 평균 0, 표준편차 1 | 정규분포에 적합 | 이상치에 민감 |
MinMaxScaler | 0~1 사이 값 | 데이터 범위가 정해져 있을 때 적합 | 이상치에 민감 |
RobustScaler | 중앙값과 IQR | 이상치 영향을 줄이고 싶을 때 적합 | 데이터 중심이 중요하지 않을 때 |
Normalizer | 벡터 크기 1로 정규화 | 방향성 데이터에 적합 | 데이터 스케일 정보 손실 |
5. 실전 활용 팁
- 훈련 데이터와 테스트 데이터를 동일하게 변환
- fit은 훈련 데이터에만 사용하고, 테스트 데이터는 transform만 수행.
- 모델의 요구사항에 맞게 선택
- 거리 기반 알고리즘(KNN, K-Means 등): MinMaxScaler 추천.
- 선형 모델(SVM, Logistic Regression 등): StandardScaler 추천.
- 이상치가 많은 경우 RobustScaler 사용
- MinMaxScaler나 StandardScaler는 이상치에 취약.
예제: 모든 스케일링 방법 비교
import numpy as np
from sklearn.preprocessing import StandardScaler, MinMaxScaler, RobustScaler, Normalizer
# 데이터 생성
X = np.array([[1, -1, 2],
[2, 0, 0],
[0, 1, -1]])
# 각각의 스케일링 적용
scalers = {
"StandardScaler": StandardScaler(),
"MinMaxScaler": MinMaxScaler(),
"RobustScaler": RobustScaler(),
"Normalizer": Normalizer()
}
# 결과 출력
for scaler_name, scaler in scalers.items():
print(f"{scaler_name} 적용 결과:")
print(scaler.fit_transform(X))
print()
2. 특징 엔지니어링
특징 생성과 선택을 위한 도구들입니다.
2.1 다항식 특징
- PolynomialFeatures
- 기존 feature를 사용해 다항식 feature 생성.
- 예:
from sklearn.preprocessing import PolynomialFeatures poly = PolynomialFeatures(degree=2, include_bias=False) X_poly = poly.fit_transform(X)
2.2 특징 선택
- SelectKBest
- 통계 검정(카이제곱, 분산 분석 등)을 기반으로 가장 중요한 K개의 feature를 선택.
- 예:
from sklearn.feature_selection import SelectKBest, chi2 selector = SelectKBest(chi2, k=3) X_new = selector.fit_transform(X, y)
- RFE (Recursive Feature Elimination)
- 모델 기반으로 feature를 순차적으로 제거하여 최적의 feature 집합 선택.
3. 데이터 변환
데이터를 변환하거나 특성을 조정하는 도구입니다.
3.1 데이터 변환
- PowerTransformer
- 데이터의 분포를 정규 분포에 가깝게 변환.
- 예: Box-Cox, Yeo-Johnson 변환.
- 예:
from sklearn.preprocessing import PowerTransformer pt = PowerTransformer(method='yeo-johnson') X_transformed = pt.fit_transform(X)
- QuantileTransformer
- 데이터를 특정 분위에 따라 정규화.
3.2 데이터 비율 조정
- Binarizer
- 특정 임계값을 기준으로 데이터를 이진화(0, 1) 처리.
- Normalizer
- 각 데이터 벡터의 크기를 1로 조정(유클리디안 거리 기준).
4. 데이터 샘플링
불균형 데이터 문제를 해결하거나 샘플링을 위한 도구.
4.1 SMOTE
- Synthetic Minority Oversampling Technique.
- 소수 클래스 샘플을 생성하여 데이터 균형 맞춤.
4.2 Train-Test Split
- 학습 데이터와 테스트 데이터를 나누는 도구.
- 예:
from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
여기서부터 아직 잘 모름
5. 모델 평가
5.1 교차 검증
- KFold
- 데이터를 K개의 폴드로 나누어 교차 검증 수행.
- 예:
from sklearn.model_selection import KFold kf = KFold(n_splits=5) for train_index, test_index in kf.split(X): X_train, X_test = X[train_index], X[test_index]
- StratifiedKFold
- 데이터의 클래스 비율을 유지한 교차 검증.
5.2 평가 메트릭
- 정확도, F1 스코어, ROC-AUC 등을 계산.
from sklearn.metrics import accuracy_score, f1_score print(accuracy_score(y_true, y_pred)) print(f1_score(y_true, y_pred))
여기도 아직 잘 모름
6. 파이프라인
전처리와 모델 학습을 하나의 워크플로우로 구성.
from sklearn.pipeline import Pipeline
from sklearn.ensemble import RandomForestClassifier
from sklearn.preprocessing import StandardScaler
pipeline = Pipeline([
('scaler', StandardScaler()),
('model', RandomForestClassifier())
])
pipeline.fit(X_train, y_train)
이건 또 뭘까
7. 모델 튜닝
GridSearchCV
- 다양한 하이퍼파라미터 조합을 테스트하여 최적값을 찾음.
- 예:
from sklearn.model_selection import GridSearchCV param_grid = {'n_estimators': [10, 50, 100]} grid = GridSearchCV(estimator=RandomForestClassifier(), param_grid=param_grid, cv=3) grid.fit(X, y)
RandomizedSearchCV
- 무작위로 하이퍼파라미터를 선택하여 최적 조합을 찾음.
정리
사이킷런은 단순한 머신러닝 모델 제공뿐 아니라 데이터 전처리, 평가, 튜닝, 파이프라인 구성 등 머신러닝 워크플로우 전체를 지원합니다. 이를 효과적으로 활용하면 작업 효율성을 크게 높일 수 있습니다.
배가고프고 배가고픈데 귀찮아서 일어나지를 못하겠고 배고프고 엄마가 보고싶고 피곤하고 뭐 별거 한것도 없는데 어떻게 이렇게 힘든지 집에있는데 왜 집에가고싶은지 아무튼
자격증에 대한 필요성을 느꼈다.
안일했구나 싶었고 그러면서도 안 안일하면 어쩔건데 싶었고
정보처리기사, adsp 라는 자격증을 알게되었고
책 사서 공부해야지 뭐 별 수 있나
머신러닝 딥러닝이 끝이 아니라는 게 놀랍기만 하다
쟝고라고..?
국비지원 강의니까 취업도 국가가 시켜주면 좋겠다ㅎ
이 기간동안 할 수 있는 만큼 다 해 봐야겠다는..생각이 들었다.
배가고프다............ 귀찮아서 걍 자야겠다
'TIL' 카테고리의 다른 글
내일배움캠프 본캠프 22일차 - 개인과제 하느라 진땀 (1) | 2024.12.24 |
---|---|
내일배움캠프 3주차 WIL (2) | 2024.12.20 |
내일배움캠프 본캠프 20일차 - 정신없는 하루 (7) | 2024.12.20 |
내일배움캠프 본캠프 19일차 - 머신러닝 과제1번 힘들다 (2) | 2024.12.19 |
내일배움캠프 본캠프 17일차 - 머신러닝 특강 (3) | 2024.12.17 |