Predict method of the perceptron algorithm
Here is how the code appears to break down:

method parameters:

The train(...) method takes an input vector called pattern along with the target output called label and a weight update coefficient (learning rate) called step.



method execution:


train(...) first passes the input vector through our neuron using the predict(...) method.
The result of predict(...) is stored in a variable named out_label.
The out_label variable is either 1 or -1.
Depending on the pattern that we provide we want the target output (label) to be either 1 or -1.
If out_label is equal to label (1 == 1 or -1 == -1), then we return True
Otherwise, the neuron outputted a value we do not want (-1 != 1 or 1 != -1), so we update the weights accordingly, then return False




example where the neuron is correct:

Let's say we have the following parameters:

input vector (pattern) = [-5,2,8]

target output (label) = 1

The train(...) method executes as follows:


we call the predict(...) which does the following:


passes our vector [-5,2,8] through the neuron using the function np.dot(self.w, pattern) + self.b
stores the result of the above function in a variable called activation (let's say activation = 0.23)
returns 1 because activation &gt; 0

we store the result of predict(...) in the variable out_label, which is 1 in this example
because our target output (label = 1), is equal to the actual output (out_label = 1) of the neuron, we return True and consider the neuron output correct.




example where the neuron is incorrect:

Let's say we have the following parameters:

input vector (pattern) = [-1,-5,3]

target output (label) = 1

The train(...) method executes as follows:


we call the predict(...) which does the following:


passes our vector [-1,-5,3] through the neuron using the function np.dot(self.w, pattern) + self.b
stores the result of the above function in a variable called activation (let's say activation = -0.65)
returns -1 because activation &lt;= 0

we store the result of predict(...) in the variable out_label, which is -1 in this example
because our target output (label = 1), is not equal to the actual output (out_label = -1) of the neuron, we update the weights using:
self.w += step * (label - out_label) * pattern
self.b += step * (label - out_label)
we then return False because the neuron was incorrect