From f71c28d4f70e36b9fb9b31e17f635f95c468e31a Mon Sep 17 00:00:00 2001 From: cy <939601402@qq.com> Date: Sat, 26 Oct 2024 19:43:43 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20function.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- function.py | 52 ++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 38 insertions(+), 14 deletions(-) diff --git a/function.py b/function.py index 7efd0a1..69ffd92 100644 --- a/function.py +++ b/function.py @@ -128,21 +128,45 @@ def accuracy(X, y, weights): predictions = [predict_logreg(sample, weights) for sample in X] return np.mean(predictions == y) # 计算准确率 -if __name__ == "__main__": - # 以下代码可用于测试,可自行随意修改 - # 加载训练集 - X_train, y_train = load_data("./horse-colic.data") +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) + + if acc > best_accuracy: + best_accuracy = acc + best_params = params + + return best_params, best_accuracy + +if __name__ == "__main__": + X_train, y_train = load_data("./horse-colic.data") X_test, y_test = load_data("./horse-colic.test") - # 训练对率回归模型 - weights = train_logreg(X_train, y_train, learning_rate=0.25, iterations=1500, batch_size=16, regularization='L2', - lambda_reg=0.5) - # 计算并输出准确率 - acc = accuracy(X_test, y_test, weights) - print(f"模型的准确率: {acc:.2f}") + # 定义参数网格 + 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] + } - # 测试单个数据 - y_pred = predict_logreg(X_test[11], weights) - print(f"预测结果: {y_pred}, 实际结果: {y_test[11]}") \ No newline at end of file + # 进行网格搜索 + 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_accuracy = accuracy(X_test, y_test, final_weights) + print(f"最终测试集的准确率: {final_accuracy:.4f}") \ No newline at end of file