MCPcopy
hub / github.com/hyperopt/hyperopt / adaptive_parzen_normal

Function adaptive_parzen_normal

hyperopt/tpe.py:393–460  ·  view source on GitHub ↗

mus - matrix (N, M) of M, N-dimensional component centers

(mus, prior_weight, prior_mu, prior_sigma, LF=DEFAULT_LF)

Source from the content-addressed store, hash-verified

391
392@scope.define_info(o_len=3)
393def adaptive_parzen_normal(mus, prior_weight, prior_mu, prior_sigma, LF=DEFAULT_LF):
394 """
395 mus - matrix (N, M) of M, N-dimensional component centers
396 """
397 mus = np.array(mus)
398 assert str(mus.dtype) != "object"
399
400 if mus.ndim != 1:
401 raise TypeError("mus must be vector", mus)
402 if len(mus) == 0:
403 srtd_mus = np.asarray([prior_mu])
404 sigma = np.asarray([prior_sigma])
405 prior_pos = 0
406 elif len(mus) == 1:
407 if prior_mu < mus[0]:
408 prior_pos = 0
409 srtd_mus = np.asarray([prior_mu, mus[0]])
410 sigma = np.asarray([prior_sigma, prior_sigma * 0.5])
411 else:
412 prior_pos = 1
413 srtd_mus = np.asarray([mus[0], prior_mu])
414 sigma = np.asarray([prior_sigma * 0.5, prior_sigma])
415 elif len(mus) >= 2:
416
417 # create new_mus, which is sorted, and in which
418 # the prior has been inserted
419 order = np.argsort(mus)
420 prior_pos = np.searchsorted(mus[order], prior_mu)
421 srtd_mus = np.zeros(len(mus) + 1)
422 srtd_mus[:prior_pos] = mus[order[:prior_pos]]
423 srtd_mus[prior_pos] = prior_mu
424 srtd_mus[prior_pos + 1 :] = mus[order[prior_pos:]]
425 sigma = np.zeros_like(srtd_mus)
426 sigma[1:-1] = np.maximum(
427 srtd_mus[1:-1] - srtd_mus[0:-2], srtd_mus[2:] - srtd_mus[1:-1]
428 )
429 lsigma = srtd_mus[1] - srtd_mus[0]
430 usigma = srtd_mus[-1] - srtd_mus[-2]
431 sigma[0] = lsigma
432 sigma[-1] = usigma
433
434 if LF and LF < len(mus):
435 unsrtd_weights = linear_forgetting_weights(len(mus), LF)
436 srtd_weights = np.zeros_like(srtd_mus)
437 assert len(unsrtd_weights) + 1 == len(srtd_mus)
438 srtd_weights[:prior_pos] = unsrtd_weights[order[:prior_pos]]
439 srtd_weights[prior_pos] = prior_weight
440 srtd_weights[prior_pos + 1 :] = unsrtd_weights[order[prior_pos:]]
441
442 else:
443 srtd_weights = np.ones(len(srtd_mus))
444 srtd_weights[prior_pos] = prior_weight
445
446 # -- magic formula:
447 maxsigma = old_div(prior_sigma, 1.0)
448 minsigma = old_div(prior_sigma, min(100.0, (1.0 + len(srtd_mus))))
449
450 sigma = np.clip(sigma, minsigma, maxsigma)

Callers

nothing calls this directly

Calls 2

minMethod · 0.80

Tested by

no test coverage detected