GPFlow2.8.1中如何为RBF(SquaredExponential)核配置ARD设置?
GPFlow 2.8.1中RBF核的ARD功能使用说明
GPFlow 2.8.1的RBF(SquaredExponential)核完全支持ARD(Automatic Relevance Determination)功能,你遇到报错是因为参数写法错误,以下是修正方案和说明:
1. 错误原因
你使用了ARD=TRUE,存在两个问题:
- Python的布尔值关键字是
True(首字母大写,其余小写),而非TRUE - GPFlow中RBF核的ARD参数名是小写的
ard,不是大写的ARD
2. 正确的ARD启用方式
直接在初始化RBF核时传入ard=True即可:
# 启用ARD功能,为每个输入维度单独学习长度尺度 kernel = gpflow.kernels.RBF(ard=True)
3. 维度匹配注意事项
开启ARD后,核会为输入数据的每个特征维度生成独立的长度尺度参数,因此需要确保你的输入数据past_query_points的特征维度(即数据的列数)是明确的。比如输入是D维数据,优化后kernel.lengthscales会是一个长度为D的可训练向量。
4. 修正后的完整代码示例
kernel = gpflow.kernels.RBF(ard=True) # 正确启用ARD gpr = gpflow.models.GPR((past_query_points, past_observations), kernel) gpflow.set_trainable(gpr.likelihood, True) gpr.likelihood.variance.assign(1e-5) model = GaussianProcessRegression(gpr) print("Before optimize hyperparameters of GPR") gpflow.utilities.print_summary(gpr) model.optimize(dataset) print("After optimize hyperparameters of GPR") gpflow.utilities.print_summary(gpr)
优化后查看summary,你会看到lengthscales从单一值变成了与输入维度数量一致的向量,这就是ARD生效的标志。
5. 进阶:指定部分维度启用ARD
如果只需要对特定输入维度启用ARD,可以结合active_dims参数选择目标维度:
# 仅对第0和第2维度启用ARD kernel = gpflow.kernels.RBF(ard=True, active_dims=[0, 2])
内容的提问来源于stack exchange,提问作者Toshichika Nakayama
相关产品推荐
相关产品推荐

