我为分配创建了线性分类器,但由于某种原因,它能够解决XOR问题。根据我的理解,线性分类器不应该能够做到这一点。如果我输入线性可分离的数据,则可以正确分类。如果我输入非线性可分离数据(XOR),它仍然能够正确分类。感谢您在理解为什么我的代码以这种方式工作以及应该做什么方面的帮助。这是分类并导致问题的代码的一部分:*注意:perceptronActualValueFirstLine是一个数组,用于保存perceptron算法(计算)的输出
//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