halcon分类器算子:create_class_svm

create_class_svm

名称

create_class_svm —创建用于模式分类的支持向量机。

签名

描述

create_class_svm创建可用于模式分类的支持向量机。NumFeatures中指定要分类的模式的维,在NumClasses中指定不同类的数量

对于类别可以线性分离的二进制分类问题,SVM算法从训练集中选择数据向量,这些数据向量用于构造不同类别之间的最佳分离超平面。在不同类别的凸包之间的边距最大化的意义上,该超平面是最佳的。位于边缘的训练模式定义了超平面,称为支持向量(SV)。

使用以下公式对特征向量z进行分类:

这里是支持向量, 对它们的类成员资格()和 权重系数进行编码超平面到原点的距离为b。和B与训练期间确定train_class_svm请注意,决策边界的定义只需要原始训练集的一个子集(:支持向量的数量),因此将丢弃不是支持向量的数据向量。分类速度取决于对支持向量和要分类的特征向量之间的点积的评估,因此取决于特征向量的长度和支持向量的数量。 


对于类别不能线性分离的分类问题,算法以两种方式扩展。首先,在训练过程中,一定数量的错误(重叠)通过使用松弛变量来补偿。这意味着的 上限是正则化常数。为了能够直观地控制训练错误的数量,使用了 Nu -SVM版本的训练算法。这里,正则化参数Nu是训练误差的数量的渐近上限,并且是支持向量的数量的渐近下限。根据经验,应将参数 Nu设置为应用程序特定误码率的先前期望值,例如0.01 (相当于最大训练误差为1%)。请注意,Nu值太大可能会导致无法实现的训练问题,即SVM无法正确训练(有关更多详细信息,请参阅 train_class_svm)。由于只能在训练期间确定,因此只能在此处提出例外。在这种情况下,必须创建一个新的SVM,其中Nu的选择较小。

其次,由于上述SVM仅计算特征向量之间的点积,因此可以将内核函数合并到训练和测试算法中。这意味着点积被内核函数替代,该函数在更高维的特征空间中隐式执行点积。给定适当的核变换,原本不是线性可分离的分类任务将在高维特征空间中变为线性可分离。

可以使用参数KernelType选择不同的内核功能 对于KernelType = 'linear',将计算上式中指定的点积。此内核应仅用于线性或几乎线性可分离的分类任务。参数KernelParam在这里被忽略。

径向基函数(RBF)KernelType = rbf '是内核函数的最佳选择,因为它对许多分类任务均能达到良好的效果。它定义为:

在这里,参数KernelParam用于选择 的直观含义是支持向量对其周围环境的影响量。值大(对环境的影响小)意味着每个训练向量成为支持向量。训练算法“心脏地”学习训练数据,但是缺乏任何泛化能力(过度拟合)。另外,训练/分类时间显着增加。值太小(对周围环境影响较大)导致定义分离超平面的支持向量很少(拟合不足)。一个典型的策略是选择小-怒江对和连续增加值,只要识别率增加。 


KernelType = 'polynomial_homogeneous'或 'polynomial_inhomogeneous'时,可以选择多项式内核。它们的定义方式如下:

多项式内核的阶数必须使用KernelParam设置 请注意,过高的多项式(d> 10)可能会导致数值问题。


根据经验,RBF内核为大多数分类问题提供了一个不错的选择,因此应在几乎所有情况下使用。但是,线性和多项式内核可能更适合某些应用程序,可以进行比较测试。请注意,仅针对RBF内核提供了新颖性检测模式 和运算符reduce_class_svm

模式指定一般分类任务,该任务要么是如何将多类决策问题分解为二进制子案例,要么是是否使用一种称为“新颖性检测”的特殊分类器模式 。 Mode = 'one-versus-all'创建一个分类器,将每个类别与其余训练数据进行比较。在测试过程中,将选择输出最大的类(请参见无符号的分类公式)。Mode ='one-versus-one' 在每个单个类之间创建一个二进制分类器。在测试期间,将进行投票,并选择投票最多的班级。最佳模式对于多类分类取决于类的数量。给定n个类, “ one-versus-all”创建n个分类器,而 “ one-versus-one”创建n(n-1)/ 2。请注意,对于二元决策任务,“一对一”将只创建一个,而“一对全”则不必要地创建两个对称分类器。对于少数几个班级(大约最多10个), “一对一”的训练和测试速度更快,因为子分类器全部由更少的训练数据组成,并且总体上减少了支持向量。在许多类情况下, “一对一”是更可取的,因为 “一对一”生成大量子分类器,因为子分类器的数量随类的数量呈二次方增长。

