【问题标题】:ValueError when using Bayesian Optimization over a scikit GP model在 scikit GP 模型上使用贝叶斯优化时出现 ValueError
【发布时间】:2020-08-03 13:47:02
【问题描述】:

我正在使用具有 4 个输入和一个输出的高斯过程回归。目标是通过对拟合模型执行贝叶斯优化来找到最优 X。

我用以下方式拟合模型:

kernel = C(1.0, (1e-4, 1e4))*RBF(1.0,(1e-3,1e3))
model = GaussianProcessRegressor(kernel = kernel, n_restarts_optimizer = 10,optimizer='fmin_l_bfgs_b')           
model.fit(X,Y)

到目前为止,这就是我用来执行优化的方法:

bayesian_optimization = gp_minimize(lambda x: -model.predict(np.array([x])[0]),   
                        [(0.0, 7.0), (0.0, 7.0),(0.0, 7.0),(0.0, 7.0)],                                        
                        acq_func="EI",                                         
                        n_calls=15,                                            
                        n_random_starts=5,                                     
                        random_state=1234)

我不断收到以下错误:

ValueError: Expected 2D array, got 1D array instead:
array=[3.48364567 5.72486909 4.28478326 5.39951943].
Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.

不确定是否可以解决问题,我已经尝试过:


bayesian_optimization = gp_minimize(lambda x: -model.predict(np.array([x]).reshape(1,-1)[0]),   
                        [(0.0, 7.0), (0.0, 7.0),(0.0, 7.0),(0.0, 7.0)],                                        
                        acq_func="EI",                                         
                        n_calls=15,                                            
                        n_random_starts=5,                                     
                        random_state=1234)                                     

bayesian_optimization = gp_minimize(lambda x: -model.predict(np.array([x]).reshape(-1, 1)[0]),   
                        [(0.0, 7.0), (0.0, 7.0),(0.0, 7.0),(0.0, 7.0)],                                        
                        acq_func="EI",                                         
                        n_calls=15,                                            
                        n_random_starts=5,                                     
                        random_state=1234)     

但没有成功。有关如何克服此类问题的任何想法?

【问题讨论】:

    标签: python machine-learning scikit-learn scikit-optimize skopt


    【解决方案1】:

    在您的第一个选项中,您调用了 model.predict(np.array([x])[0]),当您将一维数组传递给 预测方法。 相反,您需要model.predict(np.array([x]))[0]

    使用非匿名目标函数可能更容易发现此错误,例如

    def objective(x):
        x = np.array([x])
        return - model.predict(x)[0]
    

    【讨论】:

      猜你喜欢
      • 2019-09-26
      • 2021-12-15
      • 2023-01-13
      • 2019-09-14
      • 1970-01-01
      • 2015-09-16
      • 1970-01-01
      • 2021-02-09
      • 2019-09-22
      相关资源
      最近更新 更多