|
19 | 19 | from sklearn.externals import six |
20 | 20 | from warnings import warn |
21 | 21 | from sklearn.utils import check_array |
| 22 | +from sklearn.externals.joblib.parallel import cpu_count |
22 | 23 |
|
23 | 24 | from scipy.sparse import csgraph |
24 | 25 |
|
@@ -239,7 +240,7 @@ def _hdbscan_boruvka_kdtree(X, min_samples=5, alpha=1.0, |
239 | 240 | leaf_size = 3 |
240 | 241 |
|
241 | 242 | if core_dist_n_jobs < 1: |
242 | | - raise ValueError('Parallel core distance computation requires 1 or more jobs!') |
| 243 | + core_dist_n_jobs = max(cpu_count() + 1 + core_dist_n_jobs, 1) |
243 | 244 |
|
244 | 245 | tree = KDTree(X, metric=metric, leaf_size=leaf_size, **kwargs) |
245 | 246 | alg = KDTreeBoruvkaAlgorithm(tree, min_samples, metric=metric, leaf_size=leaf_size // 3, |
@@ -267,7 +268,7 @@ def _hdbscan_boruvka_balltree(X, min_samples=5, alpha=1.0, |
267 | 268 | leaf_size = 3 |
268 | 269 |
|
269 | 270 | if core_dist_n_jobs < 1: |
270 | | - raise ValueError('Parallel core distance computation requires 1 or more jobs!') |
| 271 | + core_dist_n_jobs = max(cpu_count() + 1 + core_dist_n_jobs, 1) |
271 | 272 |
|
272 | 273 | tree = BallTree(X, metric=metric, leaf_size=leaf_size, **kwargs) |
273 | 274 | alg = BallTreeBoruvkaAlgorithm(tree, min_samples, metric=metric, leaf_size=leaf_size // 3, |
@@ -362,7 +363,8 @@ def hdbscan(X, min_cluster_size=5, min_samples=None, alpha=1.0, |
362 | 363 |
|
363 | 364 | core_dist_n_jobs : int, optional |
364 | 365 | Number of parallel jobs to run in core distance computations (if |
365 | | - supported by the specific algorithm). |
| 366 | + supported by the specific algorithm). For ``core_dist_n_jobs`` |
| 367 | + below -1, (n_cpus + 1 + core_dist_n_jobs) are used. |
366 | 368 | (default 4) |
367 | 369 |
|
368 | 370 |
|
|
0 commit comments