Spaces:
Runtime error
Runtime error
""" | |
A script to grid search all parameters provided in parameters.py | |
including both classifiers and regressors. | |
Note that the execution of this script may take hours to search the | |
best possible model parameters for various algorithms, feel free | |
to edit parameters.py on your need ( e.g remove some parameters for | |
faster search ) | |
""" | |
import pickle | |
from emotion_recognition import EmotionRecognizer | |
from parameters import classification_grid_parameters, regression_grid_parameters | |
# emotion classes you want to perform grid search on | |
emotions = ['sad', 'neutral', 'happy'] | |
# number of parallel jobs during the grid search | |
n_jobs = 4 | |
best_estimators = [] | |
for model, params in classification_grid_parameters.items(): | |
if model.__class__.__name__ == "KNeighborsClassifier": | |
# in case of a K-Nearest neighbors algorithm | |
# set number of neighbors to the length of emotions | |
params['n_neighbors'] = [len(emotions)] | |
d = EmotionRecognizer(model, emotions=emotions) | |
d.load_data() | |
best_estimator, best_params, cv_best_score = d.grid_search(params=params, n_jobs=n_jobs) | |
best_estimators.append((best_estimator, best_params, cv_best_score)) | |
print(f"{emotions} {best_estimator.__class__.__name__} achieved {cv_best_score:.3f} cross validation accuracy score!") | |
print(f"[+] Pickling best classifiers for {emotions}...") | |
pickle.dump(best_estimators, open(f"grid/best_classifiers.pickle", "wb")) | |
best_estimators = [] | |
for model, params in regression_grid_parameters.items(): | |
if model.__class__.__name__ == "KNeighborsRegressor": | |
# in case of a K-Nearest neighbors algorithm | |
# set number of neighbors to the length of emotions | |
params['n_neighbors'] = [len(emotions)] | |
d = EmotionRecognizer(model, emotions=emotions, classification=False) | |
d.load_data() | |
best_estimator, best_params, cv_best_score = d.grid_search(params=params, n_jobs=n_jobs) | |
best_estimators.append((best_estimator, best_params, cv_best_score)) | |
print(f"{emotions} {best_estimator.__class__.__name__} achieved {cv_best_score:.3f} cross validation MAE score!") | |
print(f"[+] Pickling best regressors for {emotions}...") | |
pickle.dump(best_estimators, open(f"grid/best_regressors.pickle", "wb")) | |
# Best for SVC: C=0.001, gamma=0.001, kernel='poly' | |
# Best for AdaBoostClassifier: {'algorithm': 'SAMME', 'learning_rate': 0.8, 'n_estimators': 60} | |
# Best for RandomForestClassifier: {'max_depth': 7, 'max_features': 0.5, 'min_samples_leaf': 1, 'min_samples_split': 2, 'n_estimators': 40} | |
# Best for GradientBoostingClassifier: {'learning_rate': 0.3, 'max_depth': 7, 'max_features': None, 'min_samples_leaf': 1, 'min_samples_split': 2, 'n_estimators': 70, 'subsample': 0.7} | |
# Best for DecisionTreeClassifier: {'criterion': 'entropy', 'max_depth': 7, 'max_features': None, 'min_samples_leaf': 1, 'min_samples_split': 2} | |
# Best for KNeighborsClassifier: {'n_neighbors': 5, 'p': 1, 'weights': 'distance'} | |
# Best for MLPClassifier: {'alpha': 0.005, 'batch_size': 256, 'hidden_layer_sizes': (300,), 'learning_rate': 'adaptive', 'max_iter': 500} |