generated from LufsX/Experiment-LogReg
This commit is contained in:
+3
-58
@@ -36,7 +36,9 @@ def load_data(filepath):
|
|||||||
|
|
||||||
# Add bias term (intercept)
|
# Add bias term (intercept)
|
||||||
X = np.insert(X, 0, 1, axis=1)
|
X = np.insert(X, 0, 1, axis=1)
|
||||||
|
scaler = StandardScaler()
|
||||||
|
X = scaler.fit_transform(X)
|
||||||
|
|
||||||
return X, y_train
|
return X, y_train
|
||||||
|
|
||||||
def train_logreg(X, y, numIter=1000, learning_rate=0.01, batch_size=128, lambda_reg=0.01):
|
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))
|
prob = 1 / (1 + np.exp(-z))
|
||||||
return 1 if prob >= 0.5 else 0
|
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