KNN、SVM、MLP、K-means分类实验

news2025/1/16 16:06:07

来源:投稿 作者:摩卡
编辑:学姐

数据集简介

实验使用了两个数据集,一个是经典的鸢尾花数据集(iris)另一个是树叶数据集(leaf)

鸢尾花数据集(iris):

鸢尾花数据集发布于1988年7月1日,该数据集共有150条数据,分为3个类别,为setosa、versicolor、virginica 。

每个类别有50条数据,每条数据有4个特征,分别是sepal_length(范围在4.3-7.9)、sepal_width(范围在2.0-4.4)、petal_length(范围在1.0-6.9)、petal_width(范围在0.1-2.5)。

该数据集没有缺失值,但类别标签是字符串类型,需要进行重新编码(编码时从0开始)

树叶数据集(leaf):

树叶数据集发布于2014年2月24日,该数据集共有340条数据,有30个类别(有的是在同一类别下但是有学名有不同),每条数据有15个特征,没有缺失值,类别标签是数字编码无需进行转换。该数据集还提供RGB格式,可以用于计算机视觉任务。

实验工具介绍

硬件:本实验所使用的CPU型号为inter@i5-10210U 1.6GHz-4.2GHz

软件:所使用的软件为Anaconda + Pycharm

框架:所使用的框架为pytorch、使用机器学习库sklearn、pandas、绘图工具matplotlib

实验步骤简介

模型简介

选取了KNN、SVM、K-means、MLP这几个模型进行实验。

K近邻法(k-nearest neighbor, k-NN)

KNN是一个基本的分类方法,由Cover和Hart在1968年提出。

K近邻算法简单直观:

给定一个训练集T={(x1, y1), (x2, y2), (x3, y3), …… ,(xn, yn)},对于新输入的实例xn+1,在训练集中找到与该实例最相近的k个实例,这k个实例的多数属于某个类,就把该输入实例分到这个类。k-近邻算法可以分为两个部分,一部分是根据训练集构造kd树进行超平面的划分,一部分是根据新输入的实例在kd树中进行搜索来确定新输入实例的类别。

当超平面构造完成,k值选取完毕之后,新实例的标签也就确定了。在进行距离测量时可以选择L1、L2范数,确定新实例所属类别时可以使用多数表决的方法。

支持向量机(support vector machines, SVM)

支持向量机(support vectoe machines)由Cortes和Vapnik提出,最初只是线性支持向量机,适用于可线性分类的数据。后来Boser、Guyon、Vapink又引入了核(kernel)的技巧,提出了非线性支持向量机。

图3 样本点到平面距离

非线性支持向量机(non- linear support vectoe machines)

顾名思义该向量机的决策边界(decision boundary)可以是非线性的。非线性支持向量机在线性向量机的基础上修改了,将修改为。

是一个特征向量,由每个样本与标记点(landmarks)的相似程度构成。

如图中红色的点为标记点(landmarks),绿色点为当前特征点x,蓝色点为其他特征点x_others。是由x与各个标记点的相似程度构成,当使用高斯核时相似程度的度量函数为

K均值聚类(k-means)

聚类算法针对给定的样本,依据它们特征的相似度或者距离,将其归并到若干“类”或“簇”的分析问题。聚类属于无监督学习,只根据样本的相似度或距离将其进行归类。K-means聚类算法属于中心聚类方法,通过迭代,将样本分摊到k个类中,使得样本与其所属的中心最近。

k-means聚类算法分过程为,先随机产生k个聚类中心(centroid),在训练集中按照样本点距离各中心的距离着色(着色过程也就是分类过程)再根据各类别点计算出均值,作为新聚类中心,如此循环直到聚类结束。

根据上述算法描述可知,K-means聚类的优化对象是各个样本点到聚类中心的距离,

其中为每个样本点被分配到的类,为k个聚类中心,为每个样本点被分配到的聚类中心。

