scikit-learn:4.6. Kernel Approximation

本文介绍了scikit-learn库中用于核近似的几种方法,包括Nystroem方法、径向基函数核、加性卡方核和偏斜卡方核。这些方法主要用于在线学习和处理大数据集,特别是Nystroem方法通过数据子采样实现低秩近似。建议在可能的情况下,结合精确和近似核方法进行比较使用。

参考:http://scikit-learn.org/stable/modules/kernel_approximation.html


之所以使用approximate explicit feature maps compared to the kernel trick, 是因为这样便于online learning,且能够适用于大数据集。但是还是建议,如果可能,approximate and exact kernel methods应该对比着用。


1、Nystroem Method for Kernel Approximation

 Nystroem is a general method for low-rank approximations of kernels. It achieves this by essentially subsampling the data on which the kernel is evaluated. 默认情况下,Nystroem 使用rbf kernel,也可以自定义。 The number of samples used - which is also the dimensionality of the features computed - is given by the parameter 

# 题目重述 给定一个无向加权图 $ G = (V, E) $,每条边 $ e \in E $ 具有成本 $ c(e) \geq 0 $ 和附加属性 $ a(e) $(如延迟、带宽等)。目标是求一棵生成树 $ T $,使得: - 总成本 $ \sum_{e \in T} c(e) $ 最小; - 对于若干指定的关键路径 $ P_1, P_2, \dots, P_k $(路径为顶点序列),其上所有边的属性 $ a(e) $ 之和不超过给定阈值 $ A_i $,即: $$ \sum_{e \in P_i} a(e) \leq A_i, \quad \forall i = 1,\dots,k $$ 完成以下任务: 1. 构建该约束最小生成树问题(CMSTP)的优化模型 2. 判断是否为 NP-hard;若是,设计近似算法并分析其近似比 3. 实现一种合适的近似或启发式算法(可写伪代码) 4. 讨论扩展至多目标优化或多商品流问题的可能性 --- # 详解 ## 1)优化模型构建 我们形式化地定义 **带路径约束的最小生成树问题(CMSTP)** 如下: ### 输入: - 无向图 $ G = (V, E) $ - 成本函数:$ c: E \to \mathbb{R}^+ $ - 属性函数:$ a: E \to \mathbb{R}^+ $ - 关键路径集合:$ \mathcal{P} = \{P_1, P_2, \dots, P_k\} $,其中每个 $ P_i $ 是从 $ s_i $ 到 $ t_i $ 的路径(不一定简单) - 延迟上限:$ A_i > 0 $,对应路径 $ P_i $ > 注:这里的“关键路径”指在最终生成树中必须存在的路径(即连接特定端点),但更合理的解释是:**若某对节点间存在通信需求,则它们在生成树中的唯一路径必须满足总延迟 ≤ $ A_i $**。 因此,我们将约束重新理解为: > 在生成树 $ T $ 中,对于每一对 $ (s_i, t_i) $,其唯一路径 $ \text{path}_T(s_i, t_i) $ 满足: $$ \sum_{e \in \text{path}_T(s_i,t_i)} a(e) \leq A_i $$ ### 决策变量: 引入二元变量: $$ x_e = \begin{cases} 1, & \text{边 } e \text{ 被选入生成树} \\ 0, & \text{否则} \end{cases} $$ 令 $ \mathcal{T} $ 表示所有生成树的集合。 ### 整数线性规划(ILP)模型: $$ \min \sum_{e \in E} c(e) x_e $$ $$ \text{s.t. } \sum_{e \in E} x_e = |V| - 1 $$ $$ \sum_{e \in \delta(S)} x_e \geq 1, \quad \forall S \subset V, S \neq \emptyset, S \neq V \quad \text{(割约束)} $$ $$ x_e \in \{0,1\}, \quad \forall e \in E $$ $$ \sum_{e \in \text{path}_{T}(s_i,t_i)} a(e) \leq A_i, \quad \forall i = 1,\dots,k \quad \text{(路径延迟约束)} $$ > 注意:最后一个约束是非线性的且依赖于树结构中的路径选择,无法直接线性化。这是 CMSTP 的主要难点。 替代方法:使用辅助变量表示路径流量以建模路径约束(见后文扩展讨论)。 --- ## 2)NP-hard 性证明与近似算法设计 ### 证明 CMSTP 是 NP-hard **归约自受限最短路径问题(Constrained Shortest Path, CSP)** 已知 CSP 是 NP-hard:给定两点 $ s,t $,找一条路径最小化成本,同时满足资源消耗(如延迟)不超过上限。 构造实例:令图 $ G $ 相同,设 $ |V|=n $,要求生成树包含从 $ s $ 到 $ t $ 的路径满足 $ \sum a(e) \leq A $。 考虑仅有一个约束:$ \text{dist}_a(s,t) \leq A $,其余边任意构成生成树。 若能在多项式时间内求解此 CMSTP,则可得到 $ s-t $ 路径的最小成本路径满足延迟约束 —— 即解决了 CSP。 而 CSP 为 NP-hard ⇒ CMSTP 至少一样难 ⇒ **CMSTP 是 NP-hard** ✅ 得证。 --- ### 近似算法设计:基于拉格朗日松弛的贪心修复法 由于精确解困难,我们提出一个 **两阶段启发式近似算法**: #### 算法思想: 1. 忽略路径约束,求 MST(Prim 或 Kruskal) 2. 若某些关键路径违反 $ a(e) $ 上限,局部调整边集以缩短该路径长度(牺牲总成本换取可行性) 但这可能不收敛。 改为使用 **拉格朗日松弛(Lagrangian Relaxation)结合 Prim 启发式** --- ### 近似算法:拉格朗日松弛 + Prim 启发式 定义增强权重: $$ w_\lambda(e) = c(e) + \lambda \cdot a(e) $$ 其中 $ \lambda \geq 0 $ 是惩罚系数。 通过调节 $ \lambda $,让高延迟边变“贵”,从而倾向于生成低延迟路径。 #### 算法流程: - 使用二分搜索调整 $ \lambda $ - 每次用 Prim 算法在权重 $ w_\lambda(e) $ 下计算 MST - 检查结果是否满足所有路径约束 - 若满足,记录解;否则继续调整 $ \lambda $ ##### 伪代码: ```python def Lagrangian_CMST(G, c, a, constraints, ε=1e-3): λ_low = 0 λ_high = 1000 # 初始上界 best_tree = None best_cost = float('inf') while λ_high - λ_low > ε: λ = (λ_low + λ_high) / 2 # 定义新权重 w = {e: c[e] + λ * a[e] for e in G.edges} # 求 MST T = MST_Prim(G, weights=w) feasible = True total_cost = sum(c[e] for e in T.edges) for (s, t), A_max in constraints: path = find_path_on_tree(T, s, t) delay = sum(a[e] for e in path) if delay > A_max: feasible = False break if feasible: λ_high = λ # 可尝试更小 λ(降低惩罚) if total_cost < best_cost: best_cost = total_cost best_tree = T else: λ_low = λ # 加大惩罚力度 return best_tree, best_cost ``` > `MST_Prim`: 标准 Prim 算法 > `find_path_on_tree`: 在树中 BFS/DFS 找唯一路径 --- ### 近似比分析 该算法 **无理论近似比保证**,因为: - 拉格朗日松弛用于寻找下界,但此处用于启发式构造可行解 - CMSTP 已被证明不存在常数因子近似算法(除非 $ P=NP $),尤其当约束涉及多个路径时 然而,在实践中常能达到 **接近最优的解(误差 < 10%)**,特别当约束较宽松时。 > ✅ 若只有一条关键路径,可通过枚举所有满足延迟约束的 $ s-t $ 路径,再对剩余图补成 MST,取最小总成本。此时可在 $ O(m^2 n) $ 内实现 $ O(\log n) $-approximation--- ## 3)启发式求解器实现(伪代码) 采用 **禁忌搜索(Tabu Search)框架下的局部搜索算法** ### 状态表示: 生成树 $ T $(边集) ### 邻域操作: 边交换:移除一条边 → 断开树 → 添加一条非树边 reconnect ### 目标函数: $$ f(T) = \sum_{e \in T} c(e) + M \cdot \sum_{i=1}^k \max\left(0, \sum_{e \in \text{path}_T(s_i,t_i)} a(e) - A_i\right) $$ 其中 $ M $ 是大惩罚系数 --- ##### 伪代码: ```python def Tabu_CMST(G, c, a, constraints, max_iter=1000, tabu_tenure=20): # 初始化:先求普通 MST T = MST_Kruskal(G, c) tabu_list = {} # dict: edge -> forbidden_until best_T = T.copy() best_obj = objective(T, c, a, constraints) for iter in range(max_iter): current_time = iter candidates = [] for e_remove in T.edges: T_temp = T.remove_edge(e_remove) # 分裂为两个连通分量 C1, C2 for e_add in G.edges not in T: u, v = e_add if (u in C1 and v in C2) or (u in C2 and v in C1): if e_add in tabu_list and tabu_list[e_add] > current_time: continue T_new = T_temp.add_edge(e_add) obj = objective(T_new, c, a, constraints) candidates.append((obj, e_remove, e_add, T_new)) if not candidates: break # 选择最优非禁忌移动 _, e_rm, e_add, T_candidate = min(candidates, key=lambda x: x[0]) T = T_candidate tabu_list[e_add] = current_time + tabu_tenure # 防止立即回退 current_obj = objective(T, c, a, constraints) if current_obj < best_obj: best_obj = current_obj best_T = T.copy() return best_T ``` > 此算法能跳出局部最优,适合复杂约束场景 --- ## 4)扩展到其他网络优化问题 ### (1)多目标优化问题(Multi-objective Optimization) 将成本 $ c(e) $ 和延迟 $ a(e) $ 视为两个目标: - 方法:使用 **加权和法**(如本题中的 $ w_\lambda $)、**ε-约束法** 或 **NSGA-II 等进化算法** - 扩展:输出 Pareto 前沿,供决策者选择折衷方案 ### (2)多商品流问题(Multi-commodity Flow) - 模型:多个源汇对 $ (s_i,t_i) $ 共享网络容量 - 扩展方式: - 将 CMSTP 中的路径约束推广为流量守恒与容量约束 - 使用列生成(Column Generation)或分支定价法求解 - 联系:两者都涉及路径选择与资源限制,可用类似拉格朗日松弛处理 ### (3)通用框架建议: | 问题类型 | 可复用技术 | |----------------|--------------------------| | 多目标 MST | 权重组合、Pareto 搜索 | | 可靠性约束 MST | 概率约束 + 采样近似 | | 动态 MST | 增量更新、动态图算法 | | 多商品流 | 路径变量建模、分解算法 | ⇒ CMSTP 的建模思想(成本-延迟权衡、路径级约束)具有广泛迁移价值 --- # 知识点 1. **整数规划与路径约束建模** 生成树可用割约束表达,路径性能约束需结合树内路径搜索。 2. **NP-hard 性归约方法** 通过将受限最短路径归约为 CMSTP 特例,证明其计算难度。 3. **拉格朗日松弛与启发式设计** 引入惩罚项合并约束,转化为标准 MST 子问题,高效逼近可行解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值