1
如何将Opencv Mat转换为Alglib真正的2D数组?OpenCV Mat到alglib real 2d数组转换
这里就是我stucked
Mat Col(28539,97,CV_32F);
我想转换此Mat
到alglib real_2d_array
用于训练分类的例子。
如何将Opencv Mat转换为Alglib真正的2D数组?OpenCV Mat到alglib real 2d数组转换
这里就是我stucked
Mat Col(28539,97,CV_32F);
我想转换此Mat
到alglib real_2d_array
用于训练分类的例子。
Mat Col(28539, 97, CV_32F);
是一个OpenCV二维(28539行,97列)密集浮点(CV_32F = float)数组。
的alglib几乎等价的datatype是
// bi-dimensional real (double precision) array
real_2d_array matrix;
在Mat
数据布局与real_2d_array
兼容(和主要来自其他工具包和SDK密集阵列类型)。
一种简单的方法来转换是:
const int rows(28539);
const int columns(97);
matrix.setlength(rows, columns);
for (int i(0); i < rows; ++i)
for (int j(0); j < columns; ++j)
matrix(i, j) = Col.at<float>(i, j);
Mat::at
返回到指定的数组元素的引用。
EDIT
void alglib::dfbuildrandomdecisionforest(
real_2d_array xy,
ae_int_t npoints,
ae_int_t nvars,
ae_int_t nclasses,
ae_int_t ntrees,
double r,
ae_int_t& info,
decisionforest& df,
dfreport& rep);
xy
是(线对应于样品对应于变量的组件和列)的训练集。
对于分类任务,列的第一个nvars
包含独立变量。 最后的列将包含类号(从0到nclasses-1
)。小数值四舍五入到最接近的整数。
npoints
是训练集大小(>=1
)。nvars
是自变量的数量(>=1
)。nclasses
对于分类必须> 1。ntrees
是森林中的树木数量(>=1
)。r
是用于构建单个树木的培训集合的百分比(0 < R <= 1
)。其余参数是输出参数。在出现问题时,你应该检查info
:
info
返回代码:
[0..nclasses-1]
课外数点。npoints<1
,nvars<1
,nclasses<1
,ntrees<1
,r<=0
或r>1
)。
感谢manlio的回复。我已经做了同样的事情。虽然我设置的其他参数是alglib :: dfbuildrandomdecisionforest(matrix,28539,96,7,80,0.66,info,df,rep);但仍然没有建立模型。我也检查了包含在矩阵中的数据,这也是正确的。你可以建议我做错了什么(像传递参数到随机森林) – kkdirvi 2014-09-27 19:21:05
你检查了'info'输出参数的值吗?返回代码应该是1.另外'matrix'的最后一列必须包含类号(在你的情况下从0到6)。 – manlio 2014-09-27 22:44:23
我检查了信息的输出,它是-1,这意味着有一些参数问题。让我告诉你一些细节....矩阵包含训练数据,最后一列是类标签。其他参数如alglib :: dfbuildrandomdecisionforest(matrix,28539,96,7,80,0.66,info,df,rep); – kkdirvi 2014-09-28 10:48:57