2014-01-21 40 views
0

我必须在其7个类别中对危险材料标签(在下面的链接中给出)进行分类。 http://en.wikipedia.org/wiki/Dangerous_goods#Classification_and_labeling_summary_tables使用openCV的7级SVM

我的训练功能样子:

svmTraining()  
{ 

    Mat train, response; 

    createTrainingDateUsingBOW(1, train, response, 1.0); 
    createTrainingDateUsingBOW(2, train, response, 2.0); 
    createTrainingDateUsingBOW(3, train, response, 3.0); 
    createTrainingDateUsingBOW(4, train, response, 4.0); 
    createTrainingDateUsingBOW(5, train, response, 5.0); 
    createTrainingDateUsingBOW(6, train, response, 6.0); 
    createTrainingDateUsingBOW(7, train, response, 7.0); 

    CvTermCriteria criteria = cvTermCriteria(CV_TERMCRIT_EPS, 1000, FLT_EPSILON); 
    CvSVMParams svm_params = CvSVMParams (CvSVM::C_SVC, CvSVM::LINEAR, 10.0, 8.0,1.0,10.0 , 0.5 , 0.1 , NULL   , criteria); 

} 

然后我得到的svmPredict()的结果而变化,从1到7,但我得到的结果没有任何意义。大多数时候他们总是保持在4到7之间。我试图使用SVM :: RBF和SVM :: LINEAR内核类型。目前,我正在使用每个班约300个样本。

回答

0

这可能是由数据分布问题造成的。我会建议为1到3级别培训单独的SVM,并检查它是否有效。如果可行,您可以逐个添加其他课程。

另一个需要检查的地方是SVM参数。例如,您可以尝试CvSVM :: POLY而不是CvSVM :: LINEAR。

+0

我也尝试过SVM :: Linear,但我的结果仍然随机地在类-4和7之间切换。我已经培训了4个班,每个班只有200-400个样本。我并不期待完美的结果,但是这个SVM给出了完全随机的结果。 – skm