因为python的教程没有找到详细的所以就改用matlab了

使用的是matlab r2016a,libsvm3-24,具体的安装配置教程就直接参考谦恭大大的了:

https://blog.csdn.net/github_35807147/article/details/80725642

libsvm的使用需要按照它需要的格式排列数据,格式即:

标记值 属性序号:属性值 属性序号:属性值......

这次的数据格式使用libsvmwrite函数生成,它的使用格式如下:

libsvmwrite(‘libsvm_data.mat’,label,instance);

label为样本的标记值矩阵,n*1大小,

instance是一个稀疏矩阵,我们通过sparse()函数来生成。

数据准备的过程如下:

label=[1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0];
instance=[2,1,2,3,3,1,0.697,0.406;...
3,1,1,3,3,1,0.774,0.376;...
3,1,2,3,3,1,0.634,0.264;...
2,1,1,3,3,1,0.608,0.318;...
1,1,2,3,3,1,0.556,0.215;...
2,2,2,3,2,0,0.403,0.237;...
3,2,2,2,2,0,0.481,0.149;...
3,2,2,3,2,1,0.437,0.211;...
3,2,1,2,2,1,0.666,0.091;...
2,3,3,3,1,0,0.243,0.267;...
1,3,3,1,1,1,0.245,0.057;...
1,1,2,1,1,0,0.343,0.099;...
2,2,2,2,3,1,0.639,0.161;...
1,2,1,2,3,1,0.657,0.198;...
3,2,2,3,2,0,0.360,0.370;...
1,1,2,1,1,1,0.593,0.042;...
2,1,1,2,2,1,0.719,0.103];
instance=sparse(instance);
libsvmwrite('libsvm_data.mat',label,instance);

然后再将生成的libsvm_data.mat用libsvmread读入,

libsvmread的作用是把如下格式的文本文件\begin{align*} 1 & \ \ *:* \ \ *:* \\ -1 & \ \ *:* \ \ *:* \end{align*}读取进MATLAB,将第一列的$1,-1$串存成一个类标记向量,之后的特征存成矩阵。

粗暴理解就是一个预处理的作用。

[data_label,data_instance]=libsvmread('libsvm_data.mat');

找到的参考博客上是这么写的,但我一琢磨,好家伙,data_label和label有什么区别么?同理instance和data_instance有什么区别么?

于是我就换了换,原本应当是

model=svmtrain(data_label,data_instance)

我直接

model=svmtrain(label,instance)

输出结果都是

optimization finished, #iter = 7
nu = 0.764822
obj = -10.174209, rho = 0.319850
nSV = 14, nBSV = 12
Total nSV = 14

model =

Parameters: [5x1 double]
nr_class: 2
totalSV: 14
rho: 0.3199
Label: [2x1 double]
sv_indices: [14x1 double]
ProbA: []
ProbB: []
nSV: [2x1 double]
sv_coef: [14x1 double]
SVs: [14x8 double]

没有任何区别,大约是这次提供的数据集是完整并且严格按照格式写出来的,所以没法体现出区别。

建模函数svmtrain进行分类建模时的完整格式应当类似下面这个:

model = svmtrain(trainlabel, traindata, ‘-s 0 -t 2 -c 1.2 -g 2.8’);

具体每个参数的作用这个大大的博客里写得很详尽了:https://www.omegaxyz.com/2018/01/23/matlab_svm/

完成题目所需要修改的核函数类型是-t,0是线性核,2是RBF核即高斯核,那么就修改代码如下:

model=svmtrain(label,instance,'-t 0')

得到线性核的结果

optimization finished, #iter = 25
nu = 0.457287
obj = -6.675040, rho = 3.775986
nSV = 10, nBSV = 6
Total nSV = 10

model =

Parameters: [5x1 double]
nr_class: 2
totalSV: 10
rho: 3.7760
Label: [2x1 double]
sv_indices: [10x1 double]
ProbA: []
ProbB: []
nSV: [2x1 double]
sv_coef: [10x1 double]
SVs: [10x8 double]

而高斯核的结果就是参数缺省时的结果,也就是最上面那个。

然后就是结果分析。

#iter是迭代次数,nu与前面的操作参数-n v相同,obj为SVM文件转换为的二次规划求解得到的最小值,rho是判决函数的常数项b,nSV是支持向量个数,nBSV是边界上的支持向量个数。Total nSV是支持向量总个数。

