欢迎光临
我们一直在努力

Day14 启发式算法@浙大疏锦行

优化算法:遗传算法GA  粒子群优化PSO 模拟退火SA

殊途同归,避免陷入局部最优解导入必要的库

数据预处理遗传算法优化

# — 遗传算法 (GA) 优化 SVM —
# 遗传算法模拟生物进化:选择优良个体、交叉繁殖、基因变异

# 1.1 定义目标函数 (适应度函数)
# GA算法会给这个函数传一组参数,我们要返回这个参数对应的模型表现(越小越好,因为GA默认求最小)
def objective_svm(p):
# p是一个列表,包含了GA传进来的参数值
# p[0]: C (正则化参数), p[1]: gamma (核系数)
C, gamma = p

# 建立SVM模型
model = SVC(C=C, gamma=gamma, kernel='rbf', random_state=42)

# 使用3折交叉验证计算准确率
# cross_val_score 返回的是准确率列表,我们取平均值
accuracy = cross_val_score(model, X_scaled, y_scaled, cv=3, n_jobs=-1).mean()

# 因为GA是求最小值,而准确率越高越好,所以我们要取负数
return -accuracy

# 1.2 运行遗传算法
print("开始运行遗传算法优化 SVM …")
start = time.time()

ga = GA(
func=objective_svm, # 目标函数
n_dim=2, # 优化参数的个数 (C, gamma)
size_pop=20, # 种群大小 (每一代有多少个个体)
max_iter=10, # 最大迭代次数 (进化多少代)
lb=[0.1, 0.001], # 参数下界 (Lower Bound)
ub=[10.0, 1.0], # 参数上界 (Upper Bound)
precision=1e-7 # 精度
)

# 运行算法
best_x, best_y = ga.run()

end = time.time()
print(f"GA 优化完成!耗时: {end – start:.2f} 秒")
print(f"SVM 最佳参数: C={best_x[0]:.4f}, gamma={best_x[1]:.4f}")
print(f"最佳准确率: {-best_y[0]:.4f}") # 记得把负号取回来

# — 任务 1: 遗传算法 (GA) 优化 SVM —
# 遗传算法模拟生物进化:选择优良个体、交叉繁殖、基因变异

# 1.1 定义目标函数 (适应度函数)
# GA算法会给这个函数传一组参数,我们要返回这个参数对应的模型表现(越小越好,因为GA默认求最小)
def objective_svm(p):
# p是一个列表,包含了GA传进来的参数值
# p[0]: C (正则化参数), p[1]: gamma (核系数)
C, gamma = p

# 建立SVM模型
model = SVC(C=C, gamma=gamma, kernel='rbf', random_state=42)

# 使用3折交叉验证计算准确率
# cross_val_score 返回的是准确率列表,我们取平均值
accuracy = cross_val_score(model, X_scaled, y_scaled, cv=3, n_jobs=-1).mean()

# 因为GA是求最小值,而准确率越高越好,所以我们要取负数
return -accuracy

# 1.2 运行遗传算法
print("开始运行遗传算法优化 SVM …")
start = time.time()

ga = GA(
func=objective_svm, # 目标函数
n_dim=2, # 优化参数的个数 (C, gamma)
size_pop=20, # 种群大小 (每一代有多少个个体)
max_iter=10, # 最大迭代次数 (进化多少代)
lb=[0.1, 0.001], # 参数下界 (Lower Bound)
ub=[10.0, 1.0], # 参数上界 (Upper Bound)
precision=1e-7 # 精度
)

# 运行算法
best_x, best_y = ga.run()

end = time.time()
print(f"GA 优化完成!耗时: {end – start:.2f} 秒")
print(f"SVM 最佳参数: C={best_x[0]:.4f}, gamma={best_x[1]:.4f}")
print(f"最佳准确率: {-best_y[0]:.4f}") # 记得把负号取回来

# 1.3 可视化进化过程 (全英文标签)
plt.figure(figsize=(8, 5))
plt.plot(pd.DataFrame(ga.all_history_Y).min(axis=1))
plt.title('Genetic Algorithm (GA) Optimization History') # 英文标题
plt.xlabel('Generation') # 英文X轴
plt.ylabel('Objective Value (-Accuracy)') # 英文Y轴
plt.show()

赞(0)
未经允许不得转载:171主机测评 » Day14 启发式算法@浙大疏锦行
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址