MNIST 데이터를 불러들여 훈련 세트, 검증 세트, 테스트 세트로 나눈다. 그런 다음 랜덤 포레스트 분류기, 엑스트라 트리 분류기, SVM 분류기 같은 여러 종류의 분류기를 훈련시킨다. 그리고 검증 세트에서 개개의 분류기보다 더 높은 성능을 내도록 이들을 간접 또는 직접 투표 방법을 사용해 앙상블로 연결해보자. 앙상블을 얻고 나면 테스트 세트도 확인해보자.
from sklearn.datasets import fetch_openml
mnist=fetch_openml('mnist_784',version=1)
from sklearn.model_selection import train_test_split
X_train_val,X_test,y_train_val,y_test=train_test_split(
mnist.data,mnist.target,test_size=10000,random_state=42
)
X_train,X_val,y_train,y_val=train_test_split(
X_train_val,y_train_val,test_size=10000,random_state=42
)
train, val ,test 데이터셋이 각각 60000,10000,10000개로 나누어 졌다.
사용할 분류기들을 import 해놓는다.
from sklearn.ensemble import RandomForestClassifier,ExtraTreesClassifier
from sklearn.svm import LinearSVC
random_forest_clf=RandomForestClassifier(n_estimators=100,random_state=42)
extra_trees_clf=ExtraTreesClassifier(n_estimators=100,random_state=42)
svm_clf=LinearSVC(max_iter=100,tol=20,random_state=42)
estimators=[random_forest_clf,extra_trees_clf,svm_clf]
for estimator in estimators:
print('Training the',estimator)
estimator.fit(X_train,y_train)
검증 세트로 각각 분류기마다 성능을 확인해보자.
for estimator in estimators:
print(estimator.score(X_val,y_val))
보이는것과 같이 SVM이 다른 분류기보다 성능이 많이 떨어진다.
검증 세트에서 개개의 분류기보다 더 높은 성능을 내도록 이들을 간접 또는 직접 투표 분류기를 사용하는 앙상블로 연결해보자.
from sklearn.ensemble import VotingClassifier
named_estimators = [
("random_forest_clf", random_forest_clf),
("extra_trees_clf", extra_trees_clf),
("svm_clf", svm_clf),
]
voting_clf = VotingClassifier(named_estimators)
voting_clf.fit(X_train, y_train)
이제 검증 세트로 성능을 평가해보자.
voting_clf.score(X_val, y_val)
SVM 모델을 제거해서 성능이 향상되는지 확인해 보자. 다음과 같이 set_params() 를 사용하여 None으로 지정하면 특정 예측기를 제외시킬 수 있다.
voting_clf.set_params(svm_clf=None)
voting_clf.estimators
예측기 목록이 없데이트 되었다. 하지만 훈련된 예측기 목록은 업데이트되지 않았다.
voting_clf.estimators_
VotingClassifer를 다시 훈련시키거나 그냥 훈련된 예측기 목록에서 SVM 모델을 제거할 수 있다.
del voting_clf.estimators_[2]
VotingClassifer를 다시 평가해보자.
voting_clf.score(X_val,y_val)
훨씬 나아졌다. SVM 모델이 성능을 저하시켰다. 이제 간접 투표 분류기를 사용해 보자. 분류기를 다시 훈련시킬 필요는 없고 voting을 'soft'로 지정하면 된다.
voting_clf.voting='soft'
voting_clf.score(X_val,y_val)
앙상블을 얻었으니 테스트 세트로 확인해보자.
voting_clf.voting='hard'
voting_clf.score(X_test,y_test)
for estimator in estimators:
print(estimator.score(X_test,y_test))
'모델 실습' 카테고리의 다른 글
tf.keras를 사용한 Neural Style Transfer (0) | 2021.06.16 |
---|---|
5. 심층 신경망 실습 (0) | 2021.06.07 |
4. 다층 퍼셉트론 실습 (학습률을 바꿔가면서 학습하기) (0) | 2021.06.03 |
3. 비지도학습 - 실습 (0) | 2021.05.30 |
1. 서포트 벡터 머신(SVM) 실습 (0) | 2021.05.20 |