我在机器学习方面已经工作了大约一年,但主要是使用大型数据集。但是,我目前正在处理一个非常小的数据集的问题。这是我的问题:我正在制造一种火箭燃料,含有4种成分,x1,x2,x3,x4,我想要最大限度地提高反应强度,y。我已经将它们混合在下面的排列中,以得到相应的值。
发布于 2018-03-15 19:48:33
发布于 2019-01-21 17:41:29
这对于主动学习来说是一个完美的问题。基于贝叶斯优化的方法对于优化代价昂贵的黑匣子函数(即在实验室中进行实验)具有特别强大的作用。有几个BO包可能是有兴趣的,马丁·克里泽的博客有一个很好的概述。
我注意到你上一次实验中的特性加起来并不等于1,我假设这是一个错误。在演示中,我将该条目更改为x2 = 0.6。
下面是我在python中使用GPyOpt (一种基于高斯过程的包)提供的示例:
import numpy as np
import GPyOpt
x_init = np.array([[0.9,0.0,0.1,0.0],
[0.0,0.9,0.1,0.0],
[0.45,0.45,0.0,0.1],
[0.6,0.3,0.05,0.05],
[0.3,0.6,0.05,0.05]])
y_init = np.array([[16.5],[8.6],[12.6],[18.9],[9.8]])*(-1)
domain = [{'name': 'x1', 'type': 'continuous', 'domain': (0,1.0)},
{'name': 'x2', 'type': 'continuous', 'domain': (0,1.0)},
{'name': 'x3', 'type': 'continuous', 'domain': (0,1.0)},
{'name': 'x4', 'type': 'continuous', 'domain': (0,1.0)}
]
constraints = [
{'name':'const_1', 'constraint': '(x[:,0] + x[:,1] + x[:,2] + x[:,3]) - 1 - 0.001'},
{'name':'const_2', 'constraint': '1 - (x[:,0] + x[:,1] + x[:,2] + x[:,3]) - 0.001'}
]
bo_step = GPyOpt.methods.BayesianOptimization(
f = None,
domain = domain,
constraints = constraints,
X = x_init,
Y = y_init
)
x_next = bo_step.suggest_next_locations()
print(x_next)
print(np.sum(x_next))备注:
(1) GPyOpt只接受某种形式的约束,这就是为什么在区间0.999,1.001上存在2的原因。
(2) GPyOpt的建立是为了最小化函数。因此,我将目标值乘以-1。
这个例子建议您的下一个实验应该在以下位置运行:
x1 = 0.69 x2 = 0.21 x3 = 0.08 x4 = 0.02
BO算法可以根据您对现有信息的偏好和探索空间的新领域进行调整,以给出不同的结果。我不知道GPyOpts标准设置是什么,所以如果您感兴趣,可能值得查看文档。
https://datascience.stackexchange.com/questions/29128
复制相似问题