使用Python调用svm训练器

此文献给帆帆,笔芯~

一、导入相应的库

from sklearn import svm
import numpy as np
from sklearn.model_selection import train_test_split

1.sklearn封装了大量的机器学习算法,甚至包含一些数据集。这里 引入svm相关函数。
官方学习文档
2.NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库,有助于利用python进行机器学习。
3.sklearn.model_selection,用于划分数据集,见第四部分。

二、读取数据

path='c:/DATA/DATA1000.txt'
data=np.loadtxt(path,dtype=float,delimiter=',')

使用numpy中的loadtxt函数来读取数据。
loadtxt函数在这里插入图片描述
参数说明:
1.fname:读取数据路径
2.dtype:数据类型,常用str,float
3.delimiter:分隔符,例如 逗号
4.converters:将数据列与转换函数进行映射的字典。eg:{1:fun},含义是将第2列对应转换函数进行转换。如果前期数据集都在预处理阶段处理成合适的样子,就可以不用这个参数。

三、划分数据与标签

数据示例
在我使用的数据集里,经过预处理之后如上图所示。前四列是数据,第五列是标签,标签由0或1表示,且全部由逗号相隔。
这一步的作用是告诉分类器 前四列是训练根据,即特征值,第五列是训练结果,即标签。

#x是数据,y为标签
x,y=np.split(data,indices_or_sections=(4,),axis=1)

split()参数说明
1.data:要划分的数据,这个在前面有说明,就是通过loadtxt读取进来的数据
2.indices_or_sections:如果是一个整数n,就平均分成n份;如果是带括号的,例如(4,):分为两部分,前四列和之后的其他部分。
3.axis:沿着哪一个维度进行切分:=0,横向切分;=1纵向切分。

四、划分训练集和测试集

我们需要将整个数据集划分为训练集和测试集两部分。
训练集训练分类器svm,并用测试集来测试准确率。

train_data,test_data,train_label,test_label=sklearn.model_selection.train_test_split(x,y,random_state=1,train_size=0.6,test_size=0.4)

参数说明:
1.x:特征值
2.y:标签
3.random_state:是随机数的种子。
随机数种子:其实就是该组随机数的编号,在需要重复试验的时候,保证得到一组一样的随机数。比如你每次都填1,其他参数一样的情况下你得到的随机数组是一样的。但填0或不填,每次都会不一样。随机数的产生取决于种子,随机数和种子之间的关系遵从以下两个规则:种子不同,产生不同的随机数;种子相同,即使实例不同也产生相同的随机数。
4.train_size:训练集所占的比例
5.test_size:测试集所占的比例

五、训练SVM

classifier=svm.SVC(C=1,kernel='rbf',gamma=1,decision_function_shape='ovr')#设置训练器
classifier.fit(train_data,train_label.ravel())#对训练集部分进行训练

参数说明:
svm.SVC参数详细说明
简单说一下我的理解:kernel='liner’时为线性分类,此时不再需要其他参数。
线性可分
但是 当数据线性不可分时(如下图),就需要将数据映射到高维中,进行求解。
线性不可分
映射成高维

高维时kernel=‘rbf’,在这种情况下,有两个比较重要的参数:C,gamma。这两个参数的取值需要自己想办法确定,比如可以使用大多数人的选择。当然也有一些特殊的算法来找到最优的参数。
1.网格搜索法:简单理解就是在一定的范围内遍历。
优点:简单,可以找到全局最优。缺点:效率低,非常不适用于大数据集。
2.遗传算法、粒子群算法、蚁群算法,我还在学习中~

六、计算准确率

print("训练集:",classifier.score(train_data,train_label))
print("测试集:",classifier.score(test_data,test_label))

这一步直接调用函数即可。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值