프로그래밍 언어/Python

[파이썬 개념 정리 17] scikit-learn 라이브러리

ourkofe's story 2024. 8. 2. 01:10

이번 글은 내용 공유의 목적이 아닌 scikit-learn 라이브러리에 대해 언제든 내용을 확인할 수 있게 만든 노트 목적의 글입니다.

다른 분들도 필요하다면 언제든 참고하셔도 좋습니다.


scikit-learn이란?

scikit-learn은 Python을 위한 오픈 소스 머신러닝 라이브러리입니다.

다양한 분류, 회귀, 클러스터링 알고리즘뿐만 아니라 전처리, 모델 선택 및 평가를 위한 도구들을 제공합니다.

단순하면서도 강력한 API 덕분에 데이터 과학자와 엔지니어들이 손쉽게 머신러닝 모델을 구현하고 실험할 수 있습니다.

역사 및 배경

scikit-learn은 2007년 David Cournapeau가 Google Summer of Code 프로젝트로 시작했습니다.

이후 여러 개발자들의 기여를 통해 발전해왔으며, 현재는 전 세계에서 널리 사용되고 있는 머신러닝 라이브러리입니다.


설치 방법

scikit-learn은 pip을 통해 간단하게 설치할 수 있습니다.

다음 명령어를 통해 설치할 수 있습니다.

pip install scikit-learn

# Anaconda 배포판을 사용하는 경우
conda install scikit-learn

의존성 패키지 : scikit-learn은 NumPy, SciPy, joblib, threadpoolctl 등 몇 가지 핵심 라이브러리에 의존합니다.

이를 통해 고성능 수치 연산과 병렬 처리가 가능합니다.


주요 기능

데이터 전처리

  • StandardScaler : 데이터를 평균 0, 표준편차 1로 스케일링합니다.
  • MinMaxScaler : 데이터를 최소값 0, 최대값 1로 변환합니다.
  • Imputer(SimpleImputer) : 결측값을 특정 값으로 대체합니다.

데이터 분할

  • train_test_split : 데이터를 학습용(train)과 테스트용(test)으로 분할합니다.
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)

특징 선택

  • SelectKBest: 상위 k개의 특징을 선택합니다.
  • RFE (Recursive Feature Elimination): 반복적으로 특징을 제거하여 최적의 특징 집합을 선택합니다.

모델 선택 및 평가

  • 교차 검증 (cross-validation): 데이터를 여러 번 나누어 모델을 평가하는 방법입니다.
  • GridSearchCV: 하이퍼파라미터의 모든 조합을 시도하여 최적의 파라미터를 찾습니다.
  • RandomizedSearchCV: 하이퍼파라미터를 무작위로 조합하여 최적의 파라미터를 찾습니다.

주요 알고리즘

분류(Classification)

  • SVM (Support Vector Machine): 데이터 포인트들을 분류하는 초평면을 찾는 알고리즘입니다.
  • KNN (K-Nearest Neighbors): 가장 가까운 k개의 이웃 데이터를 참고하여 분류합니다.
  • Decision Tree: 의사결정 트리를 통해 데이터를 분류합니다.
  • Random Forest: 여러 개의 의사결정 트리를 사용하여 분류합니다.
  • Logistic Regression: 로지스틱 회귀를 통해 분류합니다.

회귀(Regression)

  • Linear Regression: 선형 회귀를 통해 값을 예측합니다.
  • Ridge: L2 규제를 사용한 선형 회귀입니다.
  • Lasso: L1 규제를 사용한 선형 회귀입니다.
  • SVR (Support Vector Regression): 서포트 벡터 머신을 회귀에 적용합니다.
  • Decision Tree: 의사결정 트리를 통해 값을 예측합니다.

클러스터링(Clustering)

  • KMeans: 데이터를 k개의 클러스터로 나눕니다.
  • DBSCAN: 밀도 기반 클러스터링 알고리즘입니다.
  • Hierarchical Clustering: 계층적 클러스터링을 수행합니다.

차원 축소(Dimensionality Reduction)

  • PCA (Principal Component Analysis): 주성분 분석을 통해 차원을 축소합니다.
  • t-SNE (t-Distributed Stochastic Neighbor Embedding): 데이터의 고차원 구조를 저차원으로 시각화합니다.

사용 예제

이번 목차에서는 간단한 예제를 통해 scikit-learn의 사용 방법을 설명하려고 합니다.

예시로 iris 데이터셋을 사용하여 분류 모델을 구축하고 평가하는 방법을 설명하겠습니다.

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score

# 데이터 로드
iris = load_iris()
X, y = iris.data, iris.target

# 데이터 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 데이터 전처리
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

# 모델 훈련
model = SVC()
model.fit(X_train, y_train)

# 예측 및 평가
y_pred = model.predict(X_test)
print(f"Accuracy: {accuracy_score(y_test, y_pred)}")

고급 기능

파이프라인(Pipeline)

파이프라인을 사용하면 여러 변환기와 추정기를 연결하여 반복적인 작업을 간소화할 수 있습니다.

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC

pipeline = Pipeline([
    ('scaler', StandardScaler()),
    ('svc', SVC())
])

pipeline.fit(X_train, y_train)
y_pred = pipeline.predict(X_test)

참고 자료 및 학습 리소스

공식 문서

scikit-learn의 공식 문서는 매우 잘 정리되어 있으며, 다양한 예제와 튜토리얼을 포함하고 있습니다. scikit-learn 공식 문서

튜토리얼 및 가이드

  • scikit-learn 튜토리얼: 공식 튜토리얼 페이지로, 기본 개념부터 고급 주제까지 다룹니다.
  • Kaggle: 다양한 머신러닝 문제와 해결 방법을 학습할 수 있는 플랫폼입니다.
  • DataCamp: scikit-learn을 포함한 다양한 데이터 과학 강좌를 제공합니다.

감사합니다!

728x90