参考资料:
https://docs.opencv.org/master/d1/d2d/classcv_1_1ml_1_1SVM.html#ab4b93a4c42bbe213ffd9fb3832c6c44f
http://read.pudn.com/downloads535/doc/fileformat/2211295/libsvm.pdf
关于参数调试及优化:
1.关于调参的参数介绍
本次模型训练优化并没有测试所有SVM相关参数以及设置,所以结果可能有待提高,但是在改进范围内已经是最优结果。
核函数选择: RBF核函数;
特征选择: “DenseNet” or “eGemaps” or “LBPTOP”,本次并没有选择"HOG"特征,并且把剩下三种特征进行两两组合,以及三种特征融合;
标签选择: 数据集中有0.55和0.65,因为时间关系只选择了0.65进行测试;
评价指标: 分类总正确率简称PCC,是英文Percentage correct classification的缩写。它被定义为分类统计频率矩阵P的主对角线元素之和。
详细解释: https://blog.csdn.net/wyl1813240346/article/details/56843409
训练类型: 在opencv-svm中的类型一共五种:C_SVC、NU_SVC、ONE_CLASS、EPS_SVR、NU_SVR,这里选择EPS_SVR和NU_SVR两种分别调试:
//EPS_SVR类型的设置
void SVMEmotion::train(cv::Mat train_mat, cv::Mat label_mat, float C_value, float G_value, float epsilon) {
cv::Ptr<cv::ml::SVM> svm = cv::ml::SVM::create();
svm->setType(cv::ml::SVM::EPS_SVR); // EPSILON_SVR; // do regression task
svm->setKernel(cv::ml::SVM::RBF); // or linear
svm->setP(epsilon); // for EPS_SVR, which has epsilon in loss function (0.1)
svm->setC(C_value); // penality value (32)
svm->setGamma(G_value); // for kernel funs (1)
svm->setTermCriteria(cv::TermCriteria(CV_TERMCRIT_ITER + CV_TERMCRIT_EPS, 1000, 1e-5)); // max_iter:100 stop when the loss is less than 1e-3