65.9K
CodeProject 正在变化。 阅读更多。
Home

支持向量机分类器

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.82/5 (20投票s)

2008年4月14日

GPL3

2分钟阅读

viewsIcon

142016

downloadIcon

8027

支持向量机分类类, 支持 SSE 优化

引言

支持向量机 (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 决策函数由以下公式表示

SVM decision function

其中 x 是输入向量,alphay 是支持向量的 权重,其中 y 作为正或负类标记 (+1 或 -1),b偏置。 从鸢尾花 SVM 文件中,我们可以看到有 4 个四维支持向量(前 3 个来自正类,是 setosa 样本,最后一个来自负类,属于 virgi),核是 多项式,参数为 3,偏置 等于 1.1854890124462447。

在我的类中,我使用 3 个核。

  1. 线性:

    linear kernel

  2. rbf:

    RBF kernel

  3. 多项式:

    polynomial kernel

    其中 param 是 SVM 文件中的 [核参数]。

通常使用网格搜索通过在某个范围内改变 alphaparam 来选择最佳分类(回归)结果。 在我的鸢尾花 SVM 中,alphas 等于 1,param 是多项式的阶数。

要将未知向量样本 x 分类为属于正类或负类,请使用 SVMachine::classify() 函数。 它返回 +1 或 -1 作为分类结果,并向 y 提供 SVM 决策公式的求和结果。

关注点

添加其他核。

历史

  • 2008 年 4 月 14 日:初始发布
© . All rights reserved.