from sklearn.datasets import load_iris
from sklearn.ensemble import VotingClassifier
from sklearn.exceptions import ConvergenceWarning
from sklearn.model_selection import GridSearchCV
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.svm import SVC
import warnings
warnings.filterwarnings('ignore', category=ConvergenceWarning)
# Load the iris dataset
iris = load_iris()
# Define X and y
X = iris.data
y = iris.target
# Create a list of base models
base_models = [
('lr', LogisticRegression()),
('dt', DecisionTreeClassifier()),
('svm', SVC(probability=True))
]
# Create the voting classifier
voting = VotingClassifier(base_models)
# Define the hyperparameters to tune
params = {
'lr__C': [0.1, 1.0, 10.0],
'dt__max_depth': [None, 1, 2, 3],
'svm__C': [0.1, 1.0, 10.0],
'voting': ['hard', 'soft']
}
# Perform grid search with cross-validation
grid = GridSearchCV(voting, params, cv=5)
grid.fit(X, y)
# Print the best hyperparameters and the corresponding score
print(grid.best_params_)
print(grid.best_score_)