libsvm 多分类情况

SVM是一个二分类器,当遇到多类别的时候,一般采取如下两种策略。

 a.一对多法(one-versus-rest,简称1-v-r SVMs)。训练时依次把某个类别的样本归为一类,其他剩余的样本归为另一类,这样k个类别的样本就构造出了k个SVM。分类时将未知样本分类为具有最大分类函数值的那类。 

b.一对一法(one-versus-one,简称1-v-1 SVMs)。其做法是在任意两类样本之间设计一个SVM,因此k个类别的样本就需要设计k(k-1)/2个SVM。当对一个未知样本进行分类时,最后得 票最多的类别即为该未知样本的类别。Libsvm中的多类分类就是根据这个方法实现的


假设有四类A,B,C,D 四类。在训练的时候我选择A,B; A,C; A,D; B,C; B,D;C,D所对应的向量作为训练集,然后得到六个训练结果,在测试的时候,把对应的向量分别对六个结果进行测试,然后采取投票形式,最后得到一组结 果。

投票是这样的.
A=B=C=D=0;
(A, B)-classifier 如果是A win,则A=A+1;otherwise,B=B+1;
(A,C)-classifer 如果是A win,则A=A+1;otherwise, C=C+1;
...
(C,D)-classifer 如果是C win,则C=C+1;otherwise,D=D+1;
The decision is the Max(A,B,C,D)


另外,在libsvm中,进行的交叉验证默认是5折交叉验证。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
LibSVM是一个常用的支持向量机库,支持多种SVM模型,包括二分类、多分类、回归和one class SVM等。其中,one class SVM是一种无监督的分类模型,用于识别异常样本。下面介绍如何使用LibSVM实现one class SVM分类。 1. 准备数据 首先,需要准备训练数据。由于one class SVM是一种无监督的模型,所以只需要准备正常样本数据即可。假设我们有一个包含n个特征的数据集,其中正常样本有m个,可以将这些数据保存在一个n*m的矩阵X中。 2. 训练模型 使用LibSVM训练one class SVM模型的函数为svmtrain。其中,需要指定SVM类型为one class SVM,参数为"-s 2"。同时,需要指定核函数类型,例如使用RBF核函数,参数为"-t 2"。其他参数可以根据具体情况进行调整。 下面是一个示例代码: ``` import svmutil # 准备数据 X = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] y = [1, 1, 1] # 所有样本都是正常样本 # 训练模型 model = svmutil.svm_train(y, X, '-s 2 -t 2') ``` 3. 预测新样本 使用LibSVM预测新样本的函数为svmpredict。由于是无监督学习,所以预测的结果只有1和-1两种可能,其中1表示正常样本,-1表示异常样本。 下面是一个示例代码: ``` # 准备测试数据 X_test = [[10, 11, 12], [13, 14, 15]] y_test = [1, -1] # 第一个样本是正常样本,第二个样本是异常样本 # 预测结果 p_label, p_acc, p_val = svmutil.svm_predict(y_test, X_test, model) print(p_label) # 输出预测结果 ``` 以上就是使用LibSVM实现one class SVM分类的方法。需要注意的是,由于one class SVM是一种无监督学习模型,所以需要谨慎地选择正常样本,以免将异常样本误判为正常样本。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值