多层感知机(multilayer perceptron,MLP)

多层感知机也叫做深度前馈网络(deep feedforward network)、前馈神经网络(feedforward neural network)。神经网络中最基本的单元是神经元(neuron)模型,每个神经元与其他神经元相连接,神经元收到来自n个其他神经元传递过来的输入信号,这些输入信号通过带权重的连接进行传递,神经元接收到的总输入值将与神经元的阈值进行比较,然后通过激活函数(activation function)处理以产生神经元的输出。

假设有如下图所示结构的网络,该网络从左至右分别为input层、hidden1层、hidden2层、output层。

图13 神经网络

约定表示第j层上第i个神经元的激活项,表示第k层的第i个激活项的第j个输入,为激活函数。根据上述前向传播方法可知、、、、为:

图14 梯度下降局部最优、全局最优

鸢尾花数据集处理

2.1数据预处理

鸢尾花数据集:

使用seaborn库绘制数据集的图像进行分析,根据类别进行分类。得到一下图片。根据下面图像的观察,以花萼长度(sepal_length)与花萼宽度(sepal_width)进行分类时没有很好的将数据分开,所以进行数据清洗的时候将这两个类别清洗掉,以此来提高效率。

图15 鸢尾花特征可视化1

进行数据清洗完毕后,进行可视化,得到如下结果。

图16 鸢尾花特征可视化2

因为鸢尾花数据集的标签类别项是字符串类型,需要进行编码,使用LabelEncoder()将其编码为0(setosa)、1(versicolor)、2(virginica)。

使用StandardScaler()进行标准化(使用StandardScaler()进行标准化的数学原理为将数据按其属性减去其均值,然后除以其方差。最后得到的结果是,对每个属性/每列来说所有数据都聚集在0附近,方差值为1)。

2.2划分数据集

将数据集划分为训练集(train_dataset)和测试集(test_dataset)两部分,训练集120条数据,测试集有30条数据。

树叶数据集处理

3.1数据预处理

树叶(leaf)数据集共有14个特征和一个类别属性,计算属性与类别的相关系数,并进行热图的绘制。由下图可知,与类别成正相关的属性由高到底排序为B、M、I、K、C、J、L、N、D、A、E,也可以发现属性H、G、F与属性成负相关。

图17 树叶属性热图1

进行数据清洗,除去成负相关的属性H、G、F,得到的热图如下。

图18 树叶属性热图2

对树叶的类别进行编码使用LabelEncoder() 类别编号从0-29。使用StandardScaler()进行标准化。

3.2划分数据据

将数据集划分为训练集(train_dataset)和测试集(test_dataset)两部分,训练集有210条数据,测试集有130条数据。

鸢尾花数据集分类结果展示

4.1 KNN

使用KNN模型进行分类,测量邻居间距离使用minkowski距离,邻居个数k=5。预测准确率为97%。

图19 KNN分类边界

图20 KNN评价指标

4.2 SVM

使用SVM进行分类,使用的核函数为高斯核(Gaussian kernel ),超参数C=1.0。预测准确率为97%。

图21 SVM分类边界

图22 SVM评价指标

4.3 K-means

使用K-means进行分类,簇的个数n_clusters=3,最大迭代次数max_iter=100。预测准确率为97%

图23 K-means分类边界

图24 K-means评价指标

4.4 MLP

使用MLP进行分类,构造全连接神经网络,该网络有1个输入层,1个输出层,3个隐藏层。输入层有2个神经元(在数据预处理前input神经元为4个),隐藏层神经元个数为16个,输出层神经元个数为3个(因为有3个类别,所以输出神经元个数为3)。

隐藏层激活函数为ReLu函数,使用交叉熵损失函数,优化方法使用梯度下降法(SGD),学习率lr=0.01,momentum=0.9,最大周期max_epoch=50。训练准确率最高为100%,预测准确率最高为97%。

