机器学习实验一SVM分类实验
一、实验目的和内容
(一)实验目的
1、熟悉支持向量机SVM(Support Vector Machine)模型分类算法的使用。
2、用svm-train中提供的代码框架(填入SVM分类器代码)用train.data训练数据提供的矩阵来训练参数得到训练模型model,利用libsvm进行模型的训练,分类预测等。
3、利用model和svm-train的代码来分类测试数据集test.data,并报告其分类正确率。
(二)实验内容
支持向量机将向量映射到一个更高维的空间裡,在这个空间里建立有一个最大间隔超平面。在分开数据的超平面的两边建有两个互相平行的超平面。分隔超平面使两个平行超平面的距离最大化。假定平行超平面间的距离或差距越大,分类器的总误差越小。
1、数据预处理(将原始数据格式做一定的处理,转换成libsvm能够使用的而数据)
2、训练数据集的训练,产生训练模型。
3、测试数据集的分类预测,观察分析实验结果。
二、实验过程
实验步骤和详细实验内容
(一)实验步骤
1、对原始数据集进行预处理,将文本数据集转换成为libsvm能够使用的数据。
(1)原始数据格式:
|
条件属性a |
条件属性b |
条件属性c |
条件属性d |
条件属性e |
条件属性f |
条件属性g |
条件属性h |
条件属性i |
条件属性j |
决策属性 |
|
0.006129 |
-0.029258 |
-1.000000 |
-1.000000 |
-1.000000 |
-1.000000 |
-1.000000 |
-1.000000 |
-1.000000 |
-1.000000 |
1 |
(2)数据格式转换需要:
当数据较少时,可以用formatdatalibsvm轻松地将文本数据转换成为svm工具使用的数据。使用方法为:
打开train.data然后将数据粘贴到sheet1的单元格中。
再"工具"-->"宏"-->执行下面有一个选项(FormatDatatoLibsvm)-->执行,要选中这个然后运行就可以了 ,这时数据转换的问题就解决了(如果没有宏选项,点击“开始--excel选项---在功能区显示“开发工具”选项卡”)
可以copy到一个记事本中即可。但是注意在用libsvm的时候要在命令行输入.txt后缀。
|
决策属性 |
条件属性a |
条件属性b |
条件属性c |
条件属性d |
条件属性e |
条件属性f |
条件属性g |
条件属性h |
条件属性i |
条件属性j |
|
1 |
1:.006129 |
2:-.029258 |
3:-1 |
4:-1 |
5:-1 |
6:-1 |
7:-1 |
8:-1 |
9:-1 |
10:-1 |
2、将处理好的数据集train.txt通过libsvm包中的svm-train进行训练,生成训练模型train.model。
3、利用训练好的模型对测试数据集test.txt进行分类预测,观其分类结果和识别正确率。
4、分析得到的实验结果,思考有什么问题以及改进办法等。
(二)详细实验内容
1、对实验中给出的数据集train.data进行数据格式转换,能够更有效地将文本数据转换成为svm工具使用的数据。
2、利用1转换好的数据,通过实验指导书中给出的通用SVM 软件包Libsvm建立分类模型,生成训练模型train.model。
3、利用2所训练好的模型对测试数据集test.txt进行分类预测,观察分类结果以及分类正确率。
三、实验结果
实验结果数据(如果有评测要求应包括评测结果,例如分类的准确率)
分析:在原始训练数据集中可以发现,这实际上是一个非均衡数据集,正样本的数据和负样本的数据数量偏差十分大,决策属性1很少,而决策属性-1较多。
分析:自动选择最优参数,自动进行归一化。利用我们生成的模型对测试数据集进行预测,得到的预测准确率为94.3533%。
四、实验总结
完成试验后对实验中的问题进行总结(可包括实验结果讨论及下一步工作)
本次实验是通过LIBSVM进行模型的构建与预测,使用libsvm进行分类,只需要有属性矩阵和标签,然后就可以建立分类模型(model),然后利用得到的这个model进行分类预测了。对数据进行预处理之后,调用相关的软件包能够将训练数据集转换出训练模型,并且对测试数据集进行简单的分类,得到了最后的分类结果。
在实验过程中也发现了一些问题,就是训练数据样板不平衡。这本身是一个二元分类问题,分类器是由训练数据训练出来的模型,所以训练数据肯定会对其造成直接的影响,这里所说的不平衡性就是各个类别的训练 sample 数目不平衡。比如,在二元分类的情况下在原始训练数据集中可以发现,这实际上是一个非均衡数据集,正样本的数据和负样本的数据数量偏差十分大。因此导致测试的结果分类正确率accuracy只有94.3533%,最后的分类输出也只有-1了。
通过调研和分析,我收集到一些方法可以解决样本为非均衡数据集的方法:
1、在两类正负样本比例非常不均衡的情况下,就不能再用「分类正确率」(accuracy)来衡量模型性能,而要用少数类的「准确率」(precision)和「召回率」(recall),或者二者的综合(F1, equal error rate, area under curve 等等)。
2、增加数量较少决策属性的样本特征,把少数类的数据复制几份,并适当加噪声。这可以增强模型的鲁棒性,调整两类训练样本的权重,使得两类的总权重相等。
3、采样,选择每个正样本的k近邻,然后在该样本和近邻样本的连线上随机采样。
4、数据预处理。基本的目标就是把数据变平衡,常见的方法有over-sample,under-sample,smote等。
总结:
1、支持向量机的关键技术:支持向量机性能的优劣主要取决于核函数的选取,所以对于一个实际问题而言,如何根据实际的数据模型选择合适的核函数从而构造SVM算法.目前比较成熟的核函数及其参数的选择都是人为的,根据经验来选取的,带有一定的随意性.在不同的问题领域,核函数应当具有不同的形式和参数,所以在选取时候应该将领域知识引入进来.
2、在使用libsvm进行分类训练时,也要注意正负样本的均衡问题,我们可以采用上面提到的一些方法进行解决。
3、在接下来需要尝试将不同的训练样本训练出模型,调整正负样本的比例,寻找最优参数的设置,提高模型的分类预测正确率。
参考文献:
[1]姬水旺,姬旺田,支持向量机训练算法综述[J],微机发展,14(1),2004。
[2]刘江华,程君实,陈佳品,支持向量机训练算法综述[J],信息与控制,31(1),2002。
[3]Libsvm学习笔记(http://mirrorlake.bokee.com/5133582.html)
[4]LIBSVM使用方法及参数设置(http://blog.sina.com.cn/s/blog_60f842960101j5rw.html)
机器学习实验一SVM分类实验的更多相关文章
- 吴裕雄--天生自然python机器学习实战:K-NN算法约会网站好友喜好预测以及手写数字预测分类实验
实验设备与软件环境 硬件环境:内存ddr3 4G及以上的x86架构主机一部 系统环境:windows 软件环境:Anaconda2(64位),python3.5,jupyter 内核版本:window ...
- case7 淋巴瘤子类分类实验记录
case7 淋巴瘤子类分类实验记录 简介 分类问题:3分类 (identifying three sub-types of lymphoma: Chronic Lymphocytic Leukemia ...
- 视觉机器学习读书笔记--------SVM方法
SVM是一种二类分类模型,有监督的统计学习方法,能够最小化经验误差和最大化几何边缘,被称为最大间隔分类器,可用于分类和回归分析.支持向量机的学习策略就是间隔最大化,可形式化为一个求解凸二次规划的问题, ...
- Relation Extraction中SVM分类样例unbalance data问题解决 -松弛变量与惩罚因子
转载自:http://blog.csdn.net/yangliuy/article/details/8152390 1.问题描述 做关系抽取就是要从产品评论中抽取出描述产品特征项的target短语以及 ...
- 【机器学习】从SVM到SVR
注:最近在工作中,高频率的接触到了SVM模型,而且还有使用SVM模型做回归的情况,即SVR.另外考虑到自己从第一次知道这个模型到现在也差不多两年时间了,从最开始的腾云驾雾到现在有了一点直观的认识,花费 ...
- 机器学习——支持向量机(SVM)
机器学习--支持向量机(SVM) 支持向量机(Support Vector Machine)广泛地应用于分类问题,回归问题和异常检测问题.支持向量机一个很好的性质是其与凸优化问题相对应,局部最优解就是 ...
- 遵循统一的机器学习框架理解SVM
遵循统一的机器学习框架理解SVM 一.前言 我的博客仅记录我的观点和思考过程.欢迎大家指出我思考的盲点,更希望大家能有自己的理解. 本文参考了李宏毅教授讲解SVM的课程和李航大大的统计学习方法. 二. ...
- SVM-支持向量机(二)非线性SVM分类
非线性SVM分类 尽管SVM分类器非常高效,并且在很多场景下都非常实用.但是很多数据集并不是可以线性可分的.一个处理非线性数据集的方法是增加更多的特征,例如多项式特征.在某些情况下,这样可以让数据集变 ...
- SVM-支持向量机(一)线性SVM分类
SVM-支持向量机 SVM(Support Vector Machine)-支持向量机,是一个功能非常强大的机器学习模型,可以处理线性与非线性的分类.回归,甚至是异常检测.它也是机器学习中非常热门的算 ...
随机推荐
- 虚拟机VMware Workstation Pro下安装ubuntu-14.04.4(64位)方法(附ubuntu-14.04-desktop-amd64.iso下载链接)
ubuntu-14.04-desktop-amd64.iso下载: 链接:http://pan.baidu.com/s/1bFi0d4 密码:yx0l 零基础linux使用入门教学视频分享: 链接:h ...
- 学web前端开发写给新手的建议,超实用!
01 前面的话 如今我们使用的互联网,客户端与服务器端的交互无时无刻不在发生.比如我们在浏览器打开网页,浏览器就是客户端,将网页数据发过来的也就是服务器.其实服务器,并没有什么特别的,也就是一台昼夜不 ...
- JAVA WEB 中涉及的编解码
1.对URL解码 1)URI部分解码:<Connector URIEncoding="UTF-8" /> 2)QueryString解码要么是 Header 中 Con ...
- (转)Spark性能优化:资源调优篇
在开发完Spark作业之后,就该为作业配置合适的资源了.Spark的资源参数,基本都可以在spark-submit命令中作为参数设置.很多Spark初学者,通常不知道该设置哪些必要的参数,以及如何 ...
- C++获取Windows7 32位系统中所有进程名(类似于任务管理器中的进程)
代码是网上查找资料,然后自己调试,修改之后可以运行. 系统:win7 32位,VS2008 ------------------------------------------------------ ...
- font-face 在 Firefox无法正常工作问题
@font-face存在的问题: 1.不同浏览器支持不同格式 2.Firefox默认情况下不允许跨域font-face,除非你可以添加“Access-Control-Allow-Origin” hea ...
- C#之可选参数和命名参数
设计方法的参数是,可以将部分参数和全部参数分配默认值,然后调用这些方法的时候可以选择不提供部分实参,使用参数定义的默认值,另外,还可以在调用方法的时候通过指定参数名称来传递实参. 例如: public ...
- 如何运用GitHub来提高生产效率
这是一篇GitHub的入门级文章,主要针对git的初学者.我们将讨论初学者最关心的一些问题,如:为什么我们要使用GitHub,它的应用有哪些,如何运用它去帮助我们提高工作效率,以及它的基本用法有哪些. ...
- linux系统下解决getch()输入数值不回显示
在linux系统下开发C 程序却会遇到系统不支持conio.h头文件,无法使用getch()不回显函数.下面就演示如何构建函数实现数值输入不回显. #include <stdio.h> # ...
- 如何兼容所有Android版本选择照片或拍照然后裁剪图片--基于FileProvider和动态权限的实现
我们知道, Android操作系统一直在进化. 虽然说系统是越来越安全, 可靠, 但是对于开发者而言, 开发难度是越来越大的, 需要注意的兼容性问题, 也越来越多. 就比如在Android平台上拍照或 ...