2022-11-04 15:04:36 +01:00
|
|
|
import numpy as np
|
2022-12-12 09:34:09 +01:00
|
|
|
from sklearn.calibration import CalibratedClassifierCV
|
2022-11-04 15:04:36 +01:00
|
|
|
from sklearn.linear_model import LogisticRegression
|
|
|
|
import quapy as qp
|
2022-12-12 09:34:09 +01:00
|
|
|
import quapy.functional as F
|
2022-11-04 15:04:36 +01:00
|
|
|
from data.datasets import LEQUA2022_SAMPLE_SIZE, fetch_lequa2022
|
|
|
|
from evaluation import evaluation_report
|
|
|
|
from method.aggregative import EMQ
|
|
|
|
from model_selection import GridSearchQ
|
2022-11-04 15:15:12 +01:00
|
|
|
import pandas as pd
|
2022-11-04 15:04:36 +01:00
|
|
|
|
|
|
|
|
|
|
|
task = 'T1A'
|
|
|
|
|
2022-11-04 15:06:08 +01:00
|
|
|
qp.environ['SAMPLE_SIZE'] = LEQUA2022_SAMPLE_SIZE[task]
|
2022-11-04 15:04:36 +01:00
|
|
|
training, val_generator, test_generator = fetch_lequa2022(task=task)
|
|
|
|
|
|
|
|
# define the quantifier
|
2022-12-12 09:34:09 +01:00
|
|
|
learner = CalibratedClassifierCV(LogisticRegression())
|
|
|
|
quantifier = EMQ(learner=learner)
|
2022-11-04 15:04:36 +01:00
|
|
|
|
|
|
|
# model selection
|
|
|
|
param_grid = {'C': np.logspace(-3, 3, 7), 'class_weight': ['balanced', None]}
|
|
|
|
model_selection = GridSearchQ(quantifier, param_grid, protocol=val_generator, n_jobs=-1, refit=False, verbose=True)
|
|
|
|
quantifier = model_selection.fit(training)
|
|
|
|
|
|
|
|
# evaluation
|
2022-11-04 15:15:12 +01:00
|
|
|
report = evaluation_report(quantifier, protocol=test_generator, error_metrics=['mae', 'mrae', 'mkld'], verbose=True)
|
2022-11-04 15:04:36 +01:00
|
|
|
|
2022-12-12 09:34:09 +01:00
|
|
|
# printing results
|
|
|
|
pd.set_option('display.expand_frame_repr', False)
|
|
|
|
report['estim-prev'] = report['estim-prev'].map(F.strprev)
|
2022-11-04 15:04:36 +01:00
|
|
|
print(report)
|
2022-12-12 09:34:09 +01:00
|
|
|
|
|
|
|
print('Averaged values:')
|
|
|
|
print(report.mean())
|