Skip to content

Commit 756b7f4

Browse files
feat: changed single funcionallity for get_best_mergin_factor to best_mixture for compactability with mixture models in QuaDapt class
1 parent 8b0921b commit 756b7f4

1 file changed

Lines changed: 18 additions & 31 deletions

File tree

mlquantify/meta/_classes.py

Lines changed: 18 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -696,29 +696,25 @@ def predict(self, X):
696696

697697
def aggregate(self, predictions, train_y_values):
698698

699-
pos_predictions = predictions[:, 1]
700-
m = self.get_best_merging_factor(pos_predictions)
699+
prevalence, _, _ = self.best_mixture(predictions)
700+
prevalences = np.asarray([1-prevalence, prevalence])
701701

702702
self.classes = self.classes if hasattr(self, 'classes') else np.unique(train_y_values)
703-
704-
moss_scores, moss_labels = self.MoSS(1000, 0.5, m)
705-
706-
prevalences = self.quantifier.aggregate(predictions,
707-
moss_scores,
708-
moss_labels)
709703

710-
prevalences = {self.classes[i]: v for i, v in enumerate(prevalences.values())}
704+
prevalences = validate_prevalences(self, prevalences, self.classes)
711705
return prevalences
712706

713707

714-
def get_best_merging_factor(self, predictions):
708+
def best_mixture(self, predictions):
709+
predictions = predictions[:, 1]
715710

716711
MF = np.atleast_1d(np.round(self.merging_factors, 2)).astype(float)
717712

718713
distances = []
714+
alphas = []
719715

720716
for mf in MF:
721-
scores, labels = self.MoSS(1000, 0.5, mf)
717+
scores, labels = self.MoSS(n=1000, alpha=0.5, merging_factor=mf)
722718
pos_scores = scores[labels == 1][:, 1]
723719
neg_scores = scores[labels == 0][:, 1]
724720

@@ -727,34 +723,25 @@ def get_best_merging_factor(self, predictions):
727723
elif self.measure == "sord":
728724
method = SORD()
729725

730-
best_distance = method.get_best_distance(predictions, pos_scores, neg_scores)
726+
alpha, distance = method.best_mixture(predictions, pos_scores, neg_scores)
731727

732-
distances.append(best_distance)
728+
distances.append(distance)
729+
alphas.append(alpha)
733730

734731
best_m = MF[np.argmin(distances)]
735-
return best_m
732+
best_alpha = alphas[np.argmin(distances)]
733+
best_distance = np.min(distances)
734+
return best_alpha, best_distance, best_m
736735

737736
def get_best_distance(self, predictions):
738737

739-
pos_predictions = predictions[:, 1]
740-
m = self.get_best_merging_factor(pos_predictions)
741-
742-
scores, labels = self.MoSS(1000, 0.5, m)
743-
744-
pos_scores = scores[labels == 1][:, 1]
745-
neg_scores = scores[labels == 0][:, 1]
746-
747-
if self.measure in ["hellinger", "topsoe", "probsymm"]:
748-
method = DyS(measure=self.measure)
749-
elif self.measure == "sord":
750-
method = SORD()
738+
_, distance, _= self.get_best_merging_factor(predictions)
751739

752-
best_distance = method.get_best_distance(predictions, pos_scores, neg_scores)
753-
return best_distance
740+
return distance
754741

755742

756743
@classmethod
757-
def MoSS(cls, n, alpha, m):
744+
def MoSS(cls, n, alpha, merging_factor):
758745
r"""Model for Score Simulation
759746
760747
Parameters
@@ -797,9 +784,9 @@ def MoSS(cls, n, alpha, m):
797784
n_neg = n - n_pos
798785

799786
# Scores positivos
800-
p_score = np.random.uniform(size=n_pos) ** m
787+
p_score = np.random.uniform(size=n_pos) ** merging_factor
801788
# Scores negativos
802-
n_score = 1 - (np.random.uniform(size=n_neg) ** m)
789+
n_score = 1 - (np.random.uniform(size=n_neg) ** merging_factor)
803790

804791
# Construção dos arrays de features (duas colunas iguais)
805792
moss = np.column_stack(

0 commit comments

Comments
 (0)