matlab实现机器学习svm

一、目的和要求

1.编程实现SVM训练函数和预测函数;

2.绘制线性和非线性边界;

3.编写线性核函数

二、算法

1.线性svm:

分离超平面:w·x+b=0,对于线性可分的数据集来说,这样的超平面有无穷多个(即感知机),但是几何间隔最大的分离超平面却是唯一的

输入:训练数据集 其中,

输出:分离超平面和分类决策函数

(1)选择惩罚参数C>0,构造并求解凸二次规划问题

(2)计算

(3)求分离超平面

分类决策函数:

2.非线性svm:

输入:训练数据集  其中,

输出:分离超平面和分类决策函数

(1)选取适当的核函数 [公式] 和惩罚参数 [公式] ,构造并求解凸二次规划问题

(2)计算

(3)分类决策函数:

三、过程记录

1.数据集1可视化

导入数据集1的数据,包括特征和类标,在绘图函数中完成如下代码可以实现:

分别将两种类标数据提取出来进行绘制,结果如下:

图1 数据集1样本点分布

2.svm训练

通过svmtrain函数对数据进行训练,初始设定C的值为1,训练完成后绘制通过visualizeBoundaryLinear函数绘制决策边界,结果如下:

图2 C=1时决策边界

从图中可以看出其中有一个正样本数据被分为了负样本,此时继续改变C的值来进行探究

图3 C=10时决策边界

图4 C=50 决策边界

图5 C=100 时决策边界

可以发现此时所有样本均分类正确

3.高斯核

通过公式编写高斯核函数来计算相应的高斯内核,函数内代码如下,x1,x2是两个数据,sigma为参数

接下来设定两个示例来调用该函数进行验证,设定sigma值为2

打印出的结果为0.324652

4.可视化数据集2

图6 数据集2样本点分布

5.对数据集2进行svmtrain训练,设定C=1,加入高斯核函数,设定sigma=0.1,训练完成后绘制的边界如下:

图7 C=1 sigma=0.1决策边界

可以发现此时边界基本能区分两类样本了。改变C和sigma的值进行相应实验:

图8 C=1 sigma=0.2决策边界

图9 C=50 sigma=0.1 决策边界

6.可视化数据集3

图10 数据集3样本点分布

7.寻找最佳C和sigma值,绘制决策边界

在dataset3Params函数中尝试不同的C的sigma值对并求出对应的交叉验证集的错误率,然后找到最小错误率所对应的C和sigma值,代码如下:

C和sigma的值都有八种选择,因此一共可以产生64中错误率结果,然后通过内置函数ind2sub找到最小值下表,最终结果如下:

图11 错误率及最终寻找结果

再将得到的最佳参数值代入训练中,得到的判别边界如下:

图12 决策边界

可以看出此时已经能够正确分类大部分的样本点了。

接下来进行垃圾邮件分类

8.电子邮件预处理和规范化

首先需要读取邮件,通过内置fopen函数打开数据集文件,然后使用fscanf将其中内容读取

处理包括以下几种:将邮件转换为小写、删除HTML标签、URL替换为文本“httpaddr”、电子邮件地址替换为文本“emailaddr”、将所有数字转换为文本“number”、将所有美元符号$替换为文本“dollar”、单词简化为词根形式、删除非单词和标点符号、所有的制表符、换行符、空格都被裁剪为一个空格字符。处理后结果如下:

图13 邮件处理后结果

9.建立电子邮件中的词所对应的单词表中的词汇的映射

通过字符串比较函数strcmp将处理后的邮件中的单词与词汇表中的单词一一比较,如果有相同的则将词汇表当前的索引记录下来:

最终得到的部分索引值如下:

10.从电子邮件中提取特征

在大小为1899的特征向量中,若词汇表中的单词存在于邮件中则将数组中为该单词对应的索引部分的值置为1,否则为0,然后统计非0值的个数。结果如下:

图14 特征提取结果

通过之前的实验可知在第一个邮件数据集中在处理过后一共有53个单词可以与词汇表所对应,但是此处只能提取45个,经过分析得知这是由于53个单词中有重复的单词,而45指的是词汇表中不同单词所能够映射到邮件中的个数。

11.svm垃圾邮件训练

加载已有的训练集文件,文件包括X(垃圾和非垃圾邮件实例),y(所属类别,1代表垃圾邮件,0代表非垃圾邮件)

初始设定C的值为0.1,训练后再进行预测计算出训练集和测试集的准确率

图15 训练集准确率

再继续对测试集数据进行预测,结果如下

图16 测试集准确率

12.寻找垃圾邮件主要预测的因素

将分类器模型中不同索引值的权重值进行排序,然后在词汇表中找到对应的单词,查看影响预测因素最大的前15个单词

图17 主要预测因素及其对应的权值

13.对不同邮件数据集进行处理并分类

读入一封已知的垃圾邮件进行同样的处理并且使用上述实验中已经得到的分类器进行分类预测

