我正在Matlab中实现一种算法,该算法测试修改图像的检测精度。精确度由SVM提供。但我的问题是如何选择adaboost的高级功能,以降低计算复杂性。
详细地说,我有一个图像的特征向量(1xN),我不确定我是否可以在adaboost中使用类似的向量。我在Matlab中使用fitensemble
函数,将此向量作为X
,numberens= 30,50,75,100
,'tree'
作为参数。我应该得到D维新的特征向量。
我的问题是,如果我的数据输入中的观察是特征,那么,我应该在列向量中转换行向量,还是我完全错了?
在哪里可以找到新的特征向量,或者如何在结果模型中获取它?ens?
详细说明: “Boosting Feature Selection可用于选择最佳特征以降低计算复杂度。在D迭代之后,我们可以得到D维新特征向量, 然后它们将用于最终分类。“ 我认为我的特征值可能是观察,我只有一列与该图像相关。 Adaboost应该返回一个维度为D的新特征向量。 例如:如果我的初始特征向量F的长度为256,那么在使用30次迭代的情况下,我是否应该获得大小为30的新特征向量? F包含许多零和一些值,其中最大值可以等于100000。
答案 0 :(得分:0)
对于功能选择,您可以检查ClassificationTree.template
的'NVarToSample'
属性。默认情况下,fitensemble
使用'all'
来提升,用于装袋的预测数量的平方根。我不确定AdaBoostM1
是什么情况。您可以尝试将其设置为正值D
,而不是默认值'all'
:
mdl1 = ClassificationTree.template('NVarToSample','all');
ens = fitensemble(features,classLabels,'AdaBoostM1',30,'tree',...
mdl1,'type','classification');
请注意,在上面的代码中,features
的每一列代表一个变量,每行代表一个观察。