图25 MLP训练、测试损失曲线

图26 MLP评价指标

树叶数据集分类结果

5.1 KNN

使用KNN模型进行分类,由于树叶数据集相比于鸢尾花数据集更复杂,参数的选择也更困难,所以使用网格化搜索最优参数。测量邻居间距离使p=1曼哈顿距离,邻居个数k=4,权重weight=“distance”(权重和距离成反比),预测准确率为65%。

图27 KNN评价指标

5.2 SVM

使用SVM进行分类,同样使用网格化搜索最优参数。使用的核函数为线性核(Linear kernel ),超参数C=1.0、gamma=0.0001。预测准确率为77%。

图28 SVM评价指标

5.3 MLP

使用MLP进行分类,构造全连接神经网络,该网络有1个输入层,1个输出层,3个隐藏层。

输入层有14个神经元(在数据预处理后虽然变成11个但是效果不好),隐藏层神经元个数为23个,输出层神经元个数为30个(因为有30个类别,所以输出神经元个数为30)。

隐藏层激活函数为ReLu函数,还在每层上添加了随即失活,失活率p=0.1,使用交叉熵损失函数,优化方法使用梯度下降法(SGD),学习率lr=0.01,momentum=0.9,最大周期max_epoch=2500。训练准确率最高为93.3%,预测准确率最高为82.3%。

图29 MLP训练、测试损失曲线

图30 MLP评价指标

实验结果比较

6.1鸢尾花数据集

由下图可以看出,MLP、K-means、SVM、KNN四种方法准确率(acc)均为97%。MLP、K-means、SVM、KNN四种方法的平均精度(Avg_precision)均为97%。

MLP、K-means、SVM、KNN四种方法的平均召回率(Avg_recall):SVM、KNN、MLP皆为97%, K-means为95%。

MLP、K-means、SVM、KNN四种方法的平均召回率(Avg_f1-score) :SVM、KNN、MLP皆为97%, K-means为96%。

图31 指标比较1

6.2树叶数据集

由下图可以看出,MLP准确率最高为82%,SVM其次为77%,最后是KNN为65%。MLP平均准确率(Avg_precision)率最高为85%,SVM其次为79%,最后是KNN为69%。

MLP平均准确率(Avg_recall)率最高为82%,SVM其次为77%,最后是KNN为65%。MLP平均准确率(Avg_f1-score)率最高为82%,SVM其次为76%,最后是KNN为66%。

图32 指标比较2

实验结果分析

7.1鸢尾花数据集

通过上面4个模型的accuracy、Avg_precision、Avg_reacll、Avg_f1-score 4个指标的对比可以发现,4个模型对鸢尾花数据集的各项指标都很高。在特征工程部分,将鸢尾花的4个属性进行清洗,只保留了2个重要的属性,使得噪声减少,提高了识别准确率等各项指标。

表1 鸢尾花数据集

7.2树叶数据集

通过上面3个模型的accuracy、Avg_precision、Avg_reacll、Avg_f1-score 4个指标的对比,可以发现,相比于鸢尾花数据集,模型的各项指标都有大幅度的下降。这是由于树叶数据集比鸢尾花数据集更加复杂:类别多(30类)、特征多(14个)。并且在MLP、SVM、KNN三个模型中,MLP表现最好,识别率为82%,其余三项指标也都在82%左右。

表2 树叶数据集

总结

选择了两个数据集进行实验,先在特征较少,数据量较小的鸢尾花数据集上进行实验,所用4个模型均取得较好结果。注意一点,K-means属于无监督学习方法,所以在进行评估的时候将K-means模型预测出来的标签不一定与数据集的标签编码对应。多进行几次聚类,绘制出图像,根据图像选择。

在进行树叶数据集的分类时,因为数据集的特征数较多,想到使用PCA进行数据压缩,将14个特征压缩到10和特征,但是效果并不理想。也采用了计算相关系数的方法,效果也不好。

