CvSVM.predict() 给出'NaN'输出和低准确性



我使用CvSVM只对两种类型的面部表情进行分类。我使用基于LBP(局部二进制模式)的直方图从图像中提取特征,并使用cvSVM::train(data_mat,labels_mat,Mat(),Mat(),params)进行训练,其中,

data_mat的大小为200x3452,包含行主形式的200个样本的归一化(0-1)特征直方图,每个特征3452个(取决于邻域点的数量)

labels_mat是只包含两个值0和1的对应标签矩阵。参数为:

CvSVM参数;

params.svm_type     =CvSVM::C_SVC;
params.kernel_type  =CvSVM::LINEAR;
params.C            =0.01;
params.term_crit=cvTermCriteria(CV_TERMCRIT_ITER,(int)1e7,1e-7);

问题是:-

  1. 在测试时,我得到了非常糟糕的结果(大约10%-30%的准确率),即使在应用了不同的内核和train_auto()函数之后也是如此。

  2. CvSVM::predict(test_data_mat,true)给出"NaN"输出

如何解决此问题?

我想,你的类在你使用的特征空间中是线性的硬/不可分离的。也许在分类器训练步骤之前将PCA应用于数据集会更好并估计该问题的有效维数。此外,我认为用其他分类器测试你的数据集是有用的。您可以为此目的调整标准opencv示例points_classifier.cpp。它包括许多不同的分类器,具有相似的界面,您可以使用。

SVM的泛化能力很低。首先,通过主成分分析降低数据维度,然后将SVM kerenl类型更改为RBF。

相关内容

  • 没有找到相关文章

最新更新