Skip to content

Commit 8d24377

Browse files
authored
fix: add epsilon to prevent ZeroDivisionError in BPR-based models (#686)
The BPR zero-division fix (+ 1e-8) was previously applied to recom_bpr.pyx but not to other models that use the same pattern: - cornac/models/companion/recom_companion.pyx - cornac/models/comparer/recom_comparer_sub.pyx - cornac/models/lrppm/recom_lrppm.pyx When all samples are skipped (e.g., on very small datasets), the denominator (n_samples - skipped) becomes 0, causing a ZeroDivisionError during training progress display. Related to #675
1 parent 81e88df commit 8d24377

File tree

3 files changed

+3
-3
lines changed

3 files changed

+3
-3
lines changed

cornac/models/companion/recom_companion.pyx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -497,7 +497,7 @@ class Companion(Recommender):
497497
progress.set_postfix({
498498
"loss": "%.2f" % (loss / 3 / self.n_element_samples),
499499
"bpr_loss": "%.2f" % (bpr_loss / self.n_bpr_samples),
500-
"correct": "%.2f%%" % (100.0 * correct / (self.n_bpr_samples - skipped)),
500+
"correct": "%.2f%%" % (100.0 * correct / (self.n_bpr_samples - skipped + 1e-8)),
501501
"skipped": "%.2f%%" % (100.0 * skipped / self.n_bpr_samples),
502502
})
503503

cornac/models/comparer/recom_comparer_sub.pyx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -472,7 +472,7 @@ class ComparERSub(MTER):
472472
progress.set_postfix({
473473
"loss": "%.2f" % (loss / 3 / self.n_element_samples),
474474
"bpr_loss": "%.2f" % (bpr_loss / self.n_bpr_samples),
475-
"correct": "%.2f%%" % (100.0 * correct / (self.n_bpr_samples - skipped)),
475+
"correct": "%.2f%%" % (100.0 * correct / (self.n_bpr_samples - skipped + 1e-8)),
476476
"skipped": "%.2f%%" % (100.0 * skipped / self.n_bpr_samples)
477477
})
478478

cornac/models/lrppm/recom_lrppm.pyx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -331,7 +331,7 @@ class LRPPM(Recommender):
331331
"loss": "%.2f" % (loss / self.n_samples),
332332
"ranking_loss": "%.2f" % (ranking_loss / (self.n_ranking_samples - skipped)),
333333
"r_loss": "%.2f" % (r_loss / (self.n_ranking_samples - skipped)),
334-
"correct": "%.2f%%" % (100.0 * correct / (self.n_ranking_samples - skipped)),
334+
"correct": "%.2f%%" % (100.0 * correct / (self.n_ranking_samples - skipped + 1e-8)),
335335
"skipped": "%.2f%%" % (100.0 * skipped / self.n_ranking_samples)
336336
})
337337
if (

0 commit comments

Comments
 (0)