超参数调整专题2
- 三种启发式算法的示例代码:遗传算法、粒子群算法、退火算法
- 学习优化算法的思路(避免浪费无效时间)
作业:今天以自由探索的思路为主,尝试检索资料、视频、文档,用尽可能简短但是清晰的语言看是否能说清楚这三种算法每种算法的实现逻辑,帮助更深入的理解。
一、什么是启发式算法?
启发式算法(Heuristic Algorithm) 是一种通过经验、直觉或近似规则来寻找问题可行解的策略。它不保证找到全局最优解,但能在合理时间内提供足够好的解决方案,尤其适用于 复杂问题(NP难问题) 或 大规模数据场景。
二、遗传算法(GA)的核心原理
遗传算法(Genetic Algorithm) 是一种模拟生物进化过程的启发式优化算法,通过 选择、交叉、变异 操作迭代改进候选解。
1、遗传算法流程图示:
初始化种群 → 计算适应度 → 选择 → 交叉 → 变异 → 重复直到满足终止条件
2、算法流程:
-
初始化种群
随机生成一组候选解(个体),每个个体由基因编码表示(如二进制串、实数向量)。 -
适应度评估
计算每个个体的适应度值(Fitness),反映其解决问题的优劣。 -
选择(Selection)
根据适应度选择优秀个体进入下一代,常用方法:-
轮盘赌选择:适应度越高,被选中的概率越大。
-
锦标赛选择:随机选取多个个体,保留最优者。
-
-
交叉(Crossover)
模拟基因重组,从父代生成子代。常见方法:-
单点交叉:随机选择切分点,交换父代基因片段。
-
均匀交叉:按概率逐位交换基因。
-
-
变异(Mutation)
以低概率随机改变基因,维持种群多样性,避免早熟收敛。-
示例:二进制编码中随机翻转某一位(0→1或1→0)。
-
-
终止条件
达到预设迭代次数,或适应度不再显著提升时停止。
3、遗传算法过程主体代码:
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
from sklearn.metrics import classification_report, confusion_matrix
import warnings
warnings.filterwarnings("ignore")
import time
from deap import base, creator, tools, algorithms # DEAP是一个用于遗传算法和进化计算的Python库
import random
import numpy as np
# --- 初始化种群 ---
toolbox.register("population", tools.initRepeat, list, toolbox.individual)
pop = toolbox.population(n=20) # 创建包含20个个体的初始种群
# --- 计算适应度 ---
def evaluate(individual): # 适应度函数:用随机森林准确率作为适应度
# ... 模型训练和预测代码 ...
return accuracy, # 返回准确率作为适应度值
toolbox.register("evaluate", evaluate) # 注册评估函数
# --- 选择 ---
toolbox.register("select", tools.selTournament, tournsize=3) # 锦标赛选择(选择压力=3)
# --- 交叉和变异 ---
toolbox.register("mate", tools.cxTwoPoint) # 两点交叉
toolbox.register("mutate", tools.mutUniformInt, # 均匀整数变异
low=[参数下限], up=[参数上限], indpb=0.1) # 每个参数有10%概率突变
# --- 主循环(重复直到满足终止条件)---
for gen in range(NGEN): # NGEN=10 表示进化10代
offspring = algorithms.varAnd(pop, toolbox, cxpb=0.5, mutpb=0.2) # 交叉概率50%,变异概率20%
# 评估子代适应度
fits = toolbox.map(toolbox.evaluate, offspring)
# 选择新一代种群
pop = toolbox.select(offspring, k=len(pop))
# --- 输出最优解 ---
best_ind = tools.selBest(pop, k=1)[0] # 选择适应度最高的个体
4、各部分说明:
1. 初始化种群
- 使用 initRepeat 创建包含20个随机个体的初始种群,初始种群有20个个体。
- 每个个体由 n_estimators , max_depth , min_samples_split , min_samples_leaf 四个超参数组成,每个个体有4个基因,基因参数的变动会影响准确率(适应度)的变化,目的是寻找使的准确率最高的基因参数的取值。
2. 适应度计算
- 每次用个体的超参数构建随机森林模型
- 在测试集上计算准确率作为适应度值(这里可能存在问题,应该用验证集)
3. 选择操作
- 采用锦标赛选择(tournament selection)
- tournsize=3 表示每次从3个随机个体中选最优的
- 该机制能保持种群多样性,避免过早收敛
4. 交叉变异
- 两点交叉:随机选择两个交叉点交换基因片段
- 均匀变异:对每个超参数有10%的概率随机重置
变异范围受预设参数范围的约束
5. 终止条件
- 当前设置 NGEN=10 表示简单运行10代后终止
- 更严谨的做法应设置收敛条件(如适应度不再提升)
注意该实现的两个潜在问题:
1. 使用测试集计算适应度会导致参数过拟合测试集
2. 进化代数较少(仅10代)可能无法充分搜索参数空间
3. 种群规模较小(20个体)可能影响全局搜索能力
三、粒子群优化
(Particle Swarm Optimization - PSO)
灵感来源: 鸟群或鱼群觅食。
简单理解: 把每个超参数组合想象成一个“粒子”(鸟)。每个粒子在参数空间中“飞行”。它会记住自己飞过的最好位置,也会参考整个“鸟群”发现的最好位置,结合这两者来调整自己的飞行方向和速度,同时带点随机性。
应用感觉: 像是一群探险家,既有自己的探索记忆,也会互相交流信息(全局最佳位置),集体协作寻找目标。通常收敛比遗传算法快一些。
四、模拟退火
(Simulated Annealing - SA)
灵感来源: 金属冶炼中的退火过程(缓慢冷却使金属达到最低能量稳定态)。
简单理解: 从一个随机的超参数组合开始。随机尝试改变一点参数。如果新组合更好,就接受它。如果新组合更差,也有一定概率接受它(尤其是在“高温”/搜索早期)。这个接受环节的概率会随着时间(“降温”)慢慢变小。
应用感觉: 像一个有点“冲动”的探险家,初期愿意尝试一些看起来不太好的路径(为了跳出局部最优的小山谷),后期则越来越“保守”,专注于在当前找到的好区域附近精细搜索。擅长避免陷入局部最优。
五、核心思想:
1. 启发式算法都是优化器。最终目标是找到一组超参数,让你的机器学习模型在某一评估指标下(如accuracy)表现最好。
2. 这个过程就像是在高低起伏的山坡(参数空间)上寻找最高峰(最佳性能)。
3. 启发式算法就像是一群优秀的探险家,通过不同策略(模仿自然、物理现象)来寻找这个最高峰,而不需要知道地形每一处的精确梯度(导数)。
注:“启发式算法不需要知道地形每一处的精确梯度(导数)”如何理解?
1. 梯度下降法:依赖精确的“地图”
假设你是一位登山者,目标是找到山脉中的最高峰。如果使用梯度下降法(或类似的数学优化方法),你需要:
-
精确的梯度信息:知道当前位置的“坡度”(导数),沿着最陡的上升方向一步步攀爬。
-
局部依赖性强:只能根据当前位置的坡度调整方向,容易陷入局部最高点(即局部最优解),而错过真正的最高峰(全局最优解)。到达的是极大值点而非目标最大值点。
问题:如果地形复杂(如多峰、非凸函数),梯度下降法可能永远找不到全局最优解,且要求目标函数必须是可导的。
2. 启发式算法:像探险家一样探索未知
启发式算法(如遗传算法、模拟退火)则像一群聪明的探险家,通过以下策略探索未知地形:
-
不需要梯度信息:不需要知道每一步的具体坡度,而是通过随机探索、群体协作或物理现象模拟(如退火过程的温度变化)来寻找最高峰。
-
全局搜索能力:通过多样性策略(如遗传算法的交叉变异、蚁群算法的信息素更新)跳出局部最优,覆盖更广的区域。
类比说明:
-
遗传算法:派出一群探险家(种群),每个探险家尝试不同的路线(解)。优秀的路线(高适应度)会被保留并组合(交叉),偶尔尝试随机新路线(变异),最终找到最高峰。
-
模拟退火:允许探险家暂时接受较低的山峰(较差的解),随着时间推移逐渐减少这种“容忍度”(降温),最终稳定在最高峰。
启发式算法:遗传算法,粒子群优化,模拟退火;传统方法:梯度下降
算法 | 适用场景 | 优点 | 缺点 |
---|---|---|---|
遗传算法 | 多峰优化、非凸问题 | 全局搜索能力强 | 计算成本高、收敛速度慢 |
梯度下降 | 连续可导的凸优化问题 | 收敛速度快 | 易陷入局部最优 |
粒子群优化 | 低维连续空间优化 | 实现简单、参数少 | 高维问题效果差 |
模拟退火 | 组合优化、单目标问题 | 能跳出局部最优 | 降温策略设计复杂 |