将Python绑定用于SVM库LIBSVM的示例
libsvm
machine-learning
python
svm
5
0

我非常需要在Python中使用LibSVM的分类任务示例。我不知道输入应该是什么样子,哪个函数负责训练,哪个函数负责测试,谢谢

参考资料:
Stack Overflow
收藏
评论
共 5 个回答
高赞 时间 活跃

该示例演示了一类SVM分类器 ;它尽可能简单,同时仍显示完整的LIBSVM工作流程。

第1步 :导入NumPy和LIBSVM

  import numpy as NP
    from svm import *

第2步:生成综合数据:在此示例中,给定边界内有500个点(注意:LIBSVM 网站上提供了很多真实数据集)

Data = NP.random.randint(-5, 5, 1000).reshape(500, 2)

步骤3:现在,为一类分类器选择一些非线性决策边界:

rx = [ (x**2 + y**2) < 9 and 1 or 0 for (x, y) in Data ]

步骤4:接下来,根据此决策边界任意分割数据w / r / t:

  • I类 :位于任意 或任意

  • II类 :决策边界的所有点(圆形)


SVM模型构建从这里开始;在此之前的所有步骤仅是为了准备一些综合数据。

步骤5 :通过调用svm_problem ,传入决策边界函数数据 ,构造问题描述 ,然后将此结果绑定到变量。

px = svm_problem(rx, Data)

步骤6:为非线性映射选择一个核函数

对于此示例,我选择了RBF (径向基函数)作为我的内核函数

pm = svm_parameter(kernel_type=RBF)

步骤7:通过调用svm_model训练分类 ,传入问题描述 (px)和内核 (pm)

v = svm_model(px, pm)

步骤8:最后,通过调用训练后的模型对象('v')上的预测来测试训练后的分类器

v.predict([3, 1])
# returns the class label (either '1' or '0')

对于上面的示例,我使用了LIBSVM 3.0版(发布此答案时的当前稳定版本)。

最后,w / r / t问题的一部分与内核函数的选择有关,支持向量机并不特定于特定的内核函数-例如,我可以选择其他内核(高斯,多项式等)。

LIBSVM包含所有最常用的内核函数-这是一个很大的帮助,因为您可以看到所有可能的替代方案并选择一个在模型中使用的替代方案,只需调用svm_parameter并为kernel_type (所选内核的三个字母的缩写)。

最后,您选择用于训练的内核函数必须与用于测试数据的内核函数匹配。

收藏
评论

您可以考虑使用

http://scikit-learn.sourceforge.net/

它具有libsvm的强大python绑定,应该易于安装

收藏
评论

添加到@shinNoNoir:

param.kernel_type表示要使用的内核函数的类型,0:线性1:多项式2:RBF 3:Sigmoid

还请记住,svm_problem(y,x):这里y是类标签,x是类实例,x和y只能是列表,元组和字典。(无numpy数组)

收藏
评论

LIBSVM从包含两个列表的元组中读取数据。第一个列表包含类,第二个列表包含输入数据。使用两个可能的类创建简单的数据集,您还需要通过创建svm_parameter来指定要使用的内核。


>> from libsvm import *
>> prob = svm_problem([1,-1],[[1,0,1],[-1,0,-1]])
>> param = svm_parameter(kernel_type = LINEAR, C = 10)
  ## training  the model
>> m = svm_model(prob, param)
#testing the model
>> m.predict([1, 1, 1])


收藏
评论

此处列出的代码示例不适用于LibSVM 3.1,因此我或多或少通过mossplix移植了该示例

from svmutil import *
svm_model.predict = lambda self, x: svm_predict([0], [x], self)[0][0]

prob = svm_problem([1,-1], [[1,0,1], [-1,0,-1]])

param = svm_parameter()
param.kernel_type = LINEAR
param.C = 10

m=svm_train(prob, param)

m.predict([1,1,1])
收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号