我想建议 Optuna 中的比例。
该比率是X_1, X_2, ..., X_k
有界的,∑X_i = 1
并且0 <= X_i <= 1
适用于所有i
。
Optuna 不提供 Dirichlet 分发。
我试过这个,但它不起作用。
def objective(trial):
k = 10
ratios = np.zeros(k)
residual = 1
for i in range(k - 1):
ratios[i] = trial.suggest_float(f'ratio_{i}', 0, residual)
residual -= ratios[i]
# ratios[k - 1] = trial.suggest_float(f'ratio_{k - 1}', residual, residual)
ratios[k - 1] = residual
return np.log(ratios).sum()
study = optuna.create_study(direction='maximize')
study.optimize(objective, n_trials=20)
我试过了,没有任何错误就完成了。但是,这是不一致的,因为自由度是k - 1
有界但建议k
时间的。
def objective(trial):
k = 10
ratios = np.zeros(k)
for i in range(k):
ratios[i] = trial.suggest_float(f'ratio_{i}', 0, 1)
ratios /= ratios.sum()
return np.log(ratios).sum()
study = optuna.create_study(direction='maximize')
study.optimize(objective, n_trials=20)
我如何建议有界的比率或多个变量?
这是一个简单的例子,所以它是可区分的,但我需要更复杂目标中的变量。