支持向量机分类器






3.82/5 (20投票s)
支持向量机分类类,
引言
支持向量机 (SVM) 是一种非线性分类器,通常被报告为产生比其他方法更好的分类结果。 该方法背后的想法是将输入数据非线性地映射到一些高维空间,在那里数据可以被线性分离,从而提供出色的分类(或回归)性能。 SVM 的瓶颈之一是用于执行分类(或回归)任务的来自训练集的大量支持向量。 在我的代码中,我使用 SSE 优化来提高性能。
背景(可选)
www.kernel-machines.org 是 SVM 信息的一个很好的来源。
Using the Code
在 SVM 类中,我使用我的 2D SSE 优化向量 代码进行更快的计算。 SVMachine
类包含您需要使用的以下函数
SVMachine::SVMachine(const wchar_t* fname);
构造函数int SVMachine::status() const;
构造函数后的状态(成功为 0,出错为负数)unsigned int SVMachine::dimension() const;
SVM 的维度int SVMachine::classify(const float* x, double& y) const;
对未知向量 x 进行分类
ctor
从文件读取 SVM 配置,该文件具有以下文本格式
input vector dimensionality
number of support vectors
kernel type [kernel parameter]
bias
weight
1st support vector
weight
2nd support vector
...
例如,以下展示了用于将鸢尾花数据集中的 setosa 与 virgi 分类的多项式核 SVM,该 SVM 由 4 个支持向量组成
4
4
polynomial 3
1.1854890124462447
7.792329562624775e-012
51
33
17
5
9.9563612529691003e-012
48
34
19
2
1.0631195782759572e-011
51
38
19
4
-2.8372847134273557e-011
49
25
45
17
SVM 决策函数由以下公式表示

其中 x
是输入向量,alpha
和 y
是支持向量的 权重
,其中 y
作为正或负类标记 (+1 或 -1),b
是 偏置
。 从鸢尾花 SVM 文件中,我们可以看到有 4 个四维支持向量(前 3 个来自正类,是 setosa 样本,最后一个来自负类,属于 virgi),核是 多项式
,参数为 3,偏置
等于 1.1854890124462447。
在我的类中,我使用 3 个核。
线性
:rbf
:多项式
:其中
param
是 SVM 文件中的 [核参数]。
通常使用网格搜索通过在某个范围内改变 alpha
和 param
来选择最佳分类(回归)结果。 在我的鸢尾花 SVM 中,alphas
等于 1,param
是多项式的阶数。
要将未知向量样本 x
分类为属于正类或负类,请使用 SVMachine::classify()
函数。 它返回 +1 或 -1 作为分类结果,并向 y
提供 SVM 决策公式的求和结果。
关注点
添加其他核。
历史
- 2008 年 4 月 14 日:初始发布