分类的一种特殊情况是Mode = 'novelty-detection',其中仅根据训练数据的隶属度对测试数据进行分类,即NumClasses必须设置为1。分离的超平面位于训练数据周围,因此隐含地从拒绝类中划分训练数据。优点是拒绝类未明确定义,这在某些应用(如纹理分类)中很难做到。所得的支持向量都位于边界。使用参数Nu,指定训练数据集中的异常值比率。请注意,在对“新颖性检测”进行分类时 在这种方式下,训练数据的类返回索引1,拒绝类返回索引0。因此,第一类用作拒绝类。相反,在使用MLP分类器时,默认情况下,最后一个类用作拒绝类。

参数PreprocessingNumComponents可用于指定特征向量的预处理。对于 Preprocessing = 'none',特征向量不更改地传递给SVM。 在这种情况下,将忽略NumComponents

对于“预处理”的所有其他值,训练数据集用于在训练期间以及分类的后期计算特征向量的变换。

对于Preprocessing = 'normalization',将特征向量标准化。在多项式内核的情况下,训练数据集的最小值和最大值分别转换为-1和+1。对于RBF内核,通过减去训练向量的均值并将结果除以训练向量的各个分量的标准偏差来对数据进行归一化。因此,变换后的特征向量的平均值为0,标准差为1。归一化不会改变特征向量的长度。 NumComponents在这种情况下将被忽略。如果特征向量的均值和标准差分别与0和1分别大不相同,或者对于特征向量的分量以不同单位进行测量的数据(例如,如果某些数据为灰色),则可以使用此变换值特征和一些是区域特征,或者如果区域特征混合在一起,例如“圆形度”(单位:标量)和“面积”(单位:像素平方)。通常应执行归一化变换,因为它会增加训练/测试过程中的数值稳定性。

对于Preprocessing = 'principal_components',执行主成分分析(PCA)。首先,对特征向量进行归一化(请参见上文)。然后,计算使训练矢量解相关的正交变换(特征空间中的旋转)。变换后,训练向量的均值为0,训练向量的协方差矩阵为对角矩阵。选择变换,使得包含最大变化的变换特征包含在变换特征向量的第一分量中。由此,可以在特征向量的最后分量中省略通常主要受噪声影响的变换特征,而不会丢失大量信息。参数NumComponents可用于确定应使用多少个变换后的特征向量分量。最多可以选择NumFeatures个组件。运算符get_prep_info_class_svm可用于确定每个转换后的组件包含多少信息。因此,它有助于选择NumComponents像数据归一化一样,如果特征向量的均值和标准差分别与0和1分别大不相同,或者对于特征向量以不同单位进行测量的特征向量,则可以使用此变换。此外,如果可以预期特征高度相关,则此转换很有用。请注意,RBF内核在抵抗PCA执行的降维方面非常强大,因此应成为加快分类时间的首选。

Preprocessing = 'canonical_variates'指定的转换首先对训练向量进行归一化,然后平均对所有类别进行训练向量解相关。同时,该变换最大程度地分离了各个类别的平均值。对于 Preprocessing = 'principal_components',按信息内容对转换后的组件进行排序,因此可以省略具有较少信息内容的转换后的组件。对于规范变量,最多可以选择min(NumClasses -1, NumFeatures)个分量。同样在这种情况下,可以使用get_prep_info_class_svm像主成分分析一样,规范变量可用于减少数据量而又不会丢失大量信息,同时还可在数据减少后优化类的可分离性。规范变量的计算也称为线性判别分析。

对于最后两种类型的转换(“ principal_components”“ canonical_variates”),SVM的输入数据的长度由NumComponents确定 ,而NumFeatures决定输入数据的维数(即未转换特征向量的长度) 。因此,通过使用这两种变换之一,就可以减小SVM相对于数据长度的大小,从而缩短了SVM的训练/分类时间。

