Резултат на доверие или вероятност в SVM

Използвам многокласов SVM класификатор в EmguCV. Трябва ми оценка за увереност на SVM за всеки от класовете. например не ми трябва този SVM просто да декларира номер на клас, имам нужда да ми казва P(classnumbers| input) за различни класове. Как мога да получа тази вероятност или резултат в EmguCV? (мултиклас)

ако няма начин, има ли някакво решение за многокласов SVM класификатор в matlab?


person Elnaz Yousefi    schedule 21.07.2015    source източник


Отговори (1)


Не съм запознат с EmguCV, но в OpenCV можете да направите нещо подобно, за да получите вероятност в SVM:

CvSVM svm;   // declare your classifier;
// then do your training process here
svm.train(featuresToBeTrained, labelsToBeTrained, cv::Mat(), cv::Mat(), params); // params are the svm parameters, you can use libsvm to optimize them.
//libsvm website: https://www.csie.ntu.edu.tw/~cjlin/libsvm/

// perform prediction
double confidenceScore = svm.predict(featuresToBePredected, true); // this will give you a signed distance to the margin.

// Then you can normalize the score to improve it, one best way is to use sigmoid function.
double finalScore = sigmoidFunc(confidenceScore, sigmoidA, sigmoidB); // sigmoidA and sigmoidB are params for sigmoid function, take wikipedia for reference

// You can define sigmoid function like this    
double sigmoidFunc(double confidenceScore, double A, double B)
{
    double fApB = confidenceScore*A + B;
    // 1-p used later; avoid catastrophic cancellation
    if (fApB >= 0)
    {
        return 1.0 - (exp(-fApB) / (1.0 + exp(-fApB)));
    }
    else
    {
        return 1.0 - (1.0 / (1.0 + exp(fApB)));
    }
}

Дано помогне!

Актуализация

За многокласов случай вземете препратка към следната връзка:
щракнете тук

person Derman    schedule 21.07.2015
comment
Tnx много Derman :). Мисля, че работи само за двукласови класификатори, прав ли съм? В EmguCV няма DecisionFunction, че мога да обърна флага му на true за съжаление - person Elnaz Yousefi; 21.07.2015
comment
Искам да кажа, че нямам достъп до оценката на доверието на SVM - person Elnaz Yousefi; 21.07.2015
comment
Не мисля, че многокласовата ситуация е много по-различна от двукласовата, тъй като позволявате на SVM да знае колко класа има във вашия набор от данни по време на обучение. - person Derman; 21.07.2015
comment
да, прав си, но когато избера параметър SVMType, вместо опция One-Class избирам C-SVC(multi-class) и за този тип SVM етикетът ture в Predict(featuresToBePredected, true) не работи. - person Elnaz Yousefi; 21.07.2015
comment
Това не е правилен метод, няма вероятностно значение, вместо това трябва да използвате мащабирането на Platt. - person lejlot; 21.07.2015