sklearn高斯过程回归拟合自定义数据时X,y赋值问题求解
问题原因
你看到的X, y = ???(n_samples=500, noise=0, random_state=0)是sklearn官方示例里自带的模拟数据生成代码,作用是生成演示用的假数据,和你自有数据的拟合场景无关。你已经通过拉丁超立方采样生成了输入特征、通过目标函数计算了对应标签,直接用自己生成的数据集即可,不需要保留这行模拟数据生成逻辑。
可直接运行的修正代码
import numpy as np from scipy.stats import qmc from sklearn.gaussian_process import GaussianProcessRegressor from sklearn.gaussian_process.kernels import DotProduct, WhiteKernel # 定义目标函数 def objectives (h,b,l,t): f1 = 1.10471*(h**2)*l + 0.04811*t*b*(14.0 + l) f2 = 2.1952 / (t**3)*b return f1,f2 # 采样生成输入特征矩阵X,需要500个样本就把sample_num改成500 sample_num = 100 sampler = qmc.LatinHypercube(d=4, seed=0) u_bounds = np.array([5.0, 5.0, 10.0, 10.0]) l_bounds = np.array([0.125, 0.125, 0.1, 0.1]) X = sampler.random(n=sample_num) * (u_bounds - l_bounds) + l_bounds # 如果你用的是旧版scipy接口,把上面一行替换成你原来的写法即可: # X = sampler.lhs_method(sample_num)*(u_bounds-(l_bounds)) + (l_bounds) # 计算对应标签y y = np.zeros((sample_num, 2)) for i in range(X.shape[0]): y[i,0], y[i,1] = objectives(X[i,0], X[i,1], X[i,2], X[i,3]) # 模型训练 kernel = DotProduct() + WhiteKernel() gpr = GaussianProcessRegressor(kernel=kernel, random_state=0).fit(X, y) # 输出训练集R²得分 print(gpr.score(X, y))
补充说明
- 高斯过程回归对核函数选择敏感,你当前选的
DotProduct核更适合线性趋势的数据,如果你的目标函数是非线性平滑的,建议替换成Matern核或者RBF核,拟合效果会明显提升。 - 目前sklearn的原生多输出GPR是对每个输出单独建模,如果需要捕捉两个目标函数之间的相关性,需要用
MultiOutputRegressor包装或者使用支持多输出相关性的核结构。
内容的提问来源于stack exchange,提问作者Espejito
相关产品推荐
相关产品推荐

