generated from LufsX/Experiment-LogReg
This commit is contained in:
+3
-58
@@ -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)
|
||||
Reference in New Issue
Block a user