Q&A
Implement a neural network for classification using scikit-learn
Overview
A Multi-Layer Perceptron is a feed-forward neural network: an input layer, one or more hidden layers of neurons with non-linear activations, and an output layer. scikit-learn's MLPClassifier packages this behind the familiar fit/predict API, handling backpropagation internally. It's great for tabular classification when you don't need GPUs or custom architectures.
graph LR
I[Input features] --> H1[Hidden layer 1]
H1 --> H2[Hidden layer 2]
H2 --> O[Output: class probabilities]
subgraph pipeline
A[Split data] --> B[Scale features] --> C[fit MLPClassifier] --> D[predict / score]
end
style C fill:#1e1b4b,color:#fff
Complete Example
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neural_network import MLPClassifier
from sklearn.metrics import accuracy_score, classification_report
# 1. Load data
X, y = load_iris(return_X_y=True)
# 2. Split into train/test
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42, stratify=y
)
# 3. Scale features - CRITICAL for neural networks
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train) # fit on train only
X_test = scaler.transform(X_test) # apply same transform to test
# 4. Build and train the MLP
model = MLPClassifier(
hidden_layer_sizes=(16, 8), # two hidden layers: 16 then 8 neurons
activation="relu",
solver="adam",
max_iter=500,
random_state=42,
)
model.fit(X_train, y_train)
# 5. Evaluate
y_pred = model.predict(X_test)
print("Accuracy:", accuracy_score(y_test, y_pred))
print(classification_report(y_test, y_pred))
# probabilities, if needed:
probs = model.predict_proba(X_test)
Key Hyperparameters
| Parameter | Meaning |
|---|---|
hidden_layer_sizes |
Tuple of neurons per hidden layer, e.g. (100,) or (64, 32) |
activation |
relu (default, common), tanh, logistic |
solver |
adam (default, good general), sgd, lbfgs (small data) |
alpha |
L2 regularization strength (combats overfitting) |
learning_rate_init |
Initial step size |
max_iter |
Max training epochs |
early_stopping |
Stop when validation score stops improving |
Why Feature Scaling Is Essential
Neural networks are sensitive to input scale: features on large ranges dominate gradients, slowing or destabilizing training. StandardScaler (zero mean, unit variance) puts features on comparable scales so the optimizer converges well. Fit the scaler on training data only, then apply it to test data - fitting on the whole dataset leaks test information.
Using a Pipeline (cleaner, avoids leakage)
Bundle scaling + model so the scaler is fit only within training folds:
from sklearn.pipeline import make_pipeline
clf = make_pipeline(StandardScaler(), MLPClassifier(hidden_layer_sizes=(16, 8), max_iter=500))
clf.fit(X_train, y_train)
clf.score(X_test, y_test)
Limitations vs Deep-Learning Frameworks
MLPClassifier is convenient but limited: CPU-only, no GPU acceleration, only fully-connected layers (no CNNs/RNNs/transformers), and less control over training. For large datasets, images, sequences, or custom architectures, use TensorFlow/Keras or PyTorch. scikit-learn's MLP shines for small/medium tabular problems and rapid prototyping.
Why This Matters in Interviews
ML interviews use this to check the scikit-learn workflow and ML hygiene. The standout points: scale features (and why - and fit the scaler on train only to avoid leakage), the fit/predict/predict_proba API, sensible hyperparameters (hidden_layer_sizes, activation, solver, alpha for regularization), proper train/test splitting with stratify, and knowing MLPClassifier's limits versus deep-learning frameworks. Using a Pipeline to prevent leakage is a maturity signal.
Common Pitfalls
- Not scaling features → poor convergence and accuracy.
- Data leakage - fitting the scaler on the full dataset instead of train only.
- Evaluating on training data instead of a held-out test set.
- Ignoring convergence warnings (
max_itertoo low) - increase iterations or scale data. - Expecting
MLPClassifierto handle images/sequences or scale to huge data (use TF/PyTorch).
References
- scikit-learn
MLPClassifier: https://scikit-learn.org/stable/modules/generated/sklearn.neural_network.MLPClassifier.html - scikit-learn preprocessing: https://scikit-learn.org/stable/modules/preprocessing.html