前言

本文讲解如何使用R语言中e1071包中的SVM函数进行分类操作,并以一个关于鸢尾花分类的实例演示具体分类步骤。

分析总体流程

1. 载入并了解数据集;
2. 对数据集进行训练并生成模型;
3. 在此模型之上调用测试数据集进行分类测试;
4. 查看分类结果;
5. 进行各种参数的调试并重复2-4直至分类的结果让人满意为止。

参数调整策略

综合来说,主要有以下四个方面需要调整:

1. 选择合适的核函数;
2. 调整误分点容忍度参数cost;
3. 调整各核函数的参数;
4. 调整各样本的权重。

其中,对于特征比较多的情况一般用非线性核,比如高斯核。高斯核的特点是参数多,需要不断调试参数才能理想的效果。而线性核没什么参数可设置,一般适用于特征比较少的情况。

关于各核函数的参数,则一般是通过试探法来确定。最好可以将不同样本权重模型,不同核函数参数下的分类准确率做成一张可视化报表,以便于方案确定。

关于3的选择,一般可以通过MDS的可视化图,看有哪几个分类是纠缠不清的,然后就加大这两个分类的样本权重。

鸢尾花分类分析 - 使用支持向量机(SVM)

1. 安装SVM分析所需包:e1071

2. 载入并了解数据集:

可以看出,这个数据集比较理想化,避免了繁琐的数据预处理过程,非常适合作为案例讲解。

3. 建立SVM模型:

这个模型变量相当于是训练库,下面查看该模型的信息:

其中,SVM类型是C-classification,核函数是高斯核,cost是误分点容忍度参数,gamma是核函数参数。他们的具体含义请参考函数手册。

4. 利用该模型进行预测

5. 查看预测效果:

可见,有两个类型似乎混淆了。那怎么办?还有,如果变量多,我如何观察出哪几个变量纠缠不清呢?下面先来解决这个问题。

6. 使用MDS技术查看各变量分类情况

MDS技术可以根据所有样本之间的距离,根据各个变量之间距离不变的设定,将维度降低到两维。一般来说,它是用来分析整体分类的一个态势的:

 plot(cmdscale(dist(iris[,-5])), col = c("blue", "green", "orange")[as.integer(iris[,5])], pch = c("o", "+")[1:150 %in% model$index+1])
legend(2, -0.7, c("setosa", "versicolor", "virginica"), col = c("blue", "green", "orange"), lty = 1)

显示效果如下:

显然,后两个分类有点混淆。

7. 调整各样本权重系数:

由上图可知,这样的模型产生了更好的分类效果。

小结

1. 本例中的场景比较简单,故未做复杂的参数调整。在实际项目中往往需要对方方面面都进行调整。

2. 虽然SVM在做了标准化后效果更好,但是不用手动标准化。因为SVM函数会自动进行标准化。

3. 对于维度比较少的情况,直接用线性核就好了。

4. SVM是综合指标最好的分类器,但是有它的局限之处,那就是容易过拟合。因此降维工作一定要做好。