所以只在原数据的基础上进行了标准化。在MLP、SVM、KNN三个模型中,显然MLP的实验效果更好。在更开始训练MLP时出现过拟合现象,在每一个隐藏层前都添加了随即失活(p=0.1)来避免过拟合的出现。

关注下方《学姐带你玩AI》🚀🚀🚀

论文资料+比赛方案+面试经验all in

码字不易,欢迎大家点赞评论收藏!

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

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

相关文章

客快物流大数据项目(一百一十二):初识Spring Cloud

文章目录 初识Spring Cloud 一、Spring Cloud简介 二、SpringCloud 基础架构图

使用cocopod就那么容易

第一节、配置coopod 打开终端替换ruby镜像源,系统自带的镜像源(gem sources --remove https://rubygems.org/)被墙挡住了或者(https://ruby.taobao.org/)已过期。需替换成新的镜像源。 1).先查看已有的镜像是否是:ht…

Spring Security --- 快速入门

概念 Spring Security是一个功能强大且高度可定制的,主要负责为Java程序提供声明式的 身份验证和访问控制 的安全框架Spring Security的底层主要是 基于 Spring AOP 和 Servlet 过滤器 来实现安全控制它提供了全面的安全解决方案同时授权粒度可以在 Web请求级和方法…

GPT-4 介绍

1 简介 本文根据openAI的2023年3月的《GPT-4 Technical Report 》翻译总结的。 原文地址:https://arxiv.org/pdf/2303.08774.pdf 原文确实没有GPT-4 具体的模型结构,openAI向盈利组织、非公开方向发展了。也没透露硬件、训练成本、训练数据、训练方法等…

攻防世界-web-easyupload

题目描述:一名合格的黑客眼中,所有的上传点都是开发者留下的后门 很简单的一个上传图片的界面。 我们先正常上传一个图片,从提示信息中可以看出我们是上传到了uploads目录下 然后通过bupsuite抓包修改请求,将文件名修改为1.php&a…

spark第七章:SparkStreaming实例

系列文章目录 系列文章目录 spark第一章:环境安装 spark第二章:sparkcore实例 spark第三章:工程化代码 spark第四章:SparkSQL基本操作 spark第五章:SparkSQL实例 spark第六章:SparkStreaming基本操作 spa…

HTML标签结构1.1(标题标签、文本格式化标签)

1&#xff0c;标签结构图&#xff1a; <!-- 加粗标签 双标签 --><strong>文字变粗</strong> <!-- 换行 单标签--><br><!-- 水平分割线 单标签--><hr> HTML标签与标签之间的关系&#xff1a; ①父子关系&#xff08;嵌套关系&…

开源代码只是心里安慰,开源软件如何选择?

大家好&#xff0c;欢迎来到停止重构的频道。 本期我们聊一个比较开放的话题&#xff0c;也是项目中经常遇到的问题。 在实际项目当中&#xff0c;由于开发成本、上线周期等因素&#xff0c;不可避免地需要使用开源软件。 开源软件意味着源码公开。 但是&#xff0c;使用开…

[零刻]EQ12EQ12Pro安装软路由教程

OpenWRT系统安装 安装前准备 1.U盘一个 2.WePE写盘工具 3.Openwrt固件 4.Img镜像写盘工具 安装步骤&#xff1a; 1.首先下载WePE写盘工具&#xff0c;制作一个PE系统安装环境&#xff0c;启动软件后&#xff0c;选择安装PE到U盘 2.插入U盘后&#xff0c;刷新一下设备&#x…

【多微电网】计及碳排放的基于交替方向乘子法(ADMM)的多微网电能交互分布式运行策略研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Vue2 API-源码解析

目录 Vue.extend(option) delimiters functional Vue.component(id, Function | Object) Vue.directive( id, [definition] ) Vue.filter( id, function) Vue.nextTick() Vue.set() Vue.delete(target, index/key) Vue.compile(template) Vue.observable(object) …

相机的内参和外参介绍

注&#xff1a;以下相机内参与外参介绍除来自网络整理外全部来自于《视觉SLAM十四讲从理论到实践 第2版》中的第5讲&#xff1a;相机与图像&#xff0c;为了方便查看&#xff0c;我将每节合并到了一幅图像中 相机与摄像机区别&#xff1a;相机着重于拍摄静态图像&#x…

智安网络|Ddos攻击原理和防范方法,你值得拥有

这几年网络越来越容易崩溃&#xff0c;今天不是这个网站崩&#xff0c;就是那个网站进不去&#xff0c;去年各个省份的健康码也接连崩溃&#xff0c;大家在寒风冷冽的冬天排队几小时做核酸&#xff0c;为什么现在的APP、网页都那么容易崩&#xff1f;还是同样的理由&#xff0c…

[Java·算法·困难]LeetCode10. 正则表达式匹配

每天一题&#xff0c;防止痴呆题目示例分析思路1题解1&#x1f449;️ 力扣原文 题目 给你一个字符串 s 和一个字符规律 p&#xff0c;请你来实现一个支持 . 和 * 的正则表达式匹配。 . 匹配任意单个字符 * 匹配零个或多个前面的那一个元素 所谓匹配&#xff0c;是要涵盖 整…

Doubbo

目录 1.简介 2.架构 3.配置监控中心 4.模拟服务提供者 5.模拟服务消费者 6.消费者的其他配置 6.1协议 6.2启动时检查 6.3超时和重试 6.4负载均衡 7.补充 1.简介 Apache Dubbo是一款高性能的Java RPC框架。其前身是阿里巴巴公司开源的一个高性能、轻量级的开源Java RP…

【Vue-Spring跨域Bug已解决】has been blocked by CORS policy: The value of the······

文章目录一.问题发现二.问题解决过程2.1 询问AI结果2.2 问题解决三.知识点一.问题发现 报错内容&#xff1a; p://localhost:8001/user/login’ from origin ‘http://localhost:3001’ has been blocked by CORS policy: The value of the ‘Access-Control-Allow-Credentia…

我决定给 ChatGPT 做个缓存层 Hello GPTCache

&#x1f31f; 写在前面黄老板的一句【AI 的 iPhone 时刻已至】震撼了半个科技圈。或许&#xff0c;应该把这句话再扩展一下&#xff1a;AI 的 iPhone 时刻早已势不可挡&#xff0c;它不是平静随和地跟大家 say hi&#xff0c;而是作为一个强悍的巨人携着一把名为 ChatGPT 的斧…

leetcode每日一题:数组专练篇第二期(2/2)

&#x1f61a;一个不甘平凡的普通人&#xff0c;日更算法学习和打卡&#xff0c;期待您的关注和认可&#xff0c;陪您一起学习打卡&#xff01;&#xff01;&#xff01;&#x1f618;&#x1f618;&#x1f618; &#x1f917;专栏&#xff1a;每日算法学习 &#x1f4ac;个人…

【LeetCode: 剑指 Offer II 089. 房屋偷盗(打家窃舍) | 暴力递归=>记忆化搜索=>动态规划】

&#x1f34e;作者简介&#xff1a;硕风和炜&#xff0c;CSDN-Java领域新星创作者&#x1f3c6;&#xff0c;保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享&#x1f48e;&#x1f48e;&#x1f48e; &#x1f34e;座右…

Adept AI,颠覆“产品学“的产品

1.三体降临&#xff0c;产品学不存在了&#xff1f; 兄弟们&#xff0c;你们敢想象以后我们都会有用自己的贾维斯吗&#xff1f;我们不需要在安装一大堆APP&#xff0c;不需要适应各种APP交互&#xff0c;只需一句话你能快速达到你想要的目的吗&#xff1f;你能想象那种科幻大…