python libsvm的分类运用

版权所有,翻版必究。

运行环境:WIN10,pycharm

首先了解一下什么是LIBSVM:https://www.csie.ntu.edu.tw/~cjlin/libsvm/,麻烦看看这个大佬的说明。网上也有很多的理论,可对应参考看一下。

1、下载这个libsvm:

我下载时的版本号。

解压之后:主要用红色框中的内容。

在pycharm中打开这个文件,如果出现了某些库文件错误,或者其他一些错误。请自行解决。(都是简单的问题)

2、简单介绍一下这些参数设置。

 options: 训练的一些参数设置,主要有以下的一些设置

-s    SVM的类型(svm_type)

       0 -- C-SVC(默认)          使用惩罚因子(Cost)的处理噪声的多分类器

       1 -- nu-SVC(多分类器)           按照错误样本比例处理噪声的多分类器

       2 -- one-class SVM           一类支持向量机,可参见"SVDD"的相关内容

       3 -- epsilon-SVR(回归)     epsilon支持向量回归 (也就是使用 E-不敏感损失函数进行回归)

       4 -- nu-SVR(回归)

-t   核函数类型(kernel_type)

        0 -- linear(线性核):             u'*v

        1 -- polynomial(多项式核):                   (gamma*u'*v + coef0)^degree

        2 -- radial basis function(RBF,径向基核/高斯核):                 exp(-gamma*|u-v|^2)

        3 -- sigmoid(S型核):                         tanh(gamma*u'*v + coef0)

        4 -- precomputed kernel(预计算核):               核矩阵存储在training_set_file

下面是调整SVM或核函数中参数的选项:

-d           调整核函数的degree参数,默认为3

-g           调整核函数的gamma参数,默认为1/num_features

-r           调整核函数的coef0参数,默认为0

-c           调整C-SVC, epsilon-SVR 和 nu-SVR中的Cost参数,默认为1(就是优化问题中的那个C)

-n           调整nu-SVC, one-class SVM 和 nu-SVR中的错误率nu参数,默认为0.5

-p           调整epsilon-SVR的loss function中的epsilon参数,默认0.1

-m           调整内缓冲区大小,以MB为单位,默认100

-e           调整终止判据,默认0.001

-wi   调整C-SVC中第i个特征的Cost参数

调整算法功能的选项:

-b           是否估算正确概率,取值0 - 1,默认为0

-h           是否使用收缩启发式算法(shrinking heuristics),取值0 - 1,默认为0

-v           交叉校验

-q           静默模式

3、libsvm需要的数据类型:

如这种输入的数据:

from libsvm.python.svmutil import *
    
y, x = [1,-1], [{1:1, 2:1}, {1:-1,2:-1}]       # 输入的数据
options = '-t 0 -c 4 -b 1'                     # 训练参数设置
model = svm_train(y,x,options)                 # 进行训练
 
yt = [1]
xt = [{1:1, 2:1}]
p_label, p_acc, p_val = svm_predict(yt, xt, model)     # 使用得到的模型进行预测
print(p_label)

 

或者很多txt文件:我自己就是写的txt文件进行数据的处理的。这是我的数据类型示意图。前面的1代表label。后面的数据类似于字典中的键值对n:n这种。

我都代码也很简单,主要是自己使用。各位看官根据自己的实际情况进行修改。喷子出门左拐不送。

def get_feature(path, count):
    with open('dataFeature.txt', 'a') as f:
        #color_feature中存放的是特征数据。根据自己的实际情况创建,这里用简单的数据替代。
        color_feature = [1,2,3,4,5,6]   
        #将特征保存起来。保证写入数据中的格式为label C+1:feature[c]....
        f.write(str(label)+" ")
        for c in range(len(feature)):
            f.write(str(c+1)+":"+str(feature[c])+" ")
        f.write("\n")

4、开始训练预测:

#libsvm中的引用,我将路径中的libsvm-3.24改为了libsvm324
from libsvm324.python.svmutil import *
from libsvm324.python.svm import *

#调用之前准备的训练数据集
y, x = svm_read_problem('dataFeature1.txt')
#选取前125个数据进行训练
prob = svm_problem(y[:125], x[:125])
#有关参数的设置;对应的参数实际含义请看第一步
param = svm_parameter('-s 0 -t 2 -c 4 -b 1')
#开始训练
model = svm_train(prob, param)
#模型的保存
svm_save_model('model1', model)
print('----------------')
#剩余数据的验证。
lable, acc, val = svm_predict(y[125:], x[125:], model)
print(lable, acc, val)
这是对应的结果内容。
The return tuple contains
p_labels: a list of predicted labels
p_acc: a tuple including  accuracy (for classification), mean-squared
       error, and squared correlation coefficient (for regression).
p_vals: a list of decision values or probability estimates (if '-b 1'
        is specified). If k is the number of classes, for decision values,
        each element includes results of predicting k(k-1)/2 binary-class
        SVMs. For probabilities, each element contains k values indicating
        the probability that the testing instance is in each class.
        Note that the order of classes here is the same as 'model.label'
        field in the model structure.

下面是我的一个简单结果。

对应的模型是什么样子的呢?

END!主要用于博主自己记录所用,如果各位道友有需要欢迎参考,各位喷子请(ノ`Д)ノ)

 

 

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值