Показатель достоверности или вероятность SVM

Я использую многоклассовый классификатор SVM в EmguCV. Мне нужна оценка достоверности SVM для каждого из классов. например, мне не нужно, чтобы SVM просто объявлял номер класса, мне нужно, чтобы он сообщал мне P (номера классов | ввод) для разных классов. Как я могу получить эту вероятность или оценку в 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 много Дерман :). Я думаю, что это работает только для двухклассовых классификаторов, я прав? В EmguCV нет функции DecisionFunction, которую я мог бы, к сожалению, превратить в истину. - 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 (многоклассовый), и для этого типа SVM метка ture в Predict (featuresToBePredected, true) не работает. - person Elnaz Yousefi; 21.07.2015
comment
Это неправильный метод, он не имеет вероятностного смысла, вместо него следует использовать масштабирование Платта. - person lejlot; 21.07.2015