@@ -235,19 +235,22 @@ def test_iforest_subsampled_features():
235
235
236
236
237
237
def test_iforest_average_path_length ():
238
+ def harmonic_humber (n ):
239
+ return np .sum (1.0 / np .arange (1 , n + 1 ))
238
240
# It tests non-regression for #8549 which used the wrong formula
239
241
# for average path length, strictly for the integer case
240
242
# Updated to check average path length when input is <= 2 (issue #11839)
241
- result_one = 2.0 * ( np . log ( 4.0 ) + np . euler_gamma ) - 2.0 * 4.0 / 5.0
242
- result_two = 2.0 * ( np . log ( 998.0 ) + np . euler_gamma ) - 2.0 * 998.0 / 999.0
243
+ result_one = 2.0 * harmonic_humber ( 4.0 ) - 2.0 * 4.0 / 5.0
244
+ result_two = 2.0 * harmonic_humber ( 998.0 ) - 2.0 * 998.0 / 999.0
243
245
assert_allclose (_average_path_length ([0 ]), [0.0 ])
244
246
assert_allclose (_average_path_length ([1 ]), [0.0 ])
245
247
assert_allclose (_average_path_length ([2 ]), [1.0 ])
246
- assert_allclose (_average_path_length ([5 ]), [result_one ])
247
- assert_allclose (_average_path_length ([999 ]), [result_two ])
248
+ assert_allclose (_average_path_length ([5 ]), [result_one ], rtol = 0.1 )
249
+ assert_allclose (_average_path_length ([999 ]), [result_two ], rtol = 1e-4 )
248
250
assert_allclose (
249
251
_average_path_length (np .array ([1 , 2 , 5 , 999 ])),
250
252
[0.0 , 1.0 , result_one , result_two ],
253
+ rtol = 0.1
251
254
)
252
255
# _average_path_length is increasing
253
256
avg_path_length = _average_path_length (np .arange (5 ))
0 commit comments