import numpy as np import sklearn from sklearn.linear_model import LogisticRegression from sklearn.preprocessing import StandardScaler feature_names = ["age_years", "annual_income", "monthly_visits"] X_train = np.array( [ [22, 38000, 4], [25, 42000, 5], [47, 88000, 7], [52, 92000, 8], [31, 58000, 6], [45, 76000, 7], [28, 54000, 5], [39, 69000, 6], ], dtype=float, ) y_train = np.array([0, 0, 1, 1, 0, 1, 0, 1]) X_holdout = np.array([[34, 62000, 6]], dtype=float) scaler = StandardScaler() X_train_scaled = scaler.fit_transform(X_train) X_holdout_scaled = scaler.transform(X_holdout) model = LogisticRegression(max_iter=1000, random_state=0) model.fit(X_train_scaled, y_train) prediction = model.predict(X_holdout_scaled) def display_zero(value): return 0.0 if abs(value) < 5e-12 else value print(f"scikit-learn {sklearn.__version__}") print("Scaler learned on training rows only:") print(f"- rows_seen: {int(scaler.n_samples_seen_)}") print( "- mean_: " + ", ".join( f"{name}={value:.2f}" for name, value in zip(feature_names, scaler.mean_) ) ) print( "- scale_: " + ", ".join( f"{name}={value:.2f}" for name, value in zip(feature_names, scaler.scale_) ) ) print() print("Scaled training columns:") for name, mean, std in zip( feature_names, X_train_scaled.mean(axis=0), X_train_scaled.std(axis=0) ): print(f"- {name}: mean={display_zero(mean):.6f}, std={std:.6f}") print() print("Scaled holdout row:") for name, value in zip(feature_names, X_holdout_scaled[0]): print(f"- {name}: {value:.3f}") print() print(f"Holdout prediction from scaled features: {prediction.tolist()}")