множественная классификация с использованием Liblinear в Accord.net Framework

Мне нужно реализовать множественный классификатор классификации, используя Liblinear. Платформа машинного обучения Accord.net предоставляет все свойства Liblinear, за исключением формулировки Краммера и Зингера для многоклассовой классификации. Это процесс.


person vahid ziaiyan    schedule 14.04.2015    source источник


Ответы (1)


Обычный способ изучения многоклассовой машины — использование класса MulticlassSupportVectorLearning. . Этот класс может обучать машины один на один, которые затем можно опрашивать, используя либо стратегии голосования, либо стратегии исключения.

Таким образом, вот пример того, как линейное обучение может быть выполнено для нескольких классов:

// Let's say we have the following data to be classified
// into three possible classes. Those are the samples:
// 
double[][] inputs =
{
    //               input         output
    new double[] { 0, 1, 1, 0 }, //  0 
    new double[] { 0, 1, 0, 0 }, //  0
    new double[] { 0, 0, 1, 0 }, //  0
    new double[] { 0, 1, 1, 0 }, //  0
    new double[] { 0, 1, 0, 0 }, //  0
    new double[] { 1, 0, 0, 0 }, //  1
    new double[] { 1, 0, 0, 0 }, //  1
    new double[] { 1, 0, 0, 1 }, //  1
    new double[] { 0, 0, 0, 1 }, //  1
    new double[] { 0, 0, 0, 1 }, //  1
    new double[] { 1, 1, 1, 1 }, //  2
    new double[] { 1, 0, 1, 1 }, //  2
    new double[] { 1, 1, 0, 1 }, //  2
    new double[] { 0, 1, 1, 1 }, //  2
    new double[] { 1, 1, 1, 1 }, //  2
};

int[] outputs = // those are the class labels
{
    0, 0, 0, 0, 0,
    1, 1, 1, 1, 1,
    2, 2, 2, 2, 2,
};

// Create a one-vs-one multi-class SVM learning algorithm 
var teacher = new MulticlassSupportVectorLearning<Linear>()
{
    // using LIBLINEAR's L2-loss SVC dual for each SVM
    Learner = (p) => new LinearDualCoordinateDescent()
    {
        Loss = Loss.L2
    }
};

// Learn a machine
var machine = teacher.Learn(inputs, outputs);

// Obtain class predictions for each sample
int[] predicted = machine.Decide(inputs);

// Compute classification accuracy
double acc = new GeneralConfusionMatrix(expected: outputs, predicted: predicted).Accuracy;

Вы также можете попытаться решить проблему многоклассового решения, используя стратегию «один против остальных». В этом случае вместо алгоритма мульти- первый класс показан выше.

person Cesar    schedule 14.04.2015
comment
Большое спасибо. Я протестировал его, и он отлично работал. извините, но у меня есть еще один вопрос, который так важен для меня. как я могу реализовать это параллельно? - person vahid ziaiyan; 19.04.2015
comment
Хммм... Этап обучения уже сделан параллельно. Задача с несколькими классами разбивается на ряд задач с бинарными решениями, и каждое бинарное решение решается в отдельном потоке. Если у вас этого не происходит, то, пожалуйста, дайте мне знать, и я проверю! - person Cesar; 19.04.2015