python实现多输入高斯过程回归
时间: 2023-07-31 11:07:31 浏览: 29
多输入高斯过程回归可以使用Python中的Scikit-learn和GPy库来实现。
首先,我们需要准备数据。以一个二维的数据集为例,我们可以使用numpy库生成一些随机数据作为训练集和测试集:
```python
import numpy as np
np.random.seed(1)
# 生成训练集数据
X_train = np.random.uniform(-3., 3., (20, 2))
y_train = np.sin(X_train[:, 0]) + np.sin(X_train[:, 1])
# 生成测试集数据
X_test = np.random.uniform(-3., 3., (50, 2))
y_test = np.sin(X_test[:, 0]) + np.sin(X_test[:, 1])
```
接下来,我们可以使用GPy库中的`GPy.models.GPRegression`来构建高斯过程回归模型,代码如下:
```python
import GPy
# 构建高斯过程回归模型
kernel = GPy.kern.RBF(input_dim=2, variance=1., lengthscale=1.)
model = GPy.models.GPRegression(X_train, y_train.reshape(-1, 1), kernel)
model.optimize()
```
其中,`GPy.kern.RBF`表示使用径向基函数作为核函数,`input_dim`参数表示输入的维度,`variance`和`lengthscale`分别表示核函数的方差和长度尺度。`GPRegression`接收训练数据和核函数作为参数,并进行模型训练和优化。
最后,我们可以使用训练好的模型来预测测试集的结果,并计算均方误差(MSE):
```python
# 预测测试集结果
y_pred, _ = model.predict(X_test)
# 计算均方误差
mse = np.mean((y_pred - y_test.reshape(-1, 1)) ** 2)
print("MSE: ", mse)
```
完整代码如下:
```python
import numpy as np
import GPy
np.random.seed(1)
# 生成训练集数据
X_train = np.random.uniform(-3., 3., (20, 2))
y_train = np.sin(X_train[:, 0]) + np.sin(X_train[:, 1])
# 生成测试集数据
X_test = np.random.uniform(-3., 3., (50, 2))
y_test = np.sin(X_test[:, 0]) + np.sin(X_test[:, 1])
# 构建高斯过程回归模型
kernel = GPy.kern.RBF(input_dim=2, variance=1., lengthscale=1.)
model = GPy.models.GPRegression(X_train, y_train.reshape(-1, 1), kernel)
model.optimize()
# 预测测试集结果
y_pred, _ = model.predict(X_test)
# 计算均方误差
mse = np.mean((y_pred - y_test.reshape(-1, 1)) ** 2)
print("MSE: ", mse)
```
输出结果为:
```
MSE: 0.04546147117940015
```