Machine Learning cu modele bazate pe arbori în Python
Elie Kawerk
Data Scientist
Model de machine learning:
parametri: învățați din date
hiperparametri: nu sunt învățați din date, stabiliți înainte de antrenare
max_depth, min_samples_leaf, criteriul de divizare ...Problemă: căutarea unui set de hiperparametri optimi pentru un algoritm de învățare.
Soluție: identificarea setului de hiperparametri optimi care produce un model optim.
Model optim: obține un scor optim.
Scor: în sklearn, implicit este acuratețea (clasificare) și $R^2$ (regresie).
Validarea încrucișată este utilizată pentru a estima performanța de generalizare.
În sklearn, hiperparametrii impliciți ai unui model nu sunt optimi pentru toate problemele.
Hiperparametrii trebuie ajustați pentru a obține cea mai bună performanță a modelului.
Căutare în grilă
Căutare aleatorie
Optimizare bayesiană
Algoritmi genetici
....
Definiți manual o grilă de valori discrete pentru hiperparametri.
Stabiliți o metrică pentru evaluarea performanței modelului.
Căutați exhaustiv prin grilă.
Pentru fiecare set de hiperparametri, evaluați scorul CV al modelului.
Hiperparametrii optimi sunt cei ai modelului cu cel mai bun scor CV.
max_depth = {2,3,4},min_samples_leaf = {0.05, 0.1}# Import DecisionTreeClassifier
from sklearn.tree import DecisionTreeClassifier
# Set seed to 1 for reproducibility
SEED = 1
# Instantiate a DecisionTreeClassifier 'dt'
dt = DecisionTreeClassifier(random_state=SEED)
# Print out 'dt's hyperparameters
print(dt.get_params())
{'class_weight': None,
'criterion': 'gini',
'max_depth': None,
'max_features': None,
'max_leaf_nodes': None,
'min_impurity_decrease': 0.0,
'min_impurity_split': None,
'min_samples_leaf': 1,
'min_samples_split': 2,
'min_weight_fraction_leaf': 0.0,
'presort': False,
'random_state': 1,
'splitter': 'best'}
# Import GridSearchCV from sklearn.model_selection import GridSearchCV# Define the grid of hyperparameters 'params_dt' params_dt = { 'max_depth': [3, 4,5, 6], 'min_samples_leaf': [0.04, 0.06, 0.08], 'max_features': [0.2, 0.4,0.6, 0.8] }# Instantiate a 10-fold CV grid search object 'grid_dt' grid_dt = GridSearchCV(estimator=dt, param_grid=params_dt, scoring='accuracy', cv=10, n_jobs=-1)# Fit 'grid_dt' to the training data grid_dt.fit(X_train, y_train)
# Extract best hyperparameters from 'grid_dt'
best_hyperparams = grid_dt.best_params_
print('Best hyerparameters:\n', best_hyperparams)
Best hyerparameters:
{'max_depth': 3, 'max_features': 0.4, 'min_samples_leaf': 0.06}
# Extract best CV score from 'grid_dt'
best_CV_score = grid_dt.best_score_
print('Best CV accuracy'.format(best_CV_score))
Best CV accuracy: 0.938
# Extract best model from 'grid_dt' best_model = grid_dt.best_estimator_# Evaluate test set accuracy test_acc = best_model.score(X_test,y_test) # Print test set accuracy print("Test set accuracy of best model: {:.3f}".format(test_acc))
Test set accuracy of best model: 0.947
Machine Learning cu modele bazate pe arbori în Python