而在训练好的模型中,parameters内装的是训练模型的参数,totalSV是支持向量的数目,Labe装的是类别标记,nSV装的是每类支持向量的个数,sv_coef装的是支持向量对应的Wi,SVs里则是每个支持向量。我们要看的就是SVs的内容。输出时应当是稀疏矩阵,为了可观性可以用full()函数转化为全矩阵后输出。

线性核的SVs结果如下:

2.0000 1.0000 1.0000 3.0000 3.0000 1.0000 0.6080 0.3180
1.0000 1.0000 2.0000 3.0000 3.0000 1.0000 0.5560 0.2150
2.0000 2.0000 2.0000 3.0000 2.0000 0 0.4030 0.2370
3.0000 2.0000 2.0000 2.0000 2.0000 0 0.4810 0.1490
3.0000 2.0000 2.0000 3.0000 2.0000 1.0000 0.4370 0.2110
2.0000 3.0000 3.0000 3.0000 1.0000 0 0.2430 0.2670
2.0000 2.0000 2.0000 2.0000 3.0000 1.0000 0.6390 0.1610
1.0000 2.0000 1.0000 2.0000 3.0000 1.0000 0.6570 0.1980
3.0000 2.0000 2.0000 3.0000 2.0000 0 0.3600 0.3700
2.0000 1.0000 1.0000 2.0000 2.0000 1.0000 0.7190 0.1030

高斯核的SVs结果如下:

2.0000 1.0000 2.0000 3.0000 3.0000 1.0000 0.6970 0.4060
3.0000 1.0000 1.0000 3.0000 3.0000 1.0000 0.7740 0.3760
2.0000 1.0000 1.0000 3.0000 3.0000 1.0000 0.6080 0.3180
1.0000 1.0000 2.0000 3.0000 3.0000 1.0000 0.5560 0.2150
2.0000 2.0000 2.0000 3.0000 2.0000 0 0.4030 0.2370
3.0000 2.0000 2.0000 2.0000 2.0000 0 0.4810 0.1490
3.0000 2.0000 2.0000 3.0000 2.0000 1.0000 0.4370 0.2110
3.0000 2.0000 1.0000 2.0000 2.0000 1.0000 0.6660 0.0910
2.0000 3.0000 3.0000 3.0000 1.0000 0 0.2430 0.2670
1.0000 1.0000 2.0000 1.0000 1.0000 0 0.3430 0.0990
2.0000 2.0000 2.0000 2.0000 3.0000 1.0000 0.6390 0.1610
1.0000 2.0000 1.0000 2.0000 3.0000 1.0000 0.6570 0.1980
3.0000 2.0000 2.0000 3.0000 2.0000 0 0.3600 0.3700
2.0000 1.0000 1.0000 2.0000 2.0000 1.0000 0.7190 0.1030

可以看到的是线性核的支持向量个数比高斯核要少,但两者的向量长度是相同的,而且部分向量是一致的,两者相差不多的原因、依据网上博主们的核函数选择原则来看,或许是因为这个样本集的样本数和属性数相差不大。而在其他情况下的表现还有待讨论。

