Cross Validation example with Simple Python

Let’s simulate this using a basic neural network and manual k-Fold CV.

import numpy as np

# --- Generate dummy dataset ---
np.random.seed(42)
X = np.random.rand(100, 1)  # 100 samples, 1 feature
y = 3 * X.squeeze() + np.random.randn(100) * 0.1  # y = 3x + noise

# --- Simple Neural Network Model ---
def train_and_evaluate(X_train, y_train, X_val, y_val, epochs=100, lr=0.01):
    w = np.random.randn()
    b = np.random.randn()
    for epoch in range(epochs):
        y_pred = X_train * w + b
        error = y_pred - y_train
        loss = (error ** 2).mean()

        # Gradient descent
        grad_w = 2 * (error * X_train).mean()
        grad_b = 2 * error.mean()

        w -= lr * grad_w
        b -= lr * grad_b

    # Final evaluation
    val_pred = X_val * w + b
    val_loss = ((val_pred - y_val) ** 2).mean()
    return val_loss

# --- K-Fold Cross Validation ---
def cross_validate(X, y, k=5):
    fold_size = len(X) // k
    losses = []

    for i in range(k):
        start, end = i * fold_size, (i + 1) * fold_size
        X_val, y_val = X[start:end], y[start:end]
        X_train = np.concatenate([X[:start], X[end:]])
        y_train = np.concatenate([y[:start], y[end:]])

        loss = train_and_evaluate(X_train, y_train, X_val, y_val)
        print(f"Fold {i+1} Validation Loss: {loss:.4f}")
        losses.append(loss)

    print(f"\nAverage Validation Loss: {np.mean(losses):.4f}")
    return losses

# --- Run Cross Validation ---
cross_validate(X, y)

How to Know Cross-Validation Is Needed?

Here are signals:

Situation Why CV Helps
Small dataset Prevents overfitting, uses all data effectively
Highly variable results Stabilizes performance estimates
You’re tuning hyperparameters Ensures tuning isn’t biased by one split
Accuracy drops on unseen data Indicates overfitting; CV gives better generalization
Class imbalance CV ensures fair class distribution over folds

Cross Validation example with Simple Python – Summary