寻求可分离Nu参数的Sklearn One-Class SVM Python实现
OneClassSVM 参数分离与纯单类实现问题解答
Sklearn OneClassSVM 核心参数中文说明
nu:浮点数,默认值 0.5
训练误差占比的上限,同时也是支持向量占比的下限。取值范围为 (0, 1]。
OneClassSVM 是一种无监督算法,用于学习新颖性检测的决策函数:将新数据分类为与训练集相似或不同。
可分离训练误差与支持向量参数的实现方案
Sklearn 内置的 OneClassSVM 确实通过 nu 参数将训练误差上限和支持向量下限绑定在一起,没有提供单独设置这两个约束的接口。针对你的场景(数据无训练误差但需要指定支持向量比例),可以尝试以下两种方案:
- 利用数据可分性直接调整
nu参数:当训练数据完全可分时,模型的训练误差会自动为0,此时nu参数的作用仅体现为支持向量占比的下限。你可以直接将nu设置为你需要的支持向量占比(比如想要至少15%的样本作为支持向量,就设nu=0.15),无需人为污染数据。这种方法最简单,且完全基于Sklearn现有实现。 - 自定义实现原始单类SVM:如果需要严格分离两个约束,可以基于原始单类SVM的优化问题,使用二次规划工具(如
cvxopt)手动实现。原始优化目标可以拆分为:
最小化||w||² + C * Σξ_i,同时添加两个独立约束:- 训练误差约束:
Σξ_i ≤ ε * n(ε为训练误差占比上限,n为样本数) - 支持向量约束:支持向量数量 ≥
ρ * n(ρ为支持向量占比下限)
不过这种实现需要你对SVM的数学原理有一定了解,且调试成本较高。
- 训练误差约束:
纯单类SVM实现说明
Sklearn 的 OneClassSVM 本身就是纯单类SVM实现,训练时完全不需要假设或提供异常类实例。它是无监督算法,仅基于正常样本学习决策边界,用于后续检测异常样本。你当前使用的版本就符合你的需求。
内容的提问来源于stack exchange,提问作者Riley K
相关产品推荐
相关产品推荐

