728x90
다중 분류
다중 분류기(다항 분류기) : 둘 이상의 클래스 구별
종류
- SGD분류기, 랜덤 포레스트 분류기, 나이브 베이즈 분류기 등...
- 이진 분류기 (로지스틱 회귀분류기 or 서포트 벡터 머신 분류기 등) 의 조합을 통해서 다중 분류가 가능하다.
- OvR (One - versus - rest) : 특정 숫자 하나만을 구분하는 이진 분류기 10개를 훈련시켜 10개의 클래스에서 "결정 점수가 가장 높은" 것을 선택하는 방식
- OvO (One -versus - one) : 0과 1 구별, 1과 2 구별 등 각 숫자의 조합마다 이진 분류기 훈련시키는 방식 --> (N개의 클래스, 총 N*(N-1)/2개의 분류기 필요)
--> 다중 클래스 작업 시 이진 분류 알고리즘을 선택하면 자동으로 OvO 혹은 OvR 실행 (다중 분류기는 별도로 적용할 필요가 없음)
이진 분류기인 서포트 벡터 머신 활용
from sklearn.svm import SVC
svm_clf = SVC()
svm_clf.fit(X_train, y_train)
svm_clf.predict([some_digit])
--> 0에서 9까지의 원래 타깃 클래스(y_train)를 사용해 SVC훈련
--> OvO 전략을 사용해 10개의 이진 분류기를 훈련시키고 결정 점수를 얻어 가장 높은 점수를 가진 클래스 선택
some_digit_scores = svm_clf.decision_function([some_digit])
some_digit_scores
5번째 클래스의 결정 점수 (9.3132)가 가장 높음 --> 5를 예측하였음
np.argmax(some_digit_scores)
OvO 대신에 OvR 전략을 사용하도록 강제할 수 있음 (SVC 기반으로 OvR전략 사용하는 예제)
from sklearn.multiclass import OneVsRestClassifier
ove_clf = OneVsRestClassifier(SVC())
ove_clf.fit(X_train, y_train)
ove_clf.predict([some_digit])
다중 분류기 훈련 예제(SGD 분류기)
from sklearn.model_linear import SGDClassifier
sgd_clf = SGDClassifier(random_state = 42)
sgd_clf.fit(X_train, y_train)
sgd_clf.predict([some_digit])
sgd_clf.decision_function([some_digit])
--> 이진 분류와 다르게 ovo, ovr 설정하지 않아도 된다.
--> 5를 some_digit로 지정하였는데 3의 결정 점수가 높다... (실제 교재에서도 5와 3의 점수가 높았다.)
스케일링 및 교차 검증을 통한 분류기 평가
from sklearn.preprocessing import StandardScaler
import numpy as np
from sklearn.model_selection import cross_val_score
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train.astype(np.float64))
cross_val_score(sgd_clf, X_train_scaled, y_train, cv = 3, scoring = "accuracy")
다중 분류기
from sklearn.neighbors import KNeighborsClassifier
y_train_large = (y_train >= 7)
y_train_odd = (y_train % 2 == 1)
y_multilabel = np.c_[y_train_large, y_train_odd]
knn_clf = KNeighborsClassifier()
knn_clf.fit(X_train, y_multilabel)
knn_clf.predict([some_digit])
--> 1. 큰 수(7,8,9) 인가? => 2. 홀수인가? 즉, 두 가지의 클래스를 동시에 판별하는 분류기이다.
--> 5에 대하여 1. 큰 수 인가? 는 False, 2. 홀수인가? 는 True로 정확하게 분류하였다.
'핸즈온머신러닝&딥러닝' 카테고리의 다른 글
모델 훈련 2(경사 하강법) (0) | 2021.06.01 |
---|---|
모델 훈련 (수정 필요) (0) | 2021.05.30 |
MNIST 활용, 분류 2 (0) | 2021.05.19 |
MNIST 활용, 분류 (0) | 2021.05.18 |
캘리포니아 주택 가격 예측2 (0) | 2021.05.16 |