관리 메뉴

KorSA

Scikit-learn HardVoting, SoftVoting 사용법 본문

Data Analysis/Optimizing

Scikit-learn HardVoting, SoftVoting 사용법

Praiv. 2023. 7. 20. 00:42
320x100

 

 

 

머신러닝 전략 중에서 성능을 높이기 위해 사용하는 방법 중 하나는 다수결의 원칙을 따르는 것이다.

 

1과 0중 하나를 예측해야 할 때

모델 A는 1, 모델 B는 0, 모델 C는 1을 예측했다면 다수결에 따라 최종 예측을 1로 한다.

이를 Hard Voting 이라 한다.

 

각 모델은 1과 0을 예측할 때 Hard Voting 처럼 둘 중 하나만 지정할 수도 있고,

0.8의 확률로 1이 예측되고 0.2의 확률로 0이 예측된다고 말할수도 있다.

 

만약

모델 A가 1을 0.8, 0을 0.2의 확률로 예측하고

모델 B가 1을 0.7, 0을 0.3의 확률로 예측하고

모델 C가 1을 0.2, 0을 0.8의 확률로 예측했다면

1의 최종 예측 확률은 (0.8 + 0.7 + 0.2) / 3 = 0.57,

0의 최종 예측 확률은 (0.2 + 0.3 + 0.8) / 3 = 0.43 이므로

최종 예측을 가장 확률이 높은 1 로 하는 방식이다.

이 전략을 Soft Voting 이라 한다.

 

 

나는 둘 다 시도해보고 더 좋은 결과가 나오는 것을 사용하기 때문에 이 두 Voting의 사용법을 남겨두고자 한다..

 

[ Hard Voting 사용법 ]

from sklearn.ensemble import VotingClassifier
from sklearn.ensemble import GradientBoostingClassfier
from sklearn.ensemble import AdaBoostClassifier
from sklearn import model_selection

# hard voting
hard_voting = VotingClassifier(estimators = 
	[('Gradient Boosting', gbc), 
    ('AdaBoost', ada)], # 모델은 각자 사용하고자 하는 모델을 넣어주면 된다.
    voting = 'hard') # hard voting 지정

hard_voting_cv = model_selection.cross_validate(grid_hard, X_train, y_train, cv=10)
hard_voting.fit(X_train, y_train)

print("Hard voting on test set score mean: {:.2f}". format(grid_hard_cv['test_score'].mean() * 100))

 

 

[ Soft Voting 사용법 ]

from sklearn.ensemble import VotingClassifier
from sklearn.ensemble import GradientBoostingClassfier
from sklearn.ensemble import AdaBoostClassifier
from sklearn import model_selection

soft_voting = VotingClassifier(estimators = 
	[('Gradient Boosting', gbc),
	('AdaBoost', ada)], # 모델은 각자 사용하고자 하는 모델을 넣어주면 된다.
    voting = 'soft') # Soft Voting 지정

soft_voting_cv = model_selection.cross_validate(soft_voting, X_train, y_train, cv=10)
soft_voting.fit(X_train, y_train)

print("Soft voting on test set score mean: {:.2f}". format(soft_voting_cv['test_score'].mean() * 100))

 

 

 

728x90
728x90
Comments