Skip to content

Commit 1ff7975

Browse files
committed
Fix ruff check in loss_functions.py
1 parent 0ea341a commit 1ff7975

File tree

2 files changed

+14
-5
lines changed

2 files changed

+14
-5
lines changed

Diff for: machine_learning/frequent_pattern_growth.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@ def ascend_tree(leaf_node: TreeNode, prefix_path: list[str]) -> None:
240240
ascend_tree(leaf_node.parent, prefix_path)
241241

242242

243-
def find_prefix_path(base_pat: frozenset, tree_node: TreeNode | None) -> dict: # noqa: ARG001
243+
def find_prefix_path(base_pat: frozenset, tree_node: TreeNode | None) -> dict:
244244
"""
245245
Find the conditional pattern base for a given base pattern.
246246

Diff for: machine_learning/loss_functions.py

+13-4
Original file line numberDiff line numberDiff line change
@@ -629,13 +629,15 @@ def smooth_l1_loss(y_true: np.ndarray, y_pred: np.ndarray, beta: float = 1.0) ->
629629
return np.mean(loss)
630630

631631

632-
def kullback_leibler_divergence(y_true: np.ndarray, y_pred: np.ndarray) -> float:
632+
def kullback_leibler_divergence(
633+
y_true: np.ndarray, y_pred: np.ndarray, epsilon: float = 1e-10
634+
) -> float:
633635
"""
634636
Calculate the Kullback-Leibler divergence (KL divergence) loss between true labels
635637
and predicted probabilities.
636638
637-
KL divergence loss quantifies dissimilarity between true labels and predicted
638-
probabilities. It's often used in training generative models.
639+
KL divergence loss quantifies the dissimilarity between true labels and predicted
640+
probabilities. It is often used in training generative models.
639641
640642
KL = Σ(y_true * ln(y_true / y_pred))
641643
@@ -649,6 +651,7 @@ def kullback_leibler_divergence(y_true: np.ndarray, y_pred: np.ndarray) -> float
649651
>>> predicted_probs = np.array([0.3, 0.3, 0.4])
650652
>>> float(kullback_leibler_divergence(true_labels, predicted_probs))
651653
0.030478754035472025
654+
652655
>>> true_labels = np.array([0.2, 0.3, 0.5])
653656
>>> predicted_probs = np.array([0.3, 0.3, 0.4, 0.5])
654657
>>> kullback_leibler_divergence(true_labels, predicted_probs)
@@ -659,7 +662,13 @@ def kullback_leibler_divergence(y_true: np.ndarray, y_pred: np.ndarray) -> float
659662
if len(y_true) != len(y_pred):
660663
raise ValueError("Input arrays must have the same length.")
661664

662-
kl_loss = y_true * np.log(y_true / y_pred)
665+
# negligible epsilon to avoid issues with log(0) or division by zero
666+
epsilon = 1e-10
667+
y_pred = np.clip(y_pred, epsilon, None)
668+
669+
# calculate KL divergence only where y_true is not zero
670+
kl_loss = np.where(y_true != 0, y_true * np.log(y_true / y_pred), 0.0)
671+
663672
return np.sum(kl_loss)
664673

665674

0 commit comments

Comments
 (0)