当前位置:  开发笔记 > 人工智能 > 正文

支持向量机(SVM)的一些实现细节

如何解决《支持向量机(SVM)的一些实现细节》经验,为你挑选了2个好方法。

在特定的应用程序中,我需要机器学习(我知道我在本科课程中学到的东西).我使用支持向量机并解决了问题.它的工作正常.

现在我需要改进系统.这里的问题是

    我每周都会获得额外的培训示例.现在,系统开始使用更新的示例(旧示例+新示例)进行新的培训.我想让它增量学习.使用以前的知识(而不是前面的例子)和新的例子来获得新的模型(知识)

    我的训练样例有3个班级.因此,每个训练样例都适合这三个类中的一个.我想要"未知"类的功能.任何不适合这3个类的东西都必须标记为"未知".但我不能将"未知"视为一个新类,并为此提供示例.

    假设,实现了"未知"类.当类是"未知"时,应用程序的用户输入他认为该类可能的内容.现在,我需要将用户输入合并到学习中.我也不知道怎么做.如果用户输入一个新类(即一个尚未在训练集中的类),它会有什么不同吗?

我是否需要选择新算法或支持向量机可以执行此操作?

PS:我正在使用libsvm实现SVM.



1> doug..:

我刚使用与您的问题相同的组织编写了我的答案(1.,2.,3).

    支持向量管理系统能做到这一点 - 即增量学习吗?多层感知器当然可以 - 因为后续的训练实例不会影响基本的网络架构,它们只会调整权重矩阵的值.但SVM?在我看来(理论上)一个额外的训练实例可以改变支持向量的选择.但是,我不知道.

    我认为你可以通过一对多配置LIBSVM来轻松解决这个问题 - 即,作为一类分类器.SVM 一类分类器; 将SVM应用于多类意味着它已被编码为执行多个逐步的一对多分类,但同样,该算法一次被训练(和测试)一个类.如果你这样做,那么在对测试集逐步执行之后剩下的是"未知" - 换句话说,在执行多个顺序一类分类之后没有对任何数据进行分类,根据定义是'未知'上课.

    为什么不让用户猜测一个特征(即,只是另一个因变量)?唯一的另一个选择是使它成为类标签本身,你不希望这样.例如,您可以在数据矩阵"用户类猜测"中添加一个列,然后只使用某些值填充它,这些值最有可能对那些不在"未知"类别中的数据点产生影响,因此对用户而言不会提供猜测 - 这个值可能是'0'或'1',但实际上这取决于你如何缩放和规范化数据).



2> Cerin..:

您的第一个项目可能是最困难的,因为基本上没有好的增量SVM实现存在.

几个月前,我还研究了在线增量 SVM算法.不幸的是,当前的实现状态非常稀少.我发现的只是一个Matlab示例,OnlineSVR(一个仅实现回归支持的论文项目)和SVMHeavy(仅二进制类支持).

我个人没有使用过任何一个.他们似乎都处于"研究玩具"阶段.我甚至无法编译SVMHeavy.

目前,您可以通过定期批量培训来结合更新.我也使用LibSVM,而且速度非常快,所以在实现适当的增量版本之前,它应该是一个很好的替代品.

我也不认为SVM可以默认模拟"未知"样本的概念.它们通常作为一系列布尔分类器工作,因此样本最终会被归类为某种东西,即使该样本与之前看到的任何内容完全不同.可能的解决方法是对要素范围进行建模,并随机生成这些范围之外的样本,然后将这些样本添加到训练集中.

例如,如果您有一个名为"color"的属性,其最小值为4,最大值为123,那么您可以将这些属性添加到训练集中

[({'color':3},'unknown'),({'color':125},'unknown')]

让您的SVM了解"未知"颜色的含义.

推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有