SKLearner Home | About | Contact | Examples

Configure MLPClassifier "random_state" Parameter

The random_state parameter in scikit-learn’s MLPClassifier controls the randomness of the neural network’s weight initialization and the shuffling of the training data.

Multi-layer Perceptron (MLP) is a type of artificial neural network that can learn non-linear decision boundaries. It consists of multiple layers of interconnected neurons, each applying a non-linear activation function to its inputs.

Setting random_state ensures reproducibility of results by fixing the random number generator seed. This affects both the initial weights of the neural network and the order in which training samples are presented during stochastic gradient descent.

The default value for random_state is None, which means that a random seed will be used each time the model is initialized. To ensure reproducibility, it’s common to set random_state to a fixed integer value.

In practice, any integer value can be used for random_state. The specific value doesn’t matter as long as it’s consistent across runs where you want to reproduce results.

from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.neural_network import MLPClassifier
from sklearn.metrics import accuracy_score

# Generate synthetic dataset
X, y = make_classification(n_samples=1000, n_features=20, n_classes=2, random_state=42)

# Split into train and test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Train with different random_state values
random_state_values = [None, 0, 42, 100]
accuracies = []

for rs in random_state_values:
    mlp = MLPClassifier(hidden_layer_sizes=(100,), max_iter=1000, random_state=rs)
    mlp.fit(X_train, y_train)
    y_pred = mlp.predict(X_test)
    accuracy = accuracy_score(y_test, y_pred)
    accuracies.append(accuracy)
    print(f"random_state={rs}, Accuracy: {accuracy:.3f}")

# Train multiple times with random_state=None
print("\nMultiple runs with random_state=None:")
for _ in range(3):
    mlp = MLPClassifier(hidden_layer_sizes=(100,), max_iter=1000, random_state=None)
    mlp.fit(X_train, y_train)
    y_pred = mlp.predict(X_test)
    accuracy = accuracy_score(y_test, y_pred)
    print(f"Accuracy: {accuracy:.3f}")

Running the example gives an output like:

random_state=None, Accuracy: 0.840
random_state=0, Accuracy: 0.815
random_state=42, Accuracy: 0.825
random_state=100, Accuracy: 0.815

Multiple runs with random_state=None:
Accuracy: 0.825
Accuracy: 0.825
Accuracy: 0.805

The key steps in this example are:

  1. Generate a synthetic binary classification dataset
  2. Split the data into train and test sets
  3. Train MLPClassifier models with different random_state values
  4. Evaluate the accuracy of each model on the test set
  5. Demonstrate the variability of results when random_state=None

Some tips and considerations for setting random_state:

Issues to consider:



See Also