Bell’s network analytics team needs a lightweight binary classifier that can run without a machine learning framework. Implement a fully connected neural network from scratch using only Python lists and arithmetic.
Your function must train a network with one hidden layer and return a binary prediction for every input row. Use tanh in the hidden layer, sigmoid in the output layer, binary cross-entropy gradients, and full-batch gradient descent. Initialize weights deterministically so repeated calls produce the same predictions.
Implement neural_network(X, y, hidden_size, learning_rate, epochs), where X is a non-empty list of rows containing numeric features and y is a list of binary labels. The function returns a list of integers, each either 0 or 1, in the same order as the input rows.
Initialize input-to-hidden weights using 0.05 * (j + 1) with alternating signs based on feature and hidden-unit indices. Initialize hidden-to-output weights using the same magnitude pattern with alternating signs. Initialize all biases to zero. Train using batch updates, then classify sigmoid outputs at threshold 0.5.
def neural_network(X, y, hidden_size, learning_rate, epochs):