西瓜书6.2 matlab的libsvm使用的更多相关文章

  1. Matlab的libsvm的安装

    最关键的是compilers的选择(对于把Microsoft visual stdio 2005或者其他的编译器安装在自定义目录下的这一步非常关键)  以下是步骤:>> mex -setu ...

  2. python实现简单决策树(信息增益)——基于周志华的西瓜书数据

    数据集如下: 色泽 根蒂 敲声 纹理 脐部 触感 好瓜 青绿 蜷缩 浊响 清晰 凹陷 硬滑 是 乌黑 蜷缩 沉闷 清晰 凹陷 硬滑 是 乌黑 蜷缩 浊响 清晰 凹陷 硬滑 是 青绿 蜷缩 沉闷 清晰 ...

  3. 决策树ID3原理及R语言python代码实现(西瓜书)

    决策树ID3原理及R语言python代码实现(西瓜书) 摘要: 决策树是机器学习中一种非常常见的分类与回归方法,可以认为是if-else结构的规则.分类决策树是由节点和有向边组成的树形结构,节点表示特 ...

  4. 朴素贝叶斯python代码实现(西瓜书)

    朴素贝叶斯python代码实现(西瓜书) 摘要: 朴素贝叶斯也是机器学习中一种非常常见的分类方法,对于二分类问题,并且数据集特征为离散型属性的时候, 使用起来非常的方便.原理简单,训练效率高,拟合效果 ...

  5. 周志华-机器学习西瓜书-第三章习题3.5 LDA

    本文为周志华机器学习西瓜书第三章课后习题3.5答案,编程实现线性判别分析LDA,数据集为书本第89页的数据 首先介绍LDA算法流程: LDA的一个手工计算数学实例: 课后习题的代码: # coding ...

  6. LASSO回归与L1正则化 西瓜书

    LASSO回归与L1正则化 西瓜书 2018年04月23日 19:29:57 BIT_666 阅读数 2968更多 分类专栏: 机器学习 机器学习数学原理 西瓜书   版权声明:本文为博主原创文章,遵 ...

  7. 决策树 机器学习,西瓜书p80 表4.2 使用信息增益生成决策树及后剪枝

    使用信息增益构造决策树,完成后剪枝 目录 使用信息增益构造决策树,完成后剪枝 1 构造决策树 1 根结点的选择 色泽 信息增益 根蒂 信息增益 敲声 信息增益 纹理 信息增益 脐部 信息增益 触感 信 ...

  8. matlab配置Libsvm 防止备忘录

    1 首先我们要下载一个Libsvm 工具箱 其中,这一切都可以被下载到 2 我们解包 我解压在桌面上 住址C:\Users\Administrator\Desktop\libsvm 3打开matlab ...

  9. 64位matlab中libsvm的安装

    因为windows版的matlab对编译器的识别不好.所以直接在网上下了已经编译好的libsvm文件放入toolbox文件夹就可以用libsvm了 libsvm已编译好的文件下载地址: 猛戳我下载 1 ...

  10. MATLAB安装libsvm无法使用解决办法(转)

    buaasuozi  这是原作者: 安装libsvm 不成功有可能是你的MATLAB版本或者是编译文件版本的问题,但是不要急着换其他版本....说不定就有别的解决办法呢 首先感谢Lin教授及其实验室提 ...

随机推荐

  1. linux下进程通信总结

    信号: 信号是通知发生了某种事件的机制,内核和进程都可能会向进程发送各种信号,进程也可以向自己发送信号.系统定义了一组标准信号类型,每种信号都拥有唯一的数值和用途.典型的信号递送是异步的,意味着进程可 ...

  2. 下载安装i5ting_toc

    全部都是以管理员身份运行powershell 1.打开powershell之后输入命令npm i i5ting_toc -g 这样就全局安装了 2.set-ExecutionPolicy Remote ...

  3. ElasticSearch入门学习笔记

    ElasticSearch入门笔记 分页查询 from: 开始位置 size: 查多少条 GET /credit_enterprise_info/_search { "query" ...

  4. VS2019编译Qt4.8.7

    下载4.8.7源码Index of /archive/qt/4.8/4.8.7 复制mkspecs\win32-msvc2015到mkspecs\win32-msvc2019 修改qmake.conf ...

  5. 其他计算机&网络&行业知识

    互联网数据中心(IDC)   VIDC(端口映射) CVM云服务器(Cloud Virtual Machine)  IDE 集成开发环境: 开发工具 QA:Quality Assurance,直译为质 ...

  6. thirty-one

    动态组件 动态切换组件的显示和隐藏 如何实现动态组件的渲染 vue提供了有一个内置的<component>组件,专门用来实现动态组件的渲染.示例代码如下: 使用keep-alive保持状态 ...

  7. element3 form表单校验对象里面有对象的情况

    let formSearch = reactive({ queryParam: [ { field: "", //查询的字段 gzcs: "", //规则参数 ...

  8. color-color diagram data

  9. 使用CSS 绘制各种形状

      如何使用CSS 绘制各种形状? 很多小伙伴在做开发的时候,遇到一些要画很多形状的时候,就很纠结了,知道怎么用CSS去布局,就是不知道怎么画图案. 其实使用CSS可以绘制出很形状的,比如三角形,梯形 ...

  10. ABAP链接FTP把txt文件数据获取到内表

    啥都不说,直接上代码 ******* 如果无法链接FTP,可能需要往表SAPFTP_SERVERS加入IP地址和端口(21)即可 DATA:p_host TYPE char64 VALUE 'IP', ...