# Let's see why we use (predictions - targets) ** 2 pred = np.array([0.8, 0.2, 0.9, 0.1]) target = np.array([1.0, 0.0, 1.0, 0.0]) differences = pred - target squared_differences = differences ** 2 print("Understanding squared error:") print(f"Predictions: {pred}") print(f"Targets: {target}") print(f"Differences: {differences}") print(f"Squared: {squared_differences}") print(f"Mean squared error: {np.mean(squared_differences):.4f}") # Why not just absolute difference? abs_differences = np.abs(differences) print(f"\nComparison:") print(f"Absolute differences: {abs_differences}") print(f"Squared differences: {squared_differences}") print("Squared errors penalize large mistakes more heavily!")