更新 function.py
Gitea Actions Experiment Test / Experiment-Actions (push) Successful in 12s

This commit is contained in:
2024-11-03 21:57:01 +08:00
parent cab0fa2857
commit 2cc6215467
+17 -16
View File
@@ -3,14 +3,14 @@ import numpy as np
id="202210423210" id="202210423210"
name="陈宇杰" name="陈宇杰"
# Utility Functions # Sigmoid Function
def sigmoid(z): def sigmoid(z):
return 1 / (1 + np.exp(-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): def train_logreg(X, y, learning_rate=0.01, iterations=1000, batch_size=128, lambda_reg=0.01):
m, n = X.shape 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) prev_weights = np.copy(weights)
for j in range(iterations): 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 weights += learning_rate * gradient
# Early stopping: Check for convergence # Early stopping condition
if np.linalg.norm(weights - prev_weights) < 1e-5: if np.linalg.norm(weights - prev_weights) < 1e-5:
print(f"Converged after {j} iterations.") print(f"Converged after {j} iterations.")
break break
@@ -42,7 +42,7 @@ def predict_logreg(X, weights):
probabilities = sigmoid(np.dot(X, weights)) probabilities = sigmoid(np.dot(X, weights))
return (probabilities >= 0.5).astype(int) return (probabilities >= 0.5).astype(int)
# Load Data Function # Data Loading Function
def load_data(filepath): def load_data(filepath):
data, labels = [], [] data, labels = [], []
with open(filepath, 'r') as file: with open(filepath, 'r') as file:
@@ -53,22 +53,23 @@ def load_data(filepath):
data.append(features) data.append(features)
labels.append(1 if label in ['2', '3'] else 0) labels.append(1 if label in ['2', '3'] else 0)
# Convert to numpy arrays
data = np.array(data) data = np.array(data)
labels = np.array(labels) labels = np.array(labels)
# Normalize data return data, labels
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 # Main script
# Load and Preprocess Data
if __name__ == "__main__": if __name__ == "__main__":
# Training data # Load training data
X_train, y_train, data_mean, data_std = load_data("./data/horse-colic.data") X_train, y_train = load_data("./data/horse-colic.data")
# Normalize test data using training mean and std # Calculate mean and std from training data
X_test, y_test, _, _ = load_data("./data/horse-colic.test") 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) X_test = (X_test - data_mean) / (data_std + 1e-10)
# Train model # Train model