Files
RamanClassifier/classifiers/evaluation.py
2024-04-29 15:30:39 +02:00

36 lines
1.6 KiB
Python

from data.data_processing import process_train_test
from sklearn.model_selection import cross_validate, ParameterGrid
def crossvalidate_params(classifier, params, experiments_train, metadata_train, y_train, cv=5):
process_params = {key: params[key] for key in ['baseline_lam', 'baseline_p', 'smooth_window_length', 'smooth_polyorder']}
classifier_params = {key: params[key] for key in params.keys() if key not in ['baseline_lam', 'baseline_p', 'smooth_window_length', 'smooth_polyorder']}
X_train, _ = process_train_test(process_params, experiments_train, metadata_train, scale=True)
clf = classifier(**classifier_params)
return cross_validate(clf, X_train, y_train.to_numpy().ravel(), cv=cv, return_estimator=True)
def param_grid_search(classifier, param_grid, experiments_train, metadata_train, y_train, cv=5):
results = []
for params in ParameterGrid(param_grid):
try:
results.append([params, crossvalidate_params(classifier, params, experiments_train, metadata_train, y_train, cv=cv)])
print(results[-1])
except Exception as e:
pass # print(params, e)
return results
def evaluate_classifier_params(classifier, params, X_train, y_train, X_test, y_test, iters=10):
train_score_mean = 0
test_score_mean = 0
for i in range(iters):
clf = classifier(**params)
clf.fit(X_train, y_train.to_numpy().ravel())
train_score_mean += clf.score(X_train, y_train.to_numpy().ravel())
test_score_mean += clf.score(X_test, y_test.to_numpy().ravel())
return train_score_mean / iters, test_score_mean / iters