누구나 랜덤 포리스트를 2.3.1 API 매트와 함께 사용하고 cvMat를 사용하지 않는 예제가 있습니까?OpenCV - 랜덤 포레스트 예제
기본적으로 나는 16x16x3 요소를 갖는 1000 행으로 구성된 Matrix Mat 데이터를 가지고 있으며, Matrix Mat은 각 행이 속하는 클래스를 보유하는 1000x1 행렬에 응답합니다. 이 무작위 포리스트 알고리즘을 실행하고 싶습니다.
누구나 랜덤 포리스트를 2.3.1 API 매트와 함께 사용하고 cvMat를 사용하지 않는 예제가 있습니까?OpenCV - 랜덤 포레스트 예제
기본적으로 나는 16x16x3 요소를 갖는 1000 행으로 구성된 Matrix Mat 데이터를 가지고 있으며, Matrix Mat은 각 행이 속하는 클래스를 보유하는 1000x1 행렬에 응답합니다. 이 무작위 포리스트 알고리즘을 실행하고 싶습니다.
이미 올바른 형식으로 데이터를 가져 왔습니다. 남은 것은 CvRTrees 객체를 인스턴스화하고 예측을 수행하는 것입니다.
랜덤 트리 v2.3에 대한 설명서는 here입니다. 또한 CvStatModel::train()
설명서를보고 싶습니다. 실제로는 CvRTree::train
에 대한 대부분의 매개 변수에 대한 설명이 있습니다. Tom은 여러분이 사용해야하는 주석에서 좋은 예를 언급했습니다.
데이터와 함께 각 속성의 유형을 지정하려면 매트가 필요합니다. 이 매트는 각 입력 속성에 대해 하나의 행과 출력 유형에 대해 하나의 추가 행을 갖습니다 (따라서 귀하의 경우 16x16x3 + 1 행).
선택적으로 CvRTParams 객체를 사용하여 트리 수, 최대 깊이 등과 같은 매개 변수를 지정할 수 있습니다. 아래 예에서 기본값을 사용합니다.
원하는 경우 교육에 사용할 속성 및 데이터 행을 지정하는 valIdx 및 sampleIdx 매트를 전달할 수 있습니다. 이것은 별도의 매트에서 그들을 얻기 위해 체조를하지 않고도 선택 교육/검증 데이터에 유용 할 수 있습니다. 여기
가 빠른 예제 :#define ATTRIBUTES_PER_SAMPLE (16*16*3)
// Assumes training data (1000, 16x16x3) are in training_data
// Assumes training classifications (1000, 1) are in training_classifications
// All inputs are numerical. You can change this to reflect your data
Mat var_type = Mat(ATTRIBUTES_PER_SAMPLE + 1, 1, CV_8U);
var_type.setTo(Scalar(CV_VAR_NUMERICAL)); // all inputs are numerical
// Output is a category; this is classification, not regression
var_type.at<uchar>(ATTRIBUTES_PER_SAMPLE, 0) = CV_VAR_CATEGORICAL;
// Train the classifier
CvRTrees* rtree = new CvRTrees;
rtree->train(training_data, CV_ROW_SAMPLE, training_classifications,
Mat(), Mat(), var_type);
http://breckon.eu/toby/teaching/ml/examples/c++/opticaldigits_ex/randomforest.cpp –