python - 使用 Optuna 进行微调时使超参数加起来为 1
问题描述
我有一个看起来像这样的函数:
def fine_tuning(x,y,model1,model2,model3,trial):
pred1 = model1.predict(x)
pred2 = model2.predict(x)
pred3 = model3.predict(x)
h1 = trial.suggest_float('h1', 0.0001, 1, log = True)
h2 = trial.suggest_float('h1', 0.0001, 1, log = True)
h3 = trial.suggest_float('h1', 0.0001, 1, log = True)
pred = pred1 * h1 + pred2 * h2 + pred3 * h3
return mean_absolute_error(y, pred)
这个函数的问题是 h1+h2+h3 != 1。我将如何更改此函数以使超参数的总和 = 1?
解决方案
基本上,您正在寻找 h1、2、3 的 dirichlet 分布。以下是有关如何为 Optuna 实现该分布的指南:https ://optuna.readthedocs.io/en/latest/faq.html#how-do-我建议变量代表符合狄利克雷分布的比例
推荐阅读
- python - 正则表达式以特定格式匹配当前日期
- python - 将图像从 BGR 更改为 RGB
- react-native - 在解析模块 `react-native/Libraries/NewAppScreen` 时,发现了 Haste 包 `react-native`
- javascript - 在另一个内部创建一个 web 组件并将其附加到另一个上面是不好的做法吗?
- angular - 设置材料表中数组属性中的值
- unit-testing - 有什么方法可以使用 Jest 和 React 测试具有大型数据集的 highcharts。
- mysql - SQL多查询
- data-structures - 每次活动调用的 Power BI 可视化
- reactjs - Visual Studio Code / React - 是否有可能在某处显示所有可能的道具?
- c++ - 如何从文件中检索链表(在 Turbo C++ 中)