好吧,你无意中碰上了冰山......
作为前奏,让我们明确指出方差和标准差的概念仅适用于标量变量;对于矢量变量(比如你自己的3d输出),方差的概念不再有意义,而是使用协方差矩阵(Wikipedia,Wolfram) .
继续前奏,你的 sigma 的形状确实如预期的那样根据 predict 方法的scikit-learn docs(即你的情况下没有编码错误):
返回:y_mean:array,shape =(n_samples,[n_output_dims])查询指向y_std的预测分布的平均值:array,shape =(n_samples,),optional查询点处预测分布的标准偏差 . 仅在return_std为True时返回 . y_cov:array,shape =(n_samples,n_samples),可选的联合预测分布的协方差,查询点 . 仅在return_cov为True时返回 .
结合我之前关于协方差矩阵的评论,第一个选择是尝试使用参数 return_cov=True 的 predict 函数(因为要求矢量变量的方差是没有意义的);但同样,这将导致16x16矩阵,而不是3x3矩阵(3个输出变量的协方差矩阵的预期形状)......
澄清了这些细节之后,让我们继续讨论这个问题的本质 .
问题的核心在于实践和相关教程中很少提及(甚至暗示)的事情:具有多个输出的高斯过程回归是 highly non-trivial ,仍然是一个活跃的研究领域 . 可以说,scikit-learn无法真正处理这个案例,尽管事实上它表面上似乎没有发出至少一些相关的警告 .