2013-12-07 5 views
0

이 예에서 OpenCV SVM을 사용했습니다 http://docs.opencv.org/doc/tutorials/ml/introduction_to_svm/introduction_to_svm.html.OpenCV SVM을 테스트하려면 어떻게해야합니까?

이제 예측 된 값에 대해이 SVM의 정확성을 테스트해야합니다. 이것은 SVM의 정확성을 예측하는 코드의 일부입니다.

void svm(cv::Mat& trainingDataMat, cv::Mat& labelsMat, cv::Mat& Testdata) { 
int t=0; 
int f=0; 
int Acc; 
CvSVMParams params; 
params.svm_type = CvSVM::C_SVC; 
params.kernel_type = CvSVM::LINEAR; 
params.term_crit = cvTermCriteria(CV_TERMCRIT_ITER, 100, 1e-6); 
CvSVM SVM; 
SVM.train(trainingDataMat, labelsMat, Mat(), Mat(), params); 
cv::Mat predicted(1,1, CV_32F); 

for(int i = 0; i < Testdata.rows; i++) { 
    cv::Mat sample = Testdata.row(i); 
    predicted.at<float>(i,0)= SVM.predict(sample); 
    float p = predicted.at<float>(i,0); 

    if (p > 0.0) || p<0.0) { 
     t++; 
    } 
    else { 
     f++; 
    } 

    Acc=(t*1.0)/(t+f); 
    } 
    cout << "Accuracy_{SVM} = " <<Acc << endl; 
    } 

나는 한 번에 하나의 테스트 데이터를 테스트하고 행의 각 열은 양 또는 음의 훈련 분류의 측면과 예측의 정확성에 속하는지 여부를 확인하려합니다.

이 코드에 직면하고 문제는 예측의 비율이 항상 내가이 조금 이상한 찾아 누군가가이 문제에 나를 도와주고 싶어

(100)로 표시되어 있다는 점이다?

+0

날짜를 나타내는 데 최선의 노력을 기울여야합니다. – Bull

답변

0
당신의 문제가 "true"와 "false"의 검출에 있다고 보인다

가 실제로 코드를 컴파일조차 안 (1 오프닝 bracet 2 닫는 것) 당신이주는

if (p > 0.0) || p<0.0) { 
     t++; 
    } 
    else { 
     f++; 
    } 

당신의 "점"을 모델로하면 p!=0.0, 그래서 당신은 100 % 얻을. SVM의 예측을 true 값과 비교해야합니다. 그리고 그들이 동일하다면 - t 카운터를 증가시키고, 그렇지 않으면 f을 증가 시키십시오.

관련 문제