728x90
반응형
개요
Scikit-Learn은 수많은 머신러닝 알고리즘을 제공하는 Python 기반 대표 라이브러리입니다.
여기서 제공하는 모델들은 기능과 사용 목적에 따라 5가지 유형으로 나눌 수 있고, 이 각각은 sklearn-onnx에서도 ONNX로 변환 가능한 구조의 기준이 됩니다.
이 글에서는 각 타입의 개념, 주요 모델, 변환 특징, ONNX 사용 시 고려 사항까지 정리해 보겠습니다.
1. Classifier (분류기)
개념
입력 데이터를 미리 정의된 클래스(Label) 중 하나로 분류하는 지도 학습 모델
주요 특징
- 출력값이 이산형 (discrete) 클래스 값 (예: [0, 1], ['cat', 'dog'])
- fit(X, y)로 학습 → predict(X)로 예측
- 확률 예측 가능: predict_proba(X)
대표 알고리즘
- 로지스틱 회귀 (LogisticRegression): 이진 분류
- 랜덤 포레스트 (RandomForestClassifier): 앙상블 기반 분류기
- 서포트 벡터 머신 (SVC)
- K-최근접 이웃 (KNeighborsClassifier)
- 신경망 분류기 (MLPClassifier)
내부적으로는?
- 대부분의 classifier는 손실 함수 (loss function)를 최소화하는 방식으로 학습
- cross-entropy, hinge loss 등에 사용
from sklearn.linear_model import LogisticRegression
clf = LogisticRegression()
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
2. Regressor (회귀기)
개념
입력 데이터로부터 연속적인 수치 값을 예측하는 지도 학습 모델
주요 특징
- 출력값이 실수형 (float)
- 예: 가격, 점수, 확률, 거리 등
- 평가 지표: R², MSE, MAE
대표 알고리즘
- 선형 회귀 (LinearRegression)
- 릿지 회귀 (Ridge), 라쏘 회귀 (Lasso)
- 서포트 벡터 회귀 (SVR)
- 랜덤 포레스트 회귀기 (RandomForestRegressor)
내부적으로는?
- 손실 함수로 보통 Mean Squared Error (MSE) 또는 Mean Absolute Error (MAE)를 사용
- 확률 분포 기반 회귀(BayesianRidge)도 존재
3. Clusterer (클러스터링 모델)
개념
정답(label) 없이 데이터를 그룹화(Clustering) 하는 비지도 학습 모델
주요 특징
- 출력값은 클러스터 번호 (예: [0, 1, 2])
- 정답 레이블이 없어도 데이터를 분류
- 군집화 성능 평가는 Silhouette Score, DB Index 등
대표 알고리즘
- KMeans
- DBSCAN
- MeanShift
- Agglomerative Clustering
내부적으로는?
- 거리 기반 (Euclidean, Manhattan) 또는 밀도 기반
- 초기 중심점 설정, 군집 수 결정이 성능에 영향
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=3)
kmeans.fit(X)
labels = kmeans.labels_
4. Transformer (변환기 / 전처리기)
개념
입력 데이터를 변환하거나 축소, 인코딩, 정규화 등을 수행하는 전처리기
주요 특징
- fit(X) 또는 fit(X, y) 후 transform(X)을 호출
- 때로는 fit_transform(X) 한 번에 사용
대표 알고리즘
- 스케일링: StandardScaler, MinMaxScaler
- 차원 축소: PCA, TruncatedSVD
- 범주형 처리: OneHotEncoder, LabelEncoder
- 특징 선택: SelectKBest, VarianceThreshold
내부적으로는?
- 보통 입력 X를 수학적 변환을 통해 새로운 X'로 바꾸는 역할
- 출력은 입력과 같은 모양이거나 축소된 형태
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
5. Pipeline & Meta-Estimator (파이프라인, 메타모델)
개념
여러 단계를 하나의 흐름(Pipeline)으로 연결하거나,여러 모델을 결합하는 앙상블 구조(Meta) 모델
주요 특징
- 전처리 → 학습 → 예측을 하나로 묶을 수 있음
- fit(), predict()는 최종 예측기만 적용됨
대표 구조
- Pipeline: 전처리 + 모델 하나로 묶기
- VotingClassifier, StackingClassifier: 여러 분류기 결합
- GridSearchCV, RandomizedSearchCV: 하이퍼파라미터 튜닝
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
pipe = Pipeline([
("scaler", StandardScaler()),
("clf", LogisticRegression())
])
pipe.fit(X_train, y_train)
6. 변환 시 sklearn-onnx에서의 고려사항
모델 | 변환 가능 여부 | 특이점 |
Classifier | ✅ 대부분 가능 | predict_proba 지원 여부 주의 |
Regressor | ✅ 대부분 가능 | 연속 출력 예측 가능 |
Clusterer | ✅ 대부분 가능 | fit() 후 labels_ 필요 |
Transformer | ✅ 대부분 가능 | fit_transform()으로 테스트 |
Pipeline | ✅ 가능 (모든 구성 요소가 지원될 경우) | 내부 구성요소 모두 지원되는지 확인 필수 |
이상으로 Scikit-Learn 에 대한 간단한 개념을 소개했습니다.
다음에는 각각의 카테고리별 모델을 onnx 로 변환하는 코드를 소개하겠습니다.
감사합니다.
728x90
반응형
'딥러닝 (Deep Learning) > [03] - 모델' 카테고리의 다른 글
Embedding과 Hidden State 완전 정복 -벡터로 단어와 기억을 표현하는 방법 (0) | 2025.04.09 |
---|---|
Sklearn-onnx 모델을 onnx 변환 방법 (with 성능 비교) (0) | 2025.04.03 |
Maskformer (0) | 2024.11.27 |
U-Net3++ (0) | 2024.11.22 |
DeepLab v1 아키텍쳐 분석 (1) | 2024.11.20 |