为什么我的线性分类器(感知器)能够对非线性可分离数据进行分类?

时间:2019-02-28 17:48:09

标签: java machine-learning classification perceptron

我为分配创建了线性分类器,但由于某种原因,它能够解决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

0 个答案:

没有答案