优化算法:遗传算法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()






