周围有允许在线学习的python支持向量机库吗?

周围有允许在线学习的python支持向量机库吗?,python,artificial-intelligence,machine-learning,svm,Python,Artificial Intelligence,Machine Learning,Svm,我确实知道有一些库允许使用python代码中的支持向量机,但我特别寻找那些允许在线教授支持向量机的库(即,不必一次性提供所有数据) 有吗?包括一个通过SWIG工作的python包装器 示例svm-test.py来自其分布: #!/usr/bin/env python from svm import * # a three-class problem labels = [0, 1, 1, 2] samples = [[0, 0], [0, 1], [1, 0], [1, 1]] problem

我确实知道有一些库允许使用python代码中的支持向量机,但我特别寻找那些允许在线教授支持向量机的库(即,不必一次性提供所有数据)

有吗?

包括一个通过SWIG工作的python包装器

示例svm-test.py来自其分布:

#!/usr/bin/env python

from svm import *

# a three-class problem
labels = [0, 1, 1, 2]
samples = [[0, 0], [0, 1], [1, 0], [1, 1]]
problem = svm_problem(labels, samples);
size = len(samples)

kernels = [LINEAR, POLY, RBF]
kname = ['linear','polynomial','rbf']

param = svm_parameter(C = 10,nr_weight = 2,weight_label = [1,0],weight = [10,1])
for k in kernels:
    param.kernel_type = k;
    model = svm_model(problem,param)
    errors = 0
    for i in range(size):
        prediction = model.predict(samples[i])
        probability = model.predict_probability
        if (labels[i] != prediction):
            errors = errors + 1
    print "##########################################"
    print " kernel %s: error rate = %d / %d" % (kname[param.kernel_type], errors, size)
    print "##########################################"

param = svm_parameter(kernel_type = RBF, C=10)
model = svm_model(problem, param)
print "##########################################"
print " Decision values of predicting %s" % (samples[0])
print "##########################################"

print "Numer of Classes:", model.get_nr_class()
d = model.predict_values(samples[0])
for i in model.get_labels():
    for j in model.get_labels():
        if j>i:
            print "{%d, %d} = %9.5f" % (i, j, d[i,j])

param = svm_parameter(kernel_type = RBF, C=10, probability = 1)
model = svm_model(problem, param)
pred_label, pred_probability = model.predict_probability(samples[1])
print "##########################################"
print " Probability estimate of predicting %s" % (samples[1])
print "##########################################"
print "predicted class: %d" % (pred_label)
for i in model.get_labels():
    print "prob(label=%d) = %f" % (i, pred_probability[i])

print "##########################################"
print " Precomputed kernels"
print "##########################################"
samples = [[1, 0, 0, 0, 0], [2, 0, 1, 0, 1], [3, 0, 0, 1, 1], [4, 0, 1, 1, 2]]
problem = svm_problem(labels, samples);
param = svm_parameter(kernel_type=PRECOMPUTED,C = 10,nr_weight = 2,weight_label = [1,0],weight = [10,1])
model = svm_model(problem, param)
pred_label = model.predict(samples[0])   

我没听说过。但是你真的需要在线学习吗?我使用支持向量机已经有一段时间了,从来没有遇到过使用在线学习的问题。通常,我会设定一个培训示例更改数量的阈值(可能是100或1000),然后批量重新培训所有示例

如果你的问题规模很大,你必须使用在线学习,那么你可能想看看

评论后,重新编辑如下:

建议使用ctypes包装器。因为我以前不知道LaSVM,而且它看起来很酷,所以我很好奇在我自己的问题上尝试它:)

如果您仅限于使用Python虚拟机(嵌入式设备、机器人),我建议使用投票/平均感知器,它的性能接近SVM,但易于实现,默认情况下是“在线”的


刚刚看到它有一些在线SVM代码。

为什么要在线训练它?添加训练实例通常需要重新解决与SVM相关的二次规划问题

处理这种情况的一种方法是在批处理模式下训练SVM,当有新数据可用时,检查这些数据点是否在超平面的[-1,+1]范围内。如果是这样,使用所有旧的支持向量和落在边缘的新训练数据重新训练SVM


当然,与对所有数据进行批量训练相比,结果可能略有不同,因为有些点可能会被丢弃,而这些点稍后将成为支持向量。那么,为什么要对SVM执行在线培训呢?

虽然没有python绑定,但在
以在线方式进行训练,并且可以使用numpy等工具轻松地重新实现。

是一种性能非常好的在线SVM算法。即使没有特定的Python绑定,它也相当容易实现。作者的网站上有一个可修改或可嵌入的应用程序。

我已经在上面问了你的第一个问题。我将其用于强化学习项目,因此需要在线学习。注意,如果天真地实施,批量模式可能比随机模式更糟糕。这种方法无法扩展。对每一条新记录的整个数据集进行再培训最多只能获得指数级的性能。在线学习会有恒定的或线性的性能,这取决于实施情况。由于LibSVM网站或文档没有明确提到它,我给林志仁发了电子邮件,询问增量/在线学习支持。他的回答是,“不幸的是没有。原因是我们还没有看到增量/减量学习的标准设置。”有人能够在Linux上构建大众吗?我安装了boost,但大众似乎采用了更旧的版本。LaSVM似乎是这里的赢家。它有一个小的代码库。明确支持在线学习。编译容易(在Ubuntu 9.10上测试)。它没有直接的Python API,但它创建了两个简单的命令行实用程序,可以从Python轻松调用它们来构建模型(la_svm)和使用模型(la_测试)。scikit learn()中还实现了随机梯度下降(SGD)。虽然基于SGD的分类器的在线装配尚未公开,但将在未来6个月内公开。