如何在Python中从零实现逻辑回归的多超参数网格搜索调优
实现逻辑回归三超参数的网格搜索(纯NumPy实现)
要扩展到三个超参数的网格搜索,核心就是在原有双层循环的基础上增加一层循环,生成所有参数的三元组组合,再逐个训练模型并跟踪最优结果。以下是修改后的完整代码:
import numpy as np # 初始化最高准确率和最优参数 max_accuracy = 0 best_params = None # 定义三个超参数的候选值列表 learning_rates = [0.01, 0.02, 0.03, 0.04, 0.05, 0.001, 0.002, 0.003, 0.004, 0.005] iterations = [1000, 1500, 2000, 2500, 3000] lmds = [0.1, 0.5, 1, 2, 5, 10] # 新增正则化因子的候选值 # 生成所有参数组合:三层循环遍历所有可能的三元组 parameters = [] for lr in learning_rates: for n_step in iterations: for lmd in lmds: parameters.append((lr, n_step, lmd)) print(f"Possible combinations: {len(parameters)} total") # 遍历每个参数组合训练模型 for params in parameters: lr, n_step, lmd = params # 传入当前组合的所有三个超参数 model = LogisticRegression(learning_rate=lr, n_steps=n_step, n_features=X_train.shape[1], lmd=lmd) model.fit_reg(X_train, y_train, X_valid, y_valid) # 预测并计算准确率 Y_pred = model.predict(X_test, thrs=0.5) # 基于测试集标签计算准确率 accuracy = np.mean(Y_pred == y_test) # 更新最高准确率和最优参数 if accuracy > max_accuracy: max_accuracy = accuracy best_params = params print(f"New best accuracy: {max_accuracy:.4f}, params: {best_params}") print(f"\nFinal best accuracy: {max_accuracy:.4f}") print(f"Best parameters: learning_rate={best_params[0]}, n_steps={best_params[1]}, lmd={best_params[2]}")
关键改动说明
- 新增参数候选列表:添加
lmds列表定义正则化因子的待选值,可根据模型需求调整范围和步长 - 扩展参数组合生成:用三层嵌套循环生成所有
(learning_rate, n_steps, lmd)的三元组组合,确保覆盖所有可能的参数搭配 - 参数传入模型:实例化
LogisticRegression时,将当前遍历到的lmd值传入,替换原来固定的lmd=2 - 准确率跟踪逻辑:补充基于NumPy的准确率计算逻辑,实时更新最高准确率和对应的最优参数,方便后续查看
内容的提问来源于stack exchange,提问作者Kalman
相关产品推荐
相关产品推荐

