使用Bayesopt TreeBagger分类
5视图(30天)
显示旧的评论
基本上是运行一个随机森林分类使用树装袋工和我非常困惑如何在程序运行bayesopt我新在matlab编程。基本上,我想最小化损失函数。我一直在下面的代码,我知道这可能是遥远,但是我很迷失在这一个。任何帮助就太好了。
minLS = optimizableVariable (“minLS”(1、20),“类型”,“整数”);
numPTS = optimizableVariable (“numPTS”[1113],“类型”,“整数”);
hyperparametersRF = [minLS; numPTS];
rng (1);
选择= statset (“UseParallel”,真正的);
numTrees = 1000;
= TreeBagger (numTrees Xtrain Ytrain,“方法”,“分类”,“选项”选择,…
“MinLeafSize”hyperparametersRF.minLS,“NumPredictorstoSample”,hyperparametersRF.numPTS);
classA = @ (Xtrain Ytrain Xtest)(预测(A, Xtest));
cvMCR = crossval (“宏”,X, y_cat“predfun”classA,“分区”、本量利);
有趣= @ (hparams) cvMCR (hyperparametersRF X);
结果= bayesopt(有趣,hyperparametersRF);
besthyperparameters = bestPoint(结果);
0评论
答案(3)
epic
2017年7月6日
这样怎么样?crossval,相反,它使用TreeBagger的能力使用“袋”的观察作为验证数据。它还使用一个本地函数构建目标函数,传递给bayesopt。你应该能够运行该将它粘贴到MATLAB编辑和运行按钮。
负载fisheriris
X =量;
Y =物种;
minLS = optimizableVariable (“minLS”(1、20),“类型”,“整数”);
numPTS = optimizableVariable (“numPTS”[1113],“类型”,“整数”);
hyperparametersRF = [minLS; numPTS];
rng (1);
有趣= makeFun (X, Y);
结果= bayesopt(有趣,hyperparametersRF);
besthyperparameters = bestPoint(结果);
函数有趣= makeFun (X, Y)
使目标函数通过bayesopt百分比
有趣= @f;
%一个嵌套使用X和Y的函数
函数oobMCR = f (hparams)
选择= statset (“UseParallel”,真正的);
numTrees = 1000;
一个= TreeBagger (numTrees, X, Y,“方法”,“分类”,“OOBPrediction”,“上”,“选项”选择,…
“MinLeafSize”hparams.minLS,“NumPredictorstoSample”,hparams.numPTS);
oobMCR = oobError (,“模式”,“合奏”);
结束
结束
艾伦·韦斯
2017年7月6日
我认为你是很接近。你只需要将你的目标函数定义为一个函数的参数。
贝叶斯优化目标函数
的基础知识吗
bayesopt
通过你的目标函数:一个表的值。
这个例子
显示使用
bayesope
cross-valudated损失减小到最低限度。
我相信你会想写一个函数,接受你的训练数据
Xtrain
和
Ytrain
以及hyperparameter向量
x
和其他一些参数,是这样的:
函数损失= myCVlossfcn (x, x, Xtrain Ytrain y_cat, cvp,选择)
= TreeBagger (numTrees Xtrain Ytrain,“方法”,“分类”,“选项”选择,…
“MinLeafSize”x.minLS,“NumPredictorstoSample”,x.numPTS);
classA = @ (Xtest)预测(A, Xtest);
损失= crossval (“宏”,X, y_cat“predfun”classA,“分区”、本量利);
然后调用
bayesopt
是这样的:
结果= bayesopt (@ (x) myCVlossfcn (x, x, Xtrain Ytrain y_cat, cvp,选择),hyperparametersRF)
我可能有一些错误,我没有尝试运行这个,但这是清晰的吗?
艾伦·韦斯
MATLAB数学工具箱文档
0评论
epic
2017年7月6日
这是一个没有使用function-within-a-function变异。也许是更容易理解:
负载fisheriris
X =量;
Y =物种;
minLS = optimizableVariable (“minLS”(1、20),“类型”,“整数”);
numPTS = optimizableVariable (“numPTS”[1113],“类型”,“整数”);
hyperparametersRF = [minLS; numPTS];
rng (1);
有趣= @(忧郁)f(忧郁,X, Y);
结果= bayesopt(有趣,hyperparametersRF);
besthyperparameters = bestPoint(结果);
函数oobMCR = f (hparams, X, Y)
选择= statset (“UseParallel”,真正的);
numTrees = 1000;
一个= TreeBagger (numTrees, X, Y,“方法”,“分类”,“OOBPrediction”,“上”,“选项”选择,…
“MinLeafSize”hparams.minLS,“NumPredictorstoSample”,hparams.numPTS);
oobMCR = oobError (,“模式”,“合奏”);
结束