使用create_class_svm创建SVM之后,通常可以通过重复调用add_sample_class_svm或 read_samples_class_svm将训练样本添加到SVM 此后,通常使用train_class_svm来训练SVM 此后,可以使用write_class_svm保存SVM 或者,可以在训练后使用classify_class_svm对SVM进行 分类

SVM和多层感知器(MLP)的比较(请参见 create_class_mlp)通常显示,SVM通常在训练时速度更快,尤其是对于大型训练集,其识别率比MLP略高。MLP分类速度更快,因此在时间紧迫的应用中应首选。请注意,本指南假定参数的最佳调整。

并行化

  • 多线程类型:可重入(与非排他运算符并行运行)。

  • 多线程作用域:全局(可以从任何线程调用)。

  • 未经并行处理。

该运算符返回一个句柄。请注意,此句柄类型的实例的状态可以由特定的运算符更改,即使这些运算符将句柄用作输入参数也是如此。

参量

NumFeatures(input_control)  整数→ (整数)

SVM的输入变量(功能)数。

默认值: 10

建议值: 1、2、3、4、5、8、10、15、20、30、40、50、60、70、80、90、100

限制:NumFeatures> = 1

内核类型(input_control)  字符串→ (字符串)

内核类型。

默认值: “ rbf”

值列表:“线性”“多项式均匀”“多项式不均匀”“ rbf”

内核参数(input_control)  真实→ (真实)

内核函数的附加参数。如果是RBF内核,则的值 对于多项式核,度

默认值: 0.02

建议值: 0.01、0.02、0.05、0.1、0.5

Nu(input_control)  真实→ (真实)

SVM的正则化常数。

默认值: 0.05

建议值: 0.0001、0.001、0.01、0.05、0.1、0.2、0.3

限制:Nu> 0.0 && Nu <1.0

NumClasses(input_control)  整数→ (整数)

类数。

默认值: 5

建议值: 2,3,4,5,6,7,8,9,10

限制:NumClasses> = 1

模式(input_control)  字符串→ (字符串)

SVM的模式。

默认值: “一对一”

值列表:“新颖性检测”“一个对所有”“一个对一个”

预处理(input_control)  字符串→ (字符串)

用于转换特征向量的预处理类型。

默认值: “规范化”

值列表:“ canonical_variates”“ none”“ normalization”“ principal_components”

NumComponents(input_control)  整数→ (整数)

预处理参数:变换后的特征数量(对于Preprocessing = 'none'Preprocessing = 'normalization'忽略)。

默认值: 10

建议值: 1、2、3、4、5、8、10、15、20、30、40、50、60、70、80、90、100

限制:NumComponents> = 1

SVMHandle(output_control)  class_svm → (整数)

SVM句柄。

示例(HDevelop)

create_class_svm(NumFeatures,'rbf',0.01、0.01,NumClasses,\
                  “全部对抗”,“规范化”,NumFeatures,\
                  SVMHandle)*生成并添加训练数据对于J:= 0到NumData-1乘1
    *生成培训功能和课程
    *数据= [...]
    *类别= ...
    add_sample_class_svm(SVMHandle,数据,类)Endfor*训练SVMtrain_class_svm(SVMHandle,0.001,'默认')*使用SVM对未知数据进行分类对于J:= 0到N-1乘1
    *提取功能
    *功能= [...]
    classify_class_svm(SVMHandle,功能,1,类)Endforclear_class_svm(SVMHandle)

结果

如果参数有效,则运算符create_class_svm 返回值2(H_MSG_TRUE)。如有必要,将引发异常。

可能的继任者

add_sample_class_svm

备择方案

create_class_mlp, create_class_gmm, create_class_box

也可以看看

clear_class_svm, train_class_svm, classify_class_svm

参考文献

BernhardSchölkopf,Alexander J.Smola:“与内核一起学习”;麻省理工学院出版社,伦敦;1999年
约翰·肖-泰勒,内洛·克里斯蒂安尼:“内核方法模式分析”; 剑桥大学出版社,剑桥;2004。


本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2024年4月    »
1234567
891011121314
15161718192021
22232425262728
2930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864