diff --git a/function.py b/function.py index 8120056..7e7dcef 100644 --- a/function.py +++ b/function.py @@ -36,7 +36,9 @@ def load_data(filepath): # Add bias term (intercept) X = np.insert(X, 0, 1, axis=1) - + scaler = StandardScaler() + X = scaler.fit_transform(X) + return X, y_train def train_logreg(X, y, numIter=1000, learning_rate=0.01, batch_size=128, lambda_reg=0.01): @@ -74,60 +76,3 @@ def predict_logreg(inX, weights): prob = 1 / (1 + np.exp(-z)) return 1 if prob >= 0.5 else 0 -if __name__ == "__main__": - # Data loading - X_train, y_train = load_data("./data/horse-colic.data") - X_test, y_test = load_data("./data/horse-colic.test") - - # Standardize the features - scaler = StandardScaler() - X_train = scaler.fit_transform(X_train) - X_test = scaler.transform(X_test) - - # Split training data into training and validation sets - X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size=0.2, random_state=42) - - # Logistic regression training and evaluation - best_weights = None - best_auc = 0 - - for iter in range(1, 1001): - weights = train_logreg(X_train, y_train, numIter=iter, learning_rate=0.01, lambda_reg=0.1) - y_pred = [predict_logreg(x, weights) for x in X_val] - - # AUC score for validation predictions - auc = roc_auc_score(y_val, y_pred) - - if auc > best_auc: - best_auc = auc - best_weights = weights - - if iter > 10 and auc == best_auc: - break - - # Predictions on the test set - y_pred_test = [predict_logreg(x, best_weights) for x in X_test] - accuracy_test = accuracy_score(y_test, y_pred_test) - print(f"Test Accuracy: {accuracy_test}") - - # Random Forest model example - rf = RandomForestClassifier(n_estimators=100, random_state=42) - rf.fit(X_train, y_train) - rf_accuracy = rf.score(X_test, y_test) - print(f"Random Forest Test Accuracy: {rf_accuracy}") - - # Gradient Boosting model example - gb_clf = GradientBoostingClassifier() - gb_clf.fit(X_train, y_train) - yf_pred_gb = gb_clf.predict(X_test) - gb_accuracy = accuracy_score(y_test, yf_pred_gb) - print(f"Gradient Boosting Test Accuracy: {gb_accuracy}") - - # Cross-validation for Gradient Boosting - scores = cross_val_score(gb_clf, X_train, y_train, cv=5, scoring='accuracy') - print("Cross-validation scores:", scores) - print("Average cross-validation score:", np.mean(scores)) - - # F1 score evaluation - f1 = f1_score(y_test, yf_pred_gb) - print("F1 Score:", f1) \ No newline at end of file