Почему мой линейный классификатор (персептрон) способен классифицировать нелинейно разделимые данные? - PullRequest
0 голосов
/ 28 февраля 2019

Я создал линейный классификатор для назначения, но по какой-то причине он способен решить проблему XOR;Насколько я понимаю, линейный классификатор не должен быть в состоянии сделать это.Если я введу линейно разделимые данные, он сможет правильно их классифицировать;если я введу нелинейные данные (XOR), он все равно сможет их правильно классифицировать.Я был бы признателен за любую помощь в понимании того, почему мой код работает так и что я должен делать.Это часть кода, который классифицирует и вызывает проблему: * Примечание: perceptronActualValueFirstLine - это массив, который содержит выходные данные алгоритма персептрона (вычисления)

            //updates the weight for an allowed 100 times    
        while (iterations <= 100 && isLineEqual == false) {
            //loops over the array four times for each instance

                for(int i = 0; i < perceptronActualValueFirstLine.length; i++) {
                    //updates the loop if the desired value does not equal the actual value from the perceptron

                    if(desiredValue[i] != perceptronActualValueFirstLine[i]) { 

    //updates the weight

                        w0 = w0 + (double)(learningRate * (desiredValue[i] - perceptronActualValueFirstLine[i]) * x0[i]);
                        w1 = w1 + (double)(learningRate * (desiredValue[i] - perceptronActualValueFirstLine[i]) * x1[i]);
                        w2 = w2 + (double)(learningRate * (desiredValue[i] - perceptronActualValueFirstLine[i]));


    //updates the actual value

                        perceptronActualValueFirstLine[i] = ((w0 * x0[i]) + (w1 * x1[i]) + (w2) >= 0) ? 1: 0;

                    }
                    //breaks the loop when the actual value equals the desired value

                    if(Arrays.equals(desiredValue,perceptronActualValueFirstLine)) {
                        isLineEqual = true;
                        break; 
                    }        
                }
                iterations++;
            }
        }

Выходные данные:

Desired pairs: 
{0,0} class: 0.0
{0,1} class: 1.0
{1,0} class: 1.0
{1,1} class: 0.0

Linear Classification after training:
{0,0} class: 0.0
{0,1} class: 1.0
{1,0} class: 1.0
{1,1} class: 0.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...