Я пытаюсь реализовать функциональность настройки гиперпараметра движка google cloud ml с помощью scikit-optimize (skopt).Я не уверен, как последовательно преобразовать scaleType в ml-engine в skopt.space.Real * prior
s.
Uniform достаточно прост, иlog -iform выглядит эквивалентным в каждом, но я не совсем уверен, что реализация последовательна.Я также не уверен, как реализовать UNIT_REVERSE_LOG_SCALE
движка ml, если LOG_SCALE
соответствует skopt
log-uniform
ранее.Распределение log-uniform
, похоже, ведет себя не так, как хотелось бы для параметров, отличных от 0
- например, если вы хотите масштабировать между 0.9
и 0.999
, распределение близко к равномерному (см. Первый график ниже).
Код и визуализация с использованием skopt
s log-uniform
и нескольких пользовательских преобразований ниже.
#!/usr/bin/python
import numpy as np
import matplotlib.pyplot as plt
import skopt
def sample_custom_log_uniform(min_val, max_val, n_samples):
sample = skopt.space.uniform(0, 1).rvs(n_samples)
return min_val + (10 ** sample - 1) / 9 *(max_val - min_val)
def sample_custom_reverse_log_uniform(min_val, max_val, n_samples):
sample = skopt.space.uniform(0, 1).rvs(n_samples)
return max_val - (10 ** sample - 1) / 9 *(max_val - min_val)
def sample(min_val, max_val, prior='log-uniform', n_samples=100000):
if prior == 'custom-log-uniform':
return sample_custom_log_uniform(min_val, max_val, n_samples)
elif prior == 'custom-reverse-log-uniform':
return sample_custom_reverse_log_uniform(min_val, max_val, n_samples)
else:
return skopt.space.Real(min_val, max_val, prior=prior).rvs(n_samples)
priors = (
'log-uniform', 'custom-log-uniform', 'custom-reverse-log-uniform')
fig, axes = plt.subplots(1, len(priors))
for (prior, ax) in zip(priors, axes):
ax.hist(sample(0.9, 0.999, prior))
ax.set_title(prior)
ax.set_yticklabels([])
plt.show()
![distributions](https://i.stack.imgur.com/hj8nL.png)
Myвопросы:
-
ml engine
реализует LOG_SCALE
как log-uniform
или custom-log-uniform
из вышеперечисленного, или что-то еще? ml engine
реализует REVERSE_LOG_SCALE
как custom-reverse-log-uniform
выше или что-то еще?