第八篇:支持向量机 (Support Vector Machine)的更多相关文章

  1. 支持向量机 support vector machine

    SVM(support Vector machine) (1) SVM(Support Vector Machine)是从瓦普尼克(Vapnik)的统计学习理论发展而来的,主要针对小样本数据进行学习. ...

  2. 支持向量机(Support Vector Machine)-----SVM之SMO算法(转)

    此文转自两篇博文 有修改 序列最小优化算法(英语:Sequential minimal optimization, SMO)是一种用于解决支持向量机训练过程中所产生优化问题的算法.SMO由微软研究院的 ...

  3. 机器学习(八)--------支持向量机 (Support Vector Machines)

    与逻辑回归和神经网络相比,支持向量机或者简称 SVM,更为强大. 人们有时将支持向量机看作是大间距分类器. 这是我的支持向量机模型代价函数 这样将得到一个更好的决策边界 理解支持向量机模型的做法,即努 ...

  4. 支持向量机(Support Vector Machine,SVM)

    SVM: 1. 线性与非线性 核函数: 2. 与神经网络关系 置信区间结构: 3. 训练方法: 4.SVM light,LS-SVM: 5. VC维 u-SVC 与 c-SVC 区别? 除参数不同外, ...

  5. 支持向量机SVM(Support Vector Machine)

    支持向量机(Support Vector Machine)是一种监督式的机器学习方法(supervised machine learning),一般用于二类问题(binary classificati ...

  6. 6. support vector machine

    1. 了解SVM 1. Logistic regression 与SVM超平面 给定一些数据点,它们分别属于两个不同的类,现在要找到一个线性分类器把这些数据分成两类.如果用x表示数据点,用y表示类别( ...

  7. 斯坦福第十二课:支持向量机(Support Vector Machines)

    12.1  优化目标 12.2  大边界的直观理解 12.3  数学背后的大边界分类(可选) 12.4  核函数 1 12.5  核函数 2 12.6  使用支持向量机 12.1  优化目标 到目前为 ...

  8. 机器学习课程-第7周-支持向量机(Support Vector Machines)

    1. 优化目标 在监督学习中,许多学习算法的性能都非常类似,因此,重要的不是你该选择使用学习算法A还是学习算法B,而更重要的是,应用这些算法时,所创建的大量数据在应用这些算法时,表现情况通常依赖于你的 ...

  9. 5. support vector machine

    1. 了解SVM 1. Logistic regression回顾 Logistic regression目的是从特征中学习出一个0/1二分类模型,而这个模型是将特性的线性组合作为自变量,由于自变量的 ...

随机推荐

  1. AMD && CMD

    前言 JavaScript初衷:实现简单的页面交互逻辑,寥寥数语即可: 随着web2.0时代的到来,Ajax技术得到广泛应用,jQuery等前端库层出不穷,前端代码日益膨胀 问题: 这时候JavaSc ...

  2. Python面向对象篇(2)-继承

    在发表本篇随笔的时候,距离上一次发已经有一个多月了,很多朋友私信我为什么不持续更新了,在这里先跟大家说声抱歉.因为年底的工作较为繁重,实在分不出精力,更重要的也是在思考后面进阶的部分要按怎样的顺序写, ...

  3. cygwin + git + nat123 30元搭建公网可访问的git服务器

    首先参考上一篇安装服务器上的CYGWIN: http://jingyan.baidu.com/article/7e440953eabd742fc0e2efae.html 上一篇中已经加入了GIT相关的 ...

  4. Maven json包找不到解决办法

    在Maven中央仓库找到Maven的jar <dependency> <groupId>net.sf.json-lib</groupId> <artifact ...

  5. RHEL6误安装RHEL7的包导致glibc被升级后系统崩溃处理方法

    RHEL6误使用了RHEL7的光盘源,安装了某个RPM包之后,导致glibc被升级,进而导致系统崩溃.   [root@rhel65 ~]# yum install ftp Loaded plugin ...

  6. OO(Object Oriented)

    封装.继承.多态. 封装:隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读取和修改的访问级别.封装就是将抽象得到的数据和行为相结合,形成一个有机的整体,也就是将数据与操作数据的代码进行有 ...

  7. Samba服务器的安装与配置

    Samba服务器主要的功能是实现本地windows系统下方便读写局域网内虚拟机下的文件: Samba与window连接需要使用NetBIOS协议,请确认你的Windows系统已经安装了NetBIOS协 ...

  8. Java系统监控(淘汰sigar)

    Sigar是Hyperic-hq产品的基础包,是Hyperic HQ主要的数据收集组件.它用来从许多平台收集系统和处理信息. 这些平台包括:Linux, Windows, Solaris, AIX, ...

  9. 发布iOS应用时,Xcode报错:Application failed codesign verification.

    如下图,在发布应用时,因为codesign问题卡住了.尝试修改Target中的code sign setting,没有效果. 接着,在Developer Center删除所有证书,甚至包括Apps I ...

  10. pep 8 规范的一些记录

    一.pep8起源 龟叔创立Python的初衷里就有创立一个容易阅读的编程语言,所以亲自操刀写了pep8 代码规范,每个项目开始前都要有一个共识,就是自己的代码规范,pep8 就是一个很好的范本. 二. ...