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

Machine learning 支持向量机(SVM)的一些实现细节,machine-learning,libsvm,svm,Machine Learning,Libsvm,Svm,在一个特殊的应用中,我需要机器学习(我知道我在本科学习的东西)。我使用支持向量机解决了这个问题。工作正常 现在我需要改进系统。这里的问题是 我每周都会收到额外的培训示例。现在,系统开始使用更新的示例(旧示例+新示例)进行新的培训。我想让它成为增量学习。将以前的知识(而不是以前的示例)与新示例一起使用,以获得新模型(知识) 对,我的培训示例有3节课。因此,每个培训示例都适合这3个类中的一个。我想要“未知”类的功能。任何不符合这三个类别的内容都必须标记为“未知”。但我不能把“Unknown”当作一个

在一个特殊的应用中,我需要机器学习(我知道我在本科学习的东西)。我使用支持向量机解决了这个问题。工作正常

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

  • 我每周都会收到额外的培训示例。现在,系统开始使用更新的示例(旧示例+新示例)进行新的培训。我想让它成为增量学习。将以前的知识(而不是以前的示例)与新示例一起使用,以获得新模型(知识)

  • 对,我的培训示例有3节课。因此,每个培训示例都适合这3个类中的一个。我想要“未知”类的功能。任何不符合这三个类别的内容都必须标记为“未知”。但我不能把“Unknown”当作一个新的类来对待,也不能为此提供示例

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

  • 我需要选择一个新的算法还是支持向量机可以做到这一点

    PS:我正在使用libsvm实现SVM

  • 有一些算法可以递增地训练支持向量机,但我不认为libSVM实现了这一点。我想你应该考虑一下你是否真的需要这个特性。我认为你目前的方法没有问题,除非培训过程真的太慢了。如果是,您能否分批重新培训(即每100个新示例后)
  • 您可以让libSVM生成类成员的概率。我认为这可以用于多类分类,但我不完全确定。您需要确定某个分类不够确定的阈值,然后输出“未知”。我想,设置一个阈值来区分最有可能的类和第二有可能的类可以实现这一点
  • 我认为libSVM可以扩展到任何数量的新类。但是,添加新类很可能会影响模型的准确性

  • 我只是用和你的问题(1,2,3)相同的组织结构写了我的答案

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

  • 我认为,通过将LIBSVM配置为一对多,可以很容易地解决这个问题,即,作为一个一类分类器。支持向量机是一类分类器;将支持向量机应用于多类别意味着它已被编码为针对多个分类执行多个逐步分类,但该算法每次只训练(和测试)一个类别。如果您这样做了,那么在对测试集执行分步执行之后剩下的是“未知的”——换句话说,在执行多个连续的一个类分类之后没有分类的任何数据,根据定义都在该“未知”类中

  • 为什么不让用户的猜测成为一个特性(即,只是另一个因变量)?唯一的另一个选择是使其成为类标签本身,而您不希望这样。例如,您可以在数据矩阵“user class guess”中添加一列,并在其中填充一些值,这些值很可能对不属于“unknown”类别的数据点没有影响,因此用户不会对这些数据点进行猜测——该值可以是“0”或“1”,但实际上,这取决于您如何对数据进行缩放和规范化)


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

    几个月前,我还研究了在线或增量SVM算法。不幸的是,目前的实现状态非常稀疏。我只找到了一个(仅实现回归支持的论文项目)和(仅支持二进制类)

    我没有亲自使用过。它们似乎都处于“研究玩具”阶段。我甚至无法让SVMHeavy编译

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

    我也不认为SVM在默认情况下可以建模“未知”样本的概念。它们通常作为一系列布尔分类器工作,因此一个样本最终被积极地归类为某个对象,即使该样本与之前看到的任何对象有很大的不同。一种可能的解决方法是对特征的范围进行建模,并随机生成这些范围之外的样本,然后将这些样本添加到训练集中

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

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

    让你的SVM了解“未知”颜色的含义。

    即使这个问题可能已经过时,我还是觉得有必要给出一些额外的想法

  • 由于您的第一个问题已经得到了其他人的回答(没有实现增量学习的生产就绪SVM,即使这是可能的),我将跳过它。;)

  • 将“Unknown”添加为类不是一个好主意。根据它的用途,原因是不同的

    • 如果您使用“Unknown”类作为“this instance have not classified,bu”的标记