Python to AI

Scikit-learn

최 수빈 2024. 12. 26. 19:48

 

Scikit-learn

 

Python 기반의 강력한 머신러닝 라이브러리

 

Python으로 작성되었으며, NumPy, SciPy, Matplotlib와 같은 라이브러리와 잘 통합되어 있음

설치와 사용이 간단, 사용자 친화적인 API를 제공해 초보자도 쉽게 접근 가능

 

 

 

Scikit-learn이 지원하는 다양한 머신러닝 알고리즘

  • 회귀 분석 : 선형 회귀, 리지 회귀, 라쏘 회귀 등
  • 분류 : 로지스틱 회귀, SVM, 랜덤 포레스트, KNN 등
  • 군집화 : K-means, DBSCAN, 계층적 군집화 등
  • 차원 축소 : PCA, t-SNE, LDA 등

효율성과 확장성

Scikit-learn 대규모 데이터셋 처리와 효율적인 모델 학습을 위해 C와 Cython으로 최적화된 코드를 사용해 속도가 빠름

병렬 처리를 지원하는 알고리즘(예: 랜덤 포레스트)도 포함되어 있어 멀티코어 환경에서 성능을 극대화할 수 있음

 

 

 

Scikit-learn의 추가적인 주요 기능

 

파이프라인(Pipeline)

데이터 전처리와 모델 학습 과정을 하나로 결합하여 코드의 재사용성과 가독성을 높여줌

예: 스케일링 → PCA → 분류 모델

 

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.ensemble import RandomForestClassifier

pipeline = Pipeline([
    ('scaler', StandardScaler()),
    ('pca', PCA(n_components=2)),
    ('rf', RandomForestClassifier())
])
pipeline.fit(X_train, y_train)

 

 

 

하이퍼파라미터 튜닝

 

Scikit-learn은 하이퍼파라미터 최적화를 위한 다양한 도구를 제공

GridSearchCV: 모든 하이퍼파라미터 조합을 시도하여 최적값을 찾음

RandomizedSearchCV: 랜덤 샘플링으로 효율적으로 최적값을 탐색

 

 

 

특징 중요도(Feature Importance)

 

트리 기반 모델(랜덤 포레스트, 그라디언트 부스팅)에서 각 특성이 모델에 얼마나 중요한지를 확인할 수 있는 기능을 제공

 

model.feature_importances_

 

 

 

커스텀 모델 구현

 

사용자 정의 모델과 변환기를 쉽게 추가할 수 있는 API를 제공

BaseEstimator TransformerMixin 클래스를 상속받아 커스텀 모델이나 전처리기를 만들 수 있음

 

 

모델 저장 및 로드

 

학습된 모델을 저장하고 나중에 로드하여 사용할 수 있는 기능을 제공

 

from joblib import dump, load
dump(model, 'model.joblib')  # 저장
loaded_model = load('model.joblib')  # 로드

 

 

 

확장 가능한 데이터 처리

 

Sparse Matrix: 희소 행렬을 효율적으로 처리 가능.

미니배치 학습: 대규모 데이터셋을 처리하기 위한 미니배치 방식의 학습 지원(예: MiniBatchKMeans).

 

 

 

Scikit-learn의 한계

 

딥러닝 지원 부족

Scikit-learn은 딥러닝 기능(TensorFlow, PyTorch 같은 프레임워크) 지원이 제한적

주로 전통적인 머신러닝 알고리즘에 초점이 맞춰져 있음

 

대규모 데이터셋 처리

대규모 데이터셋에 대해 메모리 효율성이 떨어질 수 있음 (Spark MLlib 같은 분산 환경에 최적화된 라이브러리와 비교하면 성능이 부족할 수 있음)

 

GPU 지원

Scikit-learn은 CPU 기반으로 설계되어 있으며 GPU를 활용한 연산 가속을 지원하지 않음

 

 

 

 

from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error

# 데이터 생성
X = [[1], [2], [3], [4], [5]]
y = [1, 4, 9, 16, 25]

# 데이터 분할 (훈련 데이터와 테스트 데이터)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 회귀 모델 생성 및 학습
model = LinearRegression()
model.fit(X_train, y_train)

# 예측
y_pred = model.predict(X_test)

# 모델 평가
mse = mean_squared_error(y_test, y_pred)
print(f'Mean Squared Error: {mse}')

"""
Mean Squared Error: 2.040816326530613
"""

 


 

Scikit-learn은 머신러닝 학습의 시작점으로 적합

데이터 전처리, 모델 학습, 평가, 하이퍼파라미터 튜닝까지 폭넓게 활용할 수 있는 강력한 도구. 한계는 있지만 다른 라이브러리와 함께 사용하면 이를 보완할 수 있음!

'Python to AI' 카테고리의 다른 글

Anaconda  (3) 2024.12.26
AI/ML/DL  (3) 2024.12.24
Python - Pandas(데이터 프레임 구조 재조정)  (3) 2024.12.18
Machine learning Vol.2  (7) 2024.12.17
Python - Pandas(다차원데이터관리 : MultiIndex)  (4) 2024.12.17