使用Bayesopt TreeBagger分类

2视图(30天)
安东尼
安东尼 2017年7月6日
评论道: 艾伦·韦斯 2017年7月7日
基本上是运行一个随机森林分类使用树装袋工和我非常困惑如何在程序运行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(结果);

答案(3)

epic
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 (,“模式”,“合奏”);
结束
结束
2的评论
安东尼
安东尼 2017年7月6日
注意:我的功能标签y_cat(这是一个团队项目我们正在努力,所以每个人都使用y_cat,否则我就运行代码的方式,你把它)。

登录置评。


艾伦·韦斯
艾伦·韦斯 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数学工具箱文档

epic
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 (,“模式”,“合奏”);
结束
5个评论
艾伦·韦斯
艾伦·韦斯 2017年7月7日
很高兴听到它,谢谢你让我们知道。
也许你应该接受唐的回答如果帮助你。
艾伦·韦斯
MATLAB数学工具箱文档

登录置评。

社区寻宝

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

开始狩猎!