结果如下:

图18 原文

图19 处理后邮件

图20 分类结果

可知分类器对该邮件的预测为垃圾邮件,由已知条件可知分类正确

读入非垃圾邮件emailSample2.txt进行同样的操作,结果如下:

图21 处理后的邮件

图22分类结果

分类正确

结果验证该分类器可以正确分类示例中的垃圾和非垃圾邮件

四、结果分析

    本次实验我们首先通过svm对各种示例2D数据集进行分类实验,第一个数据集可以通过线性边界分割开,但是在开始设定的惩罚因子C的值时依然会有错误分类,通过多次探究如图2到图5所示,将C的值调大后SVM越不会放弃那些离群点,并且趋于尝试正确分类所有的例子,但是过大也有可能会造成过拟合。对于线性不可分的数据集,需要加入高斯核来找到非线性决策边界,高斯核中的sigma参数对于结果也有影响,若过高则可能会欠拟合,若过低,可能训练准确率会很高但会过拟合,所以如果发现准确率低我们可以尝试调大C的值调小sigma的值。而在第三个数据集中,我们通过程序自动取寻找合适的C和sigma值,通过交叉集进行验证,以最小错误率为标准最终得出了最佳的结果如图12所示。

    在垃圾邮件分类的实验中,我们通过对邮件进行处理从而方便特征的提取,通过与词汇表建立映射从而将字母等信息转换为更加适合处理的数字信息,通过训练后得到的分类器对于训练集及测试集的准确率都很高如图15与图16所示。分类器中也可以查看相应的参数,从而得知垃圾邮件的主要预测因素如图17所示,最后我对于其它的一些邮件示例进行预测发现结果均正确,由此可见该分类器模型预测效果不错。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/478947.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

汽车ECU的虚拟化技术(五) -- 对MCU虚拟化实现难点的思考

目录 1.概述 2.虚拟化软件的难点 2.1 虚拟化中的中断处理 2.2 虚拟ECU的通信 3.小结 1.概述 在上面文章里汽车ECU的虚拟化技术(四) -- 对MCU虚拟化实现难点的思考-CSDN博客,解了OEM面临新的电子电气架构下的集成难点,引入了hypervisor以及VM调度机制…

VMD + CEEMDAN 二次分解,CNN-Transformer预测模型

往期精彩内容: 时序预测:LSTM、ARIMA、Holt-Winters、SARIMA模型的分析与比较-CSDN博客 风速预测(一)数据集介绍和预处理-CSDN博客 风速预测(二)基于Pytorch的EMD-LSTM模型-CSDN博客 风速预测&#xff…

研华工控机610L学习笔记1:基本了解与认识

今日开始学习一些工控机的基本知识: 目录 目录 1、工控机介绍: 2、研华610L说明书参数了解: 3、基本结构了解: 前面板: 后窗: 4.RS232串口: ​编辑 5、工控机分类: 6、工控上…

深度学习pytorch——激活函数损失函数(持续更新)

论生物神经元与神经网络中的神经元联系——为什么使用激活函数? 我们将生物体中的神经元与神经网络中的神经元共同分析。从下图可以看出神经网络中的神经元与生物体中的神经元有很多相似之处,由于只有刺激达到一定的程度人体才可以感受到刺激&#xff0c…

一、SpringBoot基础搭建

本教程主要给初学SpringBoot的开发者,通过idea搭建单体服务提供手把手教学例程,主要目的在于理解环境的搭建,以及maven模块之间的整合与调用 源码:jun/learn-springboot 以商城项目为搭建例子,首先计划建1个父模块&…

微服务高级篇(三):分布式缓存+Redis集群

文章目录 一、单点Redis的问题及解决方案二、Redis持久化2.1 单机安装Redis2.2 RDB持久化2.3 AOF持久化2.4 RDB和AOF对比 三、Redis主从3.1 搭建Redis主从架构3.1.1 集群结构3.1.2 准备实例和配置3.1.3 启动3.1.4 开启主从关系3.1.5 测试 3.2 数据同步3.2.1 全量同步【建立连接…

【嵌入式——QT】QWT应用

【嵌入式——QT】QWT应用 概述步骤一步骤二步骤三代码声明代码实现图示 概述 QWT,全称Qt Widgets for Technical Applications,是一个基于Qt开发的第三方库。它主要为具有技术背景的程序提供GUI组件和一组实用类,用于生成各种统计图。QWT的主…

【JDBC编程】Java连接MySQL的五个步骤

目录 JDBC编程 1.JDBC的使用 2.数据库连接Connection 3.Statement对象 4.ResultSet对象 JDBC编程 JDBC编程运用了MySQL提供的 Java 的驱动包 mysql-connector-java ,需要基于 Java 操作 MySQL 即需要该驱动包。同样的, 要基于 Java 操作 Oracle 数据库…

【文本输入框】显示输入文本的字数,并且限制输入字数不能超过***个字符

需求 实现一个输入框显示文本的字数&#xff0c;并且设置字数限制&#xff0c;当文本中没有内容或字符串长度超出限制&#xff0c;则不能点击确定按钮。 <div class"input-content"><div class"pt-2 rounded-tl-xl rounded-tr-xl bg-blue-100"&…

vue3+threejs新手从零开发卡牌游戏(十):创建己方战域

首先在game目录下创建site文件夹&#xff0c;用来存放战域相关代码&#xff1a; 这里思考下如何创建战域&#xff0c;我的想法是添加一个平面&#xff0c;将己方战域和对方战域都添加进这个平面中&#xff0c;所以首先我们先添加一个战域plane&#xff0c;site/index.vue代码如…

C是用什么语言写出来的?

C是用什么语言写出来的? C语言的起源和发展是一个迭代过程&#xff1a; 1. 最初的C语言编译器的开发始于对B语言的改进。B语言是由Ken Thompson设计的&#xff0c;它是基于BCPL语言简化而来的。在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「 C语言的…

2024.3.20 使用maven打包jar文件和保存到本地仓库

2024.3.20 使用maven打包jar文件和保存到本地仓库 使用maven可以很方便地打包jar文件和导入jar文件&#xff0c;同时还可以将该文件保存在本地仓库重复调用。 使用maven打包jar文件和保存到本地仓库 package打包文件。 install导入本地仓库。 使用maven导入jar文件 点击“…

基于GIS、RS、VORS模型、CCDM模型、geodetecto、GWR模型集成的生态系统健康的耦合协调分析技术

集成多源数据&#xff0c;依托ArcGIS Pro和R语言环境&#xff0c;采用“活力-组织力-恢复力-贡献力”&#xff08;VORS&#xff09;模型定量测算生态系统健康指数&#xff08;EHI&#xff09;&#xff1b;如何从经济城镇化&#xff08;GDPD&#xff09;、人口城镇化&#xff08…

【算法杂货铺】分治

目录 &#x1f308;前言&#x1f308; &#x1f4c1; 快速排序 &#x1f4c2;75. 颜色分类 - 力扣&#xff08;LeetCode&#xff09; &#x1f4c2; 912. 排序数组 - 力扣&#xff08;LeetCode&#xff09; &#x1f4c2; 215. 数组中的第K个最大元素 - 力扣&#xff08;Lee…

以RISC-V架构的CLIC中断机制讲解:中断咬尾、中断抢占、中断晚到

1、中断的相关属性 中断所属特权模式&#xff08;M模式 > S模式 > U模式&#xff09;中断等级&#xff1a;决定是否能够抢占当前的中断中断优先级&#xff1a;影响中断的仲裁&#xff0c;优先级高时优先被响应中断编号&#xff1a;区分中断&#xff0c;影响中断的仲裁 …

操作系统面经-什么是操作系统?

通过以下四点可以概括操作系统到底是什么&#xff1a; 操作系统&#xff08;Operating System&#xff0c;简称 OS&#xff09;是管理计算机硬件与软件资源的程序&#xff0c;是计算机的基石。操作系统本质上是一个运行在计算机上的软件程序 &#xff0c;主要用于管理计算机硬…

视频素材库哪家好?我给大家来分享

视频素材库哪家好&#xff1f;这是很多短视频创作者都会遇到的问题。别着急&#xff0c;今天我就来给大家介绍几个视频素材库哪家好的推荐&#xff0c;让你的视频创作更加轻松有趣&#xff01; 视频素材库哪家好的首选当然是蛙学网啦&#xff01;这里有大量的高质量视频素材&am…

成都百洲文化传媒有限公司电商新浪潮的领航者

在当今电商行业风起云涌的时代&#xff0c;成都百洲文化传媒有限公司以其独特的视角和专业的服务&#xff0c;成为了众多商家争相合作的伙伴。今天&#xff0c;就让我们一起走进百洲文化的世界&#xff0c;探索其背后的成功密码。 一、百洲文化的崛起之路 成都百洲文化传媒有限…

python共享单车信息系统的设计与实现flask-django-php-nodejs

课题主要分为二大模块&#xff1a;即管理员模块和用户模块&#xff0c;主要功能包括&#xff1a;用户、区域、共享单车、单车租赁、租赁归还、报修信息、检修信息等&#xff1b; 语言&#xff1a;Python 框架&#xff1a;django/flask 软件版本&#xff1a;python3.7.7 数据库…

从内存巷弄到指针大道(一)

文章目录 1.内存和地址1.1理解内存地址酒店大堂&#xff1a;内存的入口房间号&#xff1a;内存地址的意义酒店的楼层划分&#xff1a;内存的结构酒店的房间单位&#xff1a;计算机中的常见单位 1.2如何理解编址 2.指针变量和地址2.1取地址操作符&#xff08;&)2.2 指针变量…