我正在使用libsvm,并且注意到每次调用svmtrain()时,我都会创建一个新模型,并且似乎没有选择将数据放入现有模型中。但是可以这样做吗?我只是在libsvm中看不到这方面吗?
我正在使用libsvm,并且注意到每次调用svmtrain()时,我都会创建一个新模型,并且似乎没有选择将数据放入现有模型中。但是可以这样做吗?我只是在libsvm中看不到这方面吗?
Answers:
听起来您正在寻找“增量”或“在线”学习算法。这些算法使您可以使用新示例更新分类器,而无需从头开始重新训练整个过程。
支持向量机绝对有可能,尽管我相信libSVM目前尚不支持它。值得一看的是其他提供此功能的软件包,其中包括
PS:@Bogdanovist:关于这一点,有很多文献。kNN显然是微不足道的。通过存储计数而不是概率,人们可以将(某些)贝叶斯分类器变成增量分类器。STAGGER,AQ *和ID *系列的决策树算法中的某些(但不是全部)也都是增量式的,超出了我的脑海。
大多数在线/增量式SVM实用程序都适用于线性内核,我想它的难度不如非线性内核那么难。
当前可用的一些著名的在线/增量SVM工具:
+ Leon Bottous的LaSVM:它支持线性和非线性内核。C ++代码
+ Bordes的LaRank:它支持线性和非线性内核。C ++代码。似乎链接现在已断开:-(
+ + Gert Cauwenberghs的代码递增和递减:支持线性和非线性内核Matlab代码。
+ Chris Diehl的Incremental SVM学习:支持线性和非线性内核Matlab代码。
+ Alistair Shilton的SVMHeavy:仅二进制分类和回归C ++代码
+ Francesco Parrella的OnlineSVR:仅回归。Matlab和C ++。
+ Pegasos:线性和非线性。C和Matlab代码。java接口。
+ Langford的Vowpal Wabbit:不确定:-(
+ Koby Crammer的MCSVM:线性和非线性C代码
在我的Quora答案中可以找到更多更新的列表。
另一种可能性是alpha播种。我不知道libSVM是否支持它。这个想法是将大量的训练数据分成多个块。然后,在第一个块上训练SVM。由于产生的支持向量不过是数据的一些样本,因此您将这些样本作为样本,然后使用它们来训练下一个块的SVM。同样,您使用该SVM为下一次迭代(种子)计算alpha值的初始估计。因此,好处是双重的:每个问题都较小,并且通过智能初始化,它们收敛得更快。这样,您可以将一个巨大的问题简化为依次解决一系列更简单的步骤。