很少有机器学习问题

机器算法验证 机器学习 支持向量机
2022-04-04 13:41:15

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

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

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

  2. 对,我的训练示例有 3 个类。因此,每个训练示例都适合这 3 个类之一。我想要“未知”类的功能。任何不符合这 3 个类别的内容都必须标记为“未知”。但我不能将“未知”视为一个新类并为此提供示例。

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

我是否需要选择新算法或支持向量机可以做到这一点?

PS:我正在为 SVM 使用 libsvm 实现。

2个回答

对于(1),正如 ebony1 所建议的,您可以尝试几种增量或在线 SVM 算法,我唯一要提到的是超参数(正则化和内核参数)也可能需要调整,因为好吧,有更少的算法技巧可以帮助解决这个问题。正则化参数几乎肯定会从调整中受益,因为随着训练数据量的增加,通常需要的正则化越少。

对于(2),您可以尝试将一类 SVM 拟合到训练数据中,这至少会告诉您数据是否与您知道的类一致,然后将其分类为“未知”级 SVM 足够低。IIRC libsvm 具有一类 SVM 的实现。

对于(3)如果你只是使用 1-v-1 类组件 SVM,那么你只需要制作三个新的 SVM,每个未知-v-已知类组合一个,不需要重新训练其他的。

高温高压

我不确定是否存在满足您所有需求的实现。

对于 (1),您可以使用任何 SVM 的在线实现,例如 Pegasos 或 LASVM。如果你想要更简单的东西,你可以使用 Perceptron 或 Kernel Perceptron。基本上,在所有这些算法中,给定一个已经学习的权重向量(例如 w0),您可以在给定一组新示例的情况下逐步更新 w0。

对于 (2) 和 (3),我不确定上述方法是否会直接允许,但您可能可以从处理未知类的文献中借用一些想法。我建议看看这个