diff --git a/function.py b/function.py index c025176..62f4355 100644 --- a/function.py +++ b/function.py @@ -3,14 +3,14 @@ import numpy as np id="202210423210" name="陈宇杰" -# Utility Functions +# Sigmoid Function def sigmoid(z): return 1 / (1 + np.exp(-z)) -# Optimized Logistic Regression Training +# Optimized Logistic Regression Training Function def train_logreg(X, y, learning_rate=0.01, iterations=1000, batch_size=128, lambda_reg=0.01): m, n = X.shape - weights = np.random.randn(n) * 0.01 # Initialize weights with small random values for faster convergence + weights = np.random.randn(n) * 0.01 # Initialize weights with small random values prev_weights = np.copy(weights) for j in range(iterations): @@ -30,7 +30,7 @@ def train_logreg(X, y, learning_rate=0.01, iterations=1000, batch_size=128, lamb weights += learning_rate * gradient - # Early stopping: Check for convergence + # Early stopping condition if np.linalg.norm(weights - prev_weights) < 1e-5: print(f"Converged after {j} iterations.") break @@ -42,7 +42,7 @@ def predict_logreg(X, weights): probabilities = sigmoid(np.dot(X, weights)) return (probabilities >= 0.5).astype(int) -# Load Data Function +# Data Loading Function def load_data(filepath): data, labels = [], [] with open(filepath, 'r') as file: @@ -53,22 +53,23 @@ def load_data(filepath): data.append(features) labels.append(1 if label in ['2', '3'] else 0) + # Convert to numpy arrays data = np.array(data) labels = np.array(labels) - - # Normalize data - data_mean = np.mean(data, axis=0) - data_std = np.std(data, axis=0) - data = (data - data_mean) / (data_std + 1e-10) - return data, labels, data_mean, data_std + return data, labels -# Load and Preprocess Data +# Main script if __name__ == "__main__": - # Training data - X_train, y_train, data_mean, data_std = load_data("./data/horse-colic.data") - # Normalize test data using training mean and std - X_test, y_test, _, _ = load_data("./data/horse-colic.test") + # Load training data + X_train, y_train = load_data("./data/horse-colic.data") + # Calculate mean and std from training data + data_mean = np.mean(X_train, axis=0) + data_std = np.std(X_train, axis=0) + X_train = (X_train - data_mean) / (data_std + 1e-10) + + # Load and normalize test data using training mean and std + X_test, y_test = load_data("./data/horse-colic.test") X_test = (X_test - data_mean) / (data_std + 1e-10) # Train model