matlab实现机器学习svm

news2024/11/15 12:37:41

一、目的和要求

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所示,最后我对于其它的一些邮件示例进行预测发现结果均正确,由此可见该分类器模型预测效果不错。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

局部路径规划算法 - 贝塞尔曲线法 C++ matlab

参考资料: (1)贝塞尔曲线法 (2)曲线杂谈(二):Bezier曲线的特殊性质 贝塞尔曲线法 1 算法概述 1.1 算法简介 贝塞尔曲线于1962年由法国工程师皮埃尔贝塞尔(Pierre Bzi…

(2023)mac 安装Android studio(安装jdk,Android SDK)

一、安装jdk并配置环境变量 1.下载安装jdk 网址:Java Downloads | Oracle 注意这里需要注册登录后才可下载。 选择下载java8,jdk1.8。打开安装即可。 ​ 2.配置环境变量 打开终端,输入java -version,能够看到jdk版本&#…

PyTorch深度学习:如何提升遥感影像的地物分类精度?

我国高分辨率对地观测系统重大专项已全面启动,高空间、高光谱、高时间分辨率和宽地面覆盖于一体的全球天空地一体化立体对地观测网逐步形成,将成为保障国家安全的基础性和战略性资源。未来10年全球每天获取的观测数据将超过10PB,遥感大数据时…

SpringBoot+Vue项目(后端项目搭建 + 添加家居)

文章目录 1.使用版本控制管理该项目1.创建远程仓库2.克隆到本地 2.后端项目环境搭建1.创建一个maven项目2.删除不必要的文件夹3.pom.xml文件引入依赖4.application.yml 配置数据源(注意,数据库名还没写)5.com/sun/furn/Application.java 编写…

java练习题目1:让用户从键盘键入长方体的长,宽,高,计算并输出它的表面积与体积

每日小语 我相信即便是一道简单的题目,背后也有深刻的自然规律,通向那最高的“道”。 即便一个晚上,一道题也没做出来,只是不断地体悟那些解法与思想。彷佛这是一趟心灵的朝圣之旅。 …

Ubuntu24.04即将发布,支持Linux内核6.8。该版本会有哪些亮点?

更多内容在 Canonical 计划 2024 年 4 月发布 Ubuntu 24.04 LTS 发行版,将获得长达 12 年的支持。Ubuntu 24.04 LTS,代号“Noble Numbat”,是Ubuntu发行版的最新长期支持(LTS)版本。12年的支持意味着你会得到 五年的维…

tinyrenderer-Bresenham绘制直线算法

如何画线段 第一种尝试 求x&#xff0c;y起始点的差值&#xff0c;按平均间隔插入固定点数 起始点平均插入100个点&#xff1a; void line(int x0, int y0, int x1, int y1, TGAImage& image, TGAColor color) {for (float t 0.; t < 1.; t .01) {int x x0 (x1 -…

2024计算机二级Python 11和12

单向列表不能再回头&#xff0c;只有从头指针开始才可以&#xff0c;双向列表会出现重复访问&#xff0c;二叉树节点从根开始可以达到目的 面向对象的主要特征&#xff1a;抽象、封装、继承、多态 Python通过解释方式执行&#xff0c;执行速度没有采用编译方式的语言执行的快 f…

Docker【docker使用】

文章目录 前言一、概念二、常用方法1.镜像2.容器 三、镜像与镜像的关系&#xff0c;以及镜像构建和管理 前言 上一篇文章讲了docker的安装&#xff0c;本片文章我们来聊聊docker的一些常用操作。以及镜像、容器之间的关系 如果你想更加系统的学习docker&#xff0c;请看【dock…

蓝桥杯(3.21 刷真题)

P8682 [蓝桥杯 2019 省 B] 等差数列 import java.util.Arrays; import java.util.Scanner; public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt();int[] res new int[n1];for(int i1;i<n;i)res[i] sc.ne…

elasticsearch的数据搜索

DSL查询文档 elasticsearch的查询依然是基于JSON风格的DSL来实现的。 Elasticsearch提供了基于JSON的DSL(Domain Specific Language)来定义查询。常见的查询类型包括: 查询所有:查询出所有数据,一般测试用。例如:match_all 全文检索(full text)查询:利用分词器对用户…

虚拟直播赋能文旅,蓝海创意云亮相文旅虚拟现实应用推广交流活动

3月21日&#xff0c;由文化和旅游部产业发展司主办&#xff0c;中国信息通信研究院、北京市石景山区文化和旅游局、中国动漫集团有限公司承办的文化和旅游虚拟现实应用推广交流活动在首钢一高炉SoReal科幻乐园33 Meta Club举办。蓝海创意云应邀参与此次活动&#xff0c;携vLive…

ON1 NoNoise AI 2024 for mac v18.2 中文版 ai摄影

ON1 NoNoise AI 2024 for mac一款去除图像噪点的应用&#xff0c;特别对于摄影师来说&#xff0c;它是比较专业的摄影降噪软件。 软件下载&#xff1a;ON1 NoNoise AI 2024 for mac v18.2 中文版下载 智能降噪&#xff1a;利用先进的机器学习技术&#xff0c;ON1 NoNoise AI 20…

第5讲-MIPS(3)汇编语言

三、MIPs汇编语言(自学) 1.概述

taro之Picker,PickerView基础用法

1.Picker 直接上代码 import Taro,{Component} from "tarojs/taro"; import {View,Picker} from tarojs/components import { AtIcon } from taro-ui import { putKey } from /src/utils/storage-utilsclass AgriculturePolicy extends Component{constructor (prop…

部署Zabbix Agents添加使能监测服务器_Linux平台_Yum源/Archive多模式

Linux平台 一、从yum源脚本安装部署Zabbix-Agent,添加Linux Servers/PC 概述 Zabbix 主要有以下几个组件组成: Zabbix Server:Zabbix 服务端,Zabbix的核心组件,它负责接收监控数据并触发告警,还负责将监控数据持久化到数据库中。 Zabbix Agent:Zabbix客户端,部署在被监…

【综述】二维半导体和晶体管在集成电路未来应用

一篇关于二维半导体和晶体管在集成电路未来应用的综述文章。 文章由Lei Yin、Ruiqing Cheng、Jiahui Ding、Jian Jiang、Yutang Hou、Xiaoqiang Feng、Yao Wen和Jun He*共同撰写&#xff0c;发表在《ACS Nano》2024年第18卷上。 Figure 1: CMOS晶体管的演变 描述了CMOS晶体管…

8 克隆虚拟机

后期集群我们需要使用多台服务器&#xff0c;此处我们先克隆三台&#xff0c;master,slave01,slave02. 1.先关闭模版虚拟机。再选择 模版虚拟机hadoop100右击--》管理 --》克隆 2.下图中特别注意&#xff1a;建议使用集群的名字作为虚拟机名称。目前克隆主机master. 以上步骤完…

全域电商数据实现高效稳定大批量采集♀

全域电商&#xff0c;是近几年的新趋势&#xff0c;几乎所有商家都在布局全域&#xff0c;追求全域增长。但商家发现&#xff0c;随着投入成本的上涨&#xff0c;利润却没有增加。 其中最为突出的是——商家为保证全域数据的及时更新&#xff0c;通过堆人头的方式完成每日取数任…

怎么自己打印物流货运单,物流打印定制软件

怎么自己打印物流货运单&#xff0c;物流打印定制软件 一、前言 以下软件操作教程以 佳易王物流单打印登记查询系统V17.0为例说明 件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 1、物流货运单打印有两种模式 一个是直接打印&#xff0c;可以在空白纸上…