Skip to content

Commit d24b5f0

Browse files
committed
fix(metric): skewness and kurtosis when variance=0
1 parent fbd1e42 commit d24b5f0

File tree

1 file changed

+10
-6
lines changed

1 file changed

+10
-6
lines changed

neuralnetlib/metrics.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -574,7 +574,7 @@ def regularized_incomplete_beta(a: float, b: float, x: float) -> float:
574574
return result
575575

576576

577-
def kurtosis(x: np.ndarray) -> float:
577+
def kurtosis(x: np.ndarray, fisher: bool = True) -> float:
578578
if x.ndim != 1:
579579
raise ValueError("Input array must be 1D.")
580580
if x.size < 2:
@@ -586,10 +586,14 @@ def kurtosis(x: np.ndarray) -> float:
586586
m2 = np.mean(deviations**2)
587587
m4 = np.mean(deviations**4)
588588

589-
if m2 == 0:
590-
raise ValueError("Array must have variance greater than 0.")
589+
if m2 <= 1e-15:
590+
return np.nan
591+
592+
kurt = (n * m4) / (m2**2)
593+
594+
if fisher:
595+
kurt -= 3
591596

592-
kurt = (n * m4) / (m2**2) - 3
593597
return kurt
594598

595599

@@ -605,8 +609,8 @@ def skew(x: np.ndarray) -> float:
605609
m2 = np.mean(deviations**2)
606610
m3 = np.mean(deviations**3)
607611

608-
if m2 == 0:
609-
raise ValueError("Array must have variance greater than 0.")
612+
if m2 <= 1e-15:
613+
return np.nan
610614

611615
skewness = (n * m3) / (m2**1.5)
612616
return skewness

0 commit comments

Comments
 (0)