Я создал линейный классификатор для назначения, но по какой-то причине он способен решить проблему 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