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

This commit is contained in:
cy
2024-10-26 19:57:46 +08:00
parent 6f445ce205
commit 44d0338772
+2 -43
View File
@@ -30,7 +30,7 @@ def sigmoid(z):
return 1.0 / (1 + np.exp(-z))
def train_logreg(X, y, learning_rate=0.01, iterations=1000, batch_size=32, regularization=None, lambda_reg=0.1):
def train_logreg(X, y, learning_rate=0.05, iterations=1500, batch_size=64, regularization='L2', lambda_reg=0.05):
"""
对率回归训练函数。
@@ -124,53 +124,12 @@ def load_data(filepath):
return data, target_variable
def accuracy(X, y, weights):
predictions = [predict_logreg(sample, weights) for sample in X]
return np.mean(predictions == y) # 计算准确率
def grid_search(X_train, y_train, X_test, y_test, param_grid):
best_accuracy = 0
best_params = None
for params in product(*param_grid.values()):
learning_rate, iterations, batch_size, regularization, lambda_reg = params
# 训练模型
weights = train_logreg(X_train, y_train, learning_rate, iterations, batch_size, regularization, lambda_reg)
# 计算测试集准确率
acc = accuracy(X_test, y_test, weights)
print(f"尝试参数组合: {params}, 测试集准确率: {acc:.4f}")
if acc > best_accuracy:
best_accuracy = acc
best_params = params
return best_params, best_accuracy
if __name__ == "__main__":
X_train, y_train = load_data("./data/horse-colic.data")
X_test, y_test = load_data("./data/horse-colic.test")
# 定义参数网格
param_grid = {
'learning_rate': [0.01, 0.05, 0.1, 0.15, 0.2, 0.25],
'iterations': [200, 500, 1000, 1500],
'batch_size': [16, 32, 64, 128],
'regularization': [None, 'L1', 'L2'],
'lambda_reg': [0.1, 0.5, 0.05, 0.15]
}
# 进行网格搜索
best_params, best_accuracy = grid_search(X_train, y_train, X_test, y_test, param_grid)
print(f"最佳参数组合: {best_params}")
print(f"最佳准确率: {best_accuracy:.4f}")
# 使用最佳参数组合进行最终测试
best_learning_rate, best_iterations, best_batch_size, best_regularization, best_lambda_reg = best_params
final_weights = train_logreg(X_train, y_train, best_learning_rate, best_iterations, best_batch_size, best_regularization, best_lambda_reg)
final_weights = train_logreg(X_train, y_train, learning_rate=0.05, iterations=1500, batch_size=64, regularization='L2', lambda_reg=0.05)
# 计算并输出最终测试集的准确率
final_accuracy = accuracy(X_test, y_test, final_weights)