如何使用bayesopt函数预测最优参数的实验吗?

13个视图(30天)
我有一个X的值列表(如实验参数)和相应的Y值(实验结果),以及变量X范围,我怎么能使用bayesopt()函数来预测最优X参数来得到最好的Y值,因为大多数的例子在互联网上找到的最佳hyperparameters算法,这是一个小小的不同于我的问题。我不知道如何处理对象的函数,由于我没有一个目标函数,我的数据是实验参数和实验结果。我希望利用现有数据预测的最优参数。我找到一些例子,编写一个程序,但它不是我预期的一样,这是程序,
我提到的例子,
X = unifrnd(30 0, 10日,3);
Y = unifrnd(0, 2000, 30岁,1);
sat1 = optimizableVariable (“s1 '(0,10),“类型”,“真实”的);
sat2 = optimizableVariable (“s2”(0,10),“类型”,“真实”的);
sat3 = optimizableVariable (“s3”(0,10),“类型”,“真实”的);
var = (sat1 sat2 sat3];
initialXList =表;
initialXList。s1 = X (: 1);
initialXList。s2 = X (:, 2);
initialXList。s3 = X (: 3);
initialObjList = Y;
dummyFunc = @ 0(台);
bayesObject = bayesopt (dummyFunc、var、
“InitialX”initialXList,
“InitialObjective”initialObjList,
“MaxObjectiveEvaluations”,50岁,
“详细”1);
1评论
徐supeng
徐supeng 2020年6月24日
编辑:徐supeng 2020年6月24日
我有一个想法,但或许这并不容易实现。首先,使用一组相应X和Y火车模型最优参数,例如fitcknn算法得到最优hyperparameters(),然后使用模型作为目标函数,并使用bayesopt()来选择下一个20 X值范围,和correspoing Y值,并使用(X, Y)的20组实验数据训练算法,反对重复这个过程一次又一次,最后,得到最优的结果,我将这样做,如果任何人都可以给我建议,我将非常感谢,因为我不熟悉算法,该算法选择应该对最终结果有影响~
注意,(X, Y)完全实验结果,所以它们之间没有明显的关系~
一个简单的情况下,但似乎bayesopt()函数不能用Md1训练模型,为什么?有什么问题~
rng默认的
X = unifrnd(30 0, 10日,3);
Y = unifrnd(0, 2000, 30岁,1);
Mdl = fitcknn (X, Y,“OptimizeHyperparameters”,“汽车”,
“HyperparameterOptimizationOptions”,
结构(“AcquisitionFunctionName”,“expected-improvement-plus”));
sat1 = optimizableVariable (“s1 '(0,10),“类型”,“真实”的);
sat2 = optimizableVariable (“s2”(0,10),“类型”,“真实”的);
sat3 = optimizableVariable (“s3”(0,10),“类型”,“真实”的);
var = (sat1 sat2 sat3];
有趣= @ (z)预测(Mdl [z.s1, z.s2 z.s3]);
bayesObject = bayesopt (var,有趣
“MaxObjectiveEvaluations”,20岁,
“详细”1);

登录置评。

接受的答案

艾伦·韦斯
艾伦·韦斯 2020年6月24日
我soiunds好像有两个步骤,你的问题:
  1. 适合一些数据的参数化功能。所以你可能会有一些功能y = (1) exp (——(2) * x + (3) * x ^ 2你首先需要满足您的值给定的(x, y)数据。这是由你决定在一个合适的参数化功能。
  2. 减少由此产生的功能。一旦你有了一个参数化的曲线或曲面y = f (x)与已知的函数f使用正常的优化程序找到最低的位置。
您可以使用 bayesopt 或两个步骤,或使用其他一些优化器或两个步骤。
祝你好运,
艾伦·韦斯
MATLAB数学工具箱文档
10评论
艾伦·韦斯
艾伦·韦斯 2022年2月21日
谢谢你的澄清。我不能帮助你,虽然;我显然不懂茱莉亚,你遇到的问题似乎与使用茱莉亚。
艾伦·韦斯
MATLAB数学工具箱文档

登录置评。

更多的答案(2)

徐supeng
徐supeng 2020年7月6日
嗨,伙计们
上周我已经解决这个问题,问题是我试着使用拟合目标函数来估计第二Y值,但实际上预测函数是一个函数,它可以告诉你下一个最优的Xi的地方你有最优易发现的最大机会的价值,和你需要做实验或仿真得到真正的yj值并把它放到数据库并更新目标函数,然后,它工作得非常好,在这里我分享代码和结果~
clc;
清晰;
抽搐;
科罗姆% % % 1 ~ 6 X参数,科罗姆7是Y的值
Data = [5.6207 3.4326 0.99076 -0.5681 2.2269 -0.76352 - -2560.6
9.4475 5.1669 8.8368 -1.5091 4.6748 -1.2324 -738.19
6.2045 3.1342 5.3344 -1.0461 -4.807 -2.4016 -3044.6
9.1965 5.4567 2.741 4.9886 -2.2476 -1.2381 -427.06
5.5178 2.9224 0.47097 -4.7451 -4.3422 2.582 -1363.8
1.4587 6.82 9.6364 -0.55175 -4.2558 4.4485 -5265.8
9.003 1.3252 0.91798 3.956 1.3036 2.8979 -788.03
3.658 4.7395 9.7259 3.8048 -0.8229 0.097753 -2241.8
3.661 9.6049 9.3967 -0.52114 1.8493 -3.1426 -2594.9
7.538 6.3236 3.6793 -0.27248 -2.4987 2.9187 -3992.8
2.8826 2.9379 7.6082 -4.3078 3.5267 -0.76454 -1637.5
2.5475 0.41993 2.1689 3.0568 -0.5199 -2.6993 -971.66
9.8318 9.7541 7.1499 -1.069 -0.10125 2.48 -3309.2
5.0904 0.4727 6.0548 -3.1414 -1.1608 2.6665 -2494.9
5.3166 9.3089 3.4795 1.1064 1.6673 3.2222 -3272.3
4.8304 0.35989 1.7593 4.4904 -4.7422 1.9583 -421.03
5.5926 7.7423 7.4898 1.6932 3.9333 3.2528 -911.6
8.5082 8.2249 6.6189 4.0599 1.9319 -0.82999 -6993
7.0123 4.0614 2.0719 -2.5927 -3.013 -1.769 -1800.4
3.6205 2.0072 4.4781 -1.2097 3.811 2.8131 -1086.1);
X =数据(:,1:6);
(Y =数据:7);
2 = 1:50 0% % % 10组循环,每个循环迭代20基于前X Y数据,因为最初的(X, Y)值也包含在迭代数
% disp ((X, Y));
disp (ii);
Len =长度(Y);
% disp (Len);
% % %训练fitrgp找到的最优hyperparameters X Y
Md1 = fitrgp (X, Y,“OptimizeHyperparameters”,“所有”,“HyperparameterOptimizationOptions”结构(“ShowPlots”假的,“详细”,0));
% disp ([Md1。Md1 BasisFunction’、‘。KernelFunction’、‘, num2str (Md1.Sigma)]);
sat1 = optimizableVariable (“s1 '(0,10),“类型”,“真实”的);
sat2 = optimizableVariable (“s2”(0,10),“类型”,“真实”的);
sat3 = optimizableVariable (“s3”(0,10),“类型”,“真实”的);
delta1 = optimizableVariable (“d1”,5,5],“类型”,“真实”的);
delta2 = optimizableVariable (“d2”,5,5],“类型”,“真实”的);
delta3 = optimizableVariable (“d3”,5,5],“类型”,“真实”的);% %设置变量
var = (sat1 sat2 sat3 delta1 delta2 delta3);
initialXList =表;
initialXList。s1 = X (: 1);
initialXList。s2 = X (:, 2);
initialXList。s3 = X (: 3);
initialXList。d1 = X (:, 4);
initialXList。d2 = X (: 5);
initialXList。d3 = X (: 6);
initialObjList = Y;% % %设置te初始X Y值
bayesObject = bayesopt(@(台)mdlfun(资源描述、Md1), var,
“MaxObjectiveEvaluations”Len + 1,% % %
“InitialX”initialXList,
“InitialObjective”initialObjList,
“PlotFcn”{},
“详细”,0);
如果国防部(ii) 5) = = 0
disp ([bayesObject。XAtMinObjective array2table (bayesObject.MinObjective)]);
disp ([bayesObject。XAtMinEstimatedObjective array2table (bayesObject.MinEstimatedObjective)]);
结束
结果(二世:)= (table2array bayesObject (bayesObject.XAtMinObjective)。MinObjective table2array (bayesObject.XAtMinEstimatedObjective) bayesObject.MinEstimatedObjective];
X = table2array (bayesObject.XTrace);
Yplusone =更新(X(最终,:));% % %更新数据库与习近平最优参数发现的目标函数
如果Yplusone > 0
Yplusone = 0;
结束
Y = bayesObject.ObjectiveTrace;
Y(结束)= Yplusone;
结束
图;
情节(结果:7)“线宽”,1.5);
持有
情节(结果:14)“o”);
包含(迭代的数量,“字形大小”,20);
ylabel (“坡”,“字形大小”,20);
集(gca),“字形大小”,20岁,“线宽”,1.5);
toc;
函数mdl f = mdlfun(台)
sat1 = tbl.s1;
sat2 = tbl.s2;
sat3 = tbl.s3;
delta1 = tbl.d1;
delta2 = tbl.d2;
delta3 = tbl.d3;
var = (sat1 sat2 sat3 delta1 delta2 delta3);
f =预测(mdl var);
结束
fitrgp和fitrlinear行之有效,但fitrlinear fitrgp ~ ~ ~要快得多
2的评论
徐supeng
徐supeng 2022年10月19日
对不起,这是我最初的计划和不清洁或简单,如果你仍感兴趣,用下面的例子:
clc;
清晰;
抽搐;
%定义最初的X值,但我没有使用最初的Y值
X = (
53.999 34.843 36.974 51.649 - 2 1 1 2 -4.1921 - 4.4694 -3.6857 - -3.2385
7.9335 72.09 39.635 53.757 - 2 1 1 2 -3.7329 - 4.6742 -2.6008 - -2.9756
32.198 29.476 16.324 59.771 - 2 1 1 2 -4.1383 - 5.1433 -3.368 - -3.3614
19.269 91.109 36.935 76.83 - 2 1 1 2 -4.0158 - 5.0661 -3.0922 - -1.6616
];
%设置变量
pow1 = optimizableVariable (“p1”[0100],“类型”,“真实”的);
pow2 = optimizableVariable (“p2”[0100],“类型”,“真实”的);
pow3 = optimizableVariable (“p3”[0100],“类型”,“真实”的);
pow4 = optimizableVariable (“p4”[0100],“类型”,“真实”的);
pol1 = optimizableVariable (“警察甲”(1、2),“类型”,“整数”);
pol2 = optimizableVariable (“警察乙”(1、2),“类型”,“整数”);
pol3 = optimizableVariable (警察丙的(1、2),“类型”,“整数”);
pol4 = optimizableVariable (“警察丁”(1、2),“类型”,“整数”);
det1 = optimizableVariable (“d1”[10]-10年,“类型”,“真实”的);
det2 = optimizableVariable (“d2”[10]-10年,“类型”,“真实”的);
det3 = optimizableVariable (“d3”[10]-10年,“类型”,“真实”的);
det4 = optimizableVariable (“d4”[10]-10年,“类型”,“真实”的);
var = [pow1 pow2 pow3 pow4 pol1 pol2 pol3 pol4 det1 det2 det3 det4);
initialXList =表;
initialXList。p1 = X (: 1);
initialXList。p2 = X (:, 2);
initialXList。p3 = X (:, 3);
initialXList。p4 = X (:, 4);
initialXList。警察甲= X (: 5);
initialXList。警察乙= X (: 6);
initialXList。警察丙= X (: 7);
initialXList。警察丁= X (: 8);
initialXList。d1 = X (: 9);
initialXList。d2 = X (: 10);
initialXList。d3 = X (: 11);
initialXList。d4 = X (: 12);
bayesObject = bayesopt(@(台)mdlfun(台),var,
“MaxObjectiveEvaluations”,1000,% optimizaiton数字
“IsObjectiveDeterministic”,真的,
“ExplorationRatio”,0.5,%勘探程度,默认值是0.5
“InitialX”initialXList,%从初始值
“UseParallel”,真正的);%使用并行
图;
情节(bayesObject.ObjectiveTrace“o”);
持有;
情节(-bayesObject.ObjectiveMinimumTrace“线宽”2);
包含(的迭代次数,“字形大小”,20);
ylabel (“捕获速度(米/秒)”,“字形大小”,20);
集(gca),“字形大小”,20岁,“线宽”,1.5);
toc;
函数f = mdlfun(台)
pow1 = tbl.p1;
pow2 = tbl.p2;
pow3 = tbl.p3;
pow4 = tbl.p4;
pol1 = tbl.po1;
pol2 = tbl.po2;
pol3 = tbl.po3;
pol4 = tbl.po4;
det1 = tbl.d1;
det2 = tbl.d2;
det3 = tbl.d3;
det4 = tbl.d4;
var = [pow1 pow2 pow3 pow4 pol1 pol2 pol3 pol4 det1 det2 det3 det4);
f = black_box_function (var);%黑盒功能定义自己,一旦输入一组X,它将返回一个Y值
结束

登录置评。


标签

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!