как кодировать один против остальных мультикласс SVM для проекта распознавания действий - PullRequest
0 голосов
/ 13 января 2019

Я новичок в SVM. Я хочу использовать Multiclass SVM для классификации в моем проекте распознавания действий. Мой набор данных состоит из 15 классов, таких как бег трусцой, ходьба на велосипеде и т.д. Я понимаю двоичный SVM и видел много примеров. Я получаю путаницу в одном против одного мультикласса SVM и один против остальных мультикласса SVM.

Мой вопрос таков: должен ли я создавать и обучать SVM для каждого класса, например SVM1 для бега, SVM2 для бега ... и т.д. ....... 14) или (0,1). как определить модель для мультиклассовой классификации. как будет прогнозироваться результат?

Я пытался что-то вроде этого:

Mat trainData, trainLabels;

for (int i = 0; i < 15; i++ )
        {
        sprintf_s(filename, "VocabularyHOG/Dictionary%d.yml", i);
        Mat feature;
        FileStorage fs(filename, FileStorage::READ);
        fs["vocabulary"] >> feature;
        feature.convertTo(feature, CV_32F); // make sure we got float data
        trainData.push_back(feature.reshape(1, 1)); // as a flat column
        trainLabels.push_back(i); // the classlabel
}

// Train the SVM
Ptr<SVM> svm = SVM::create();
svm->setType(SVM::C_SVC);
svm->setKernel(SVM::LINEAR);
svm->setTermCriteria(TermCriteria(TermCriteria::MAX_ITER, 100, 1e-6));
svm->train(trainData, ROW_SAMPLE, trainLabels);
     Mat testData;
 FileStorage fs("DictionaryrunningHOG.yml", FileStorage::READ);
    fs["vocabulary"] >> testData;
    int response = svm->predict(testData.reshape(1, 1));
    if (response == 1)
        cout << "boxing";
    else
        cout << "negative result";

    waitKey(27);
    return 0;

но получаю ошибку. что тут не так ?? Как правильно кодировать один против остальных мультикласса SVM. Какова метка для каждого SVM? Спасибо

...