基于SVM的鸢尾花数据集回归分析

news2024/11/28 14:16:36

目录

  • 1. 作者介绍
  • 2. SVM支持向量机算法
    • 2.1 鸢尾花数据集
    • 2.2 鸢尾花数据集可视化
      • 2.2.1 散点图
      • 2.2.2 箱型图
      • 2.2.3 三维散点图(3D)
  • 3. SVM算法实现
    • 3.1 完整代码
    • 3.2 运行结果
    • 3.3 问题与分析

1. 作者介绍

张佳伦,男,西安工程大学电子信息学院,2022级研究生
研究方向:机器视觉与人工智能
电子邮件:1091418175@qq.com

陈梦丹,女,西安工程大学电子信息学院,2022级硕士研究生,张宏伟人工智能课题组
研究方向:机器视觉与人工智能
电子邮件:1169738496@qq.com

2. SVM支持向量机算法

支持向量机(Support Vector Machine, SVM),其决策边界是对学习样本求解的最大边距超平面。

图(1)为决策边界与支持向量。
在这里插入图片描述

图(2)为软间隔与硬间隔
在这里插入图片描述
SVM可以通过核技巧(kernel Trick)进行非线性分类,是常见的核学习(kernel learning)方法之一。
在这里插入图片描述
常见的核函数:

Rbf高斯核函数:
在这里插入图片描述
Sigmoid核函数:
在这里插入图片描述

2.1 鸢尾花数据集

在这里插入图片描述
利用.info()查看数据集的整体信息,可以查看到数据集的标签种类以及对应的标签名称与标签个数。

# 使用.info()查看数据的整体信息
iris_features.info()

在这里插入图片描述
利用.value_counts()查看数据集样本的种类,可以查看到数据集对应样本种类的编号和对应样本个数。
在这里插入图片描述

2.2 鸢尾花数据集可视化

2.2.1 散点图

合并标签和特征信息,将数据集的标签特征与样本种类结合起来进行二维的可视化分布。如鸢尾花数据集有四个特征标签以及三种样本种类,将三种样本种类分布,分别映射到对应的二维特征坐标中。且当坐标对应为同一纬度时,及可视各个样本在本纬度对应的分布数量。可以在各个纬度的二维组合下观察到每个样本的特征分布。

# 合并标签和特征信息
iris_all = iris_features.copy() ##进行浅拷贝,防止对于原始数据的修改
iris_all['target'] = iris_target
sns.pairplot(data=iris_all,diag_kind='hist', hue= 'target')  # 特征与标签组合的散点可视化
plt.show()

在这里插入图片描述

2.2.2 箱型图

箱线图是针对单个特征纬度的样本种类分布,通过箱线图即可方便的观察到数据集在某个单一特征下,样本种类的一维特征分布以及各个样本种类之间的可分离度。

for col in iris_features.columns:
    sns.boxplot(x='target', y=col, saturation=0.5,palette='pastel', data=iris_all)
    plt.title(col)
plt.show()

在这里插入图片描述

2.2.3 三维散点图(3D)

选取其三个特征绘制三维散点图。根据选中的三个纬度的特征即可对数据集中的样本种类进行三维建模。通过改变选中的三个特征,和根据箱线图的单一纬度特征的样本可分离度,可以在不同的特征纬度下对数据集进行3D建模,并得到分离度最高的3D建模结果。

# 选取其前三个特征绘制三维散点图
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure(figsize=(10,8))
ax = fig.add_subplot(111, projection='3d')
iris_all_class0 = iris_all[iris_all['target']==0].values
iris_all_class1 = iris_all[iris_all['target']==1].values
iris_all_class2 = iris_all[iris_all['target']==2].values
# 'setosa'(0), 'versicolor'(1), 'virginica'(2)
ax.scatter(iris_all_class0[:,0], iris_all_class0[:,1], iris_all_class0[:,2],label='setosa')
ax.scatter(iris_all_class1[:,0], iris_all_class1[:,1], iris_all_class1[:,2],label='versicolor')
ax.scatter(iris_all_class2[:,0], iris_all_class2[:,1], iris_all_class2[:,2],label='virginica')
plt.legend()
plt.show()

在这里插入图片描述

3. SVM算法实现

3.1 完整代码

import numpy as np
import pandas as pd
import pylab
from sklearn import datasets
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.svm import LinearSVC
from sklearn.svm import SVC
from matplotlib.colors import ListedColormap
import matplotlib.pyplot as plt
import seaborn as sns
from matplotlib.axes._axes import _log as matplotlib_axes_logger
matplotlib_axes_logger.setLevel('ERROR')
from sklearn.datasets import load_iris

data = load_iris() # 得到数据特征
iris_target = data.target # 得到数据对应的标签
iris_features = pd.DataFrame(data=data.data, columns=data.feature_names) # 利用Pandas转化为DataFrame格式

iris_features.info()

pd.Series(iris_target).value_counts()

#### 数据可视化 ####
# 散点图
# 合并标签和特征信息
iris_all = iris_features.copy() ##进行浅拷贝,防止对于原始数据的修改
iris_all['target'] = iris_target
sns.pairplot(data=iris_all,diag_kind='hist', hue= 'target')  # 特征与标签组合的散点可视化
plt.show()

# 箱型图
for col in iris_features.columns:
    sns.boxplot(x='target', y=col, saturation=0.5,palette='pastel', data=iris_all)
    plt.title(col)
plt.show()

# 选取其前三个特征绘制三维散点图
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure(figsize=(10,8))
ax = fig.add_subplot(111, projection='3d')
iris_all_class0 = iris_all[iris_all['target']==0].values
iris_all_class1 = iris_all[iris_all['target']==1].values
iris_all_class2 = iris_all[iris_all['target']==2].values
# 'setosa'(0), 'versicolor'(1), 'virginica'(2)
ax.scatter(iris_all_class0[:,0], iris_all_class0[:,1], iris_all_class0[:,2],label='setosa')
ax.scatter(iris_all_class1[:,0], iris_all_class1[:,1], iris_all_class1[:,2],label='versicolor')
ax.scatter(iris_all_class2[:,0], iris_all_class2[:,1], iris_all_class2[:,2],label='virginica')
plt.legend()
plt.show()

iris=datasets.load_iris()
a,b=0,2
X_reduced = iris.data[:,:4]
X = X_reduced[:,[a,b]]        #二维可视化,即只取两个属性
y = iris.target     #由上述程序结果可知取值为0,1,2
x_min,x_max = X[:,0].min()-.5, X[:,0].max()+.5   #x值的最小值和最大值分别是第一列最小值和最大值-5和+5
y_min,y_max = X[:,1].min()-.5, X[:,1].max()+.5   #y值的最小值和最大值分别是第二列最小值和最大值-5和+5
plt.figure(2,figsize=(8,6))
plt.clf
plt.scatter(X[:,0],X[:,1],c=y,cmap=plt.cm.Set1,edgecolor='w')  #绘制散点图,c即color,cmap是将y不同的值画出不同颜色,edgecolor为白色
plt.xlabel(iris.feature_names[a])
plt.ylabel(iris.feature_names[b])
plt.xlim(x_min,x_max)    #x轴的作图范围
plt.ylim(y_min,y_max)    #x轴的作图范围
plt.xticks(())     #x轴的刻度内容的范围
plt.yticks(())    #y轴的刻度内容的范围

X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.3,random_state=0)
sc = StandardScaler()
sc.fit(X_train)  #调用训练集训练
X_train_std = sc.transform(X_train)
X_test_std: object = sc.transform(X_test)

def plot_decision_regions(X, y, classifier, test_idx=None, resolution=0.02):
    markers = ('s', 'x', 'o', '^', 'v')
    colors = ('red', 'blue', 'lightgreen', 'gray', 'cyan')
    cmap = ListedColormap(colors[:len(np.unique(y))])
    x1_min, x1_max = X[:, 0].min() - 1, X[:, 0].max() + 1
    x2_min, x2_max = X[:, 1].min() - 1, X[:, 1].max() + 1
    xx1, xx2 = np.meshgrid(np.arange(x1_min, x1_max, resolution),
                           np.arange(x2_min, x2_max, resolution))
    Z = classifier.predict(np.array([xx1.ravel(), xx2.ravel()]).T)
    Z = Z.reshape(xx1.shape)
    plt.contourf(xx1, xx2, Z, alpha=0.4, cmap=cmap)
    plt.xlim(xx1.min(), xx1.max())
    plt.ylim = (xx2.min(), xx2.max())
    X_test, y_test = X[test_idx, :], y[test_idx]
    for idx, cl in enumerate(np.unique(y)):
        plt.scatter(x=X[y == cl, 0], y=X[y == cl, 1], alpha=0.8, c=cmap(idx), marker=markers[idx], label=cl)
    if test_idx:
        X_test, y_test = X[test_idx, :], y[test_idx]
        plt.scatter(X_test[:, 0], X_test[:, 1],c='black', alpha=0.8, linewidths=1, marker='o', s=10, label='test set')
        
# 调整2*2图像大小比例
plt.figure(2,figsize=(10,8))

pylab.subplot(2, 2, 1)   # 子图像为2*2的第一个
X_combined_std = np.vstack((X_train_std, X_test_std))
y_combined = np.hstack((y_train, y_test))
svm = SVC(kernel='linear', random_state=0, C=1.0)  # 调用SVM核函数,’linear’核函数,以及两个超参数
svm.fit(X_train_std, y_train)   # 训练
plot_decision_regions(X_combined_std, y_combined, classifier=svm, test_idx=range(105,150))
plt.ylabel(iris.feature_names[b])
plt.title('Linear')

pylab.subplot(2, 2, 2)
X_combined_std = np.vstack((X_train_std, X_test_std))
y_combined = np.hstack((y_train, y_test))
svm = SVC(kernel='poly',random_state=0, degree=2, gamma=0.3, C=100)
# 调用SVM核函数,’poly’以及四个参数,多项式核函数专属的超参数d
svm.fit(X_train_std, y_train)  #训练
plot_decision_regions(X_combined_std, y_combined, classifier=svm, test_idx=range(105,150))
plt.title('poly')

pylab.subplot(2, 2, 3)
X_combined_std = np.vstack((X_train_std, X_test_std))
y_combined = np.hstack((y_train, y_test))
svm = SVC(kernel='rbf', random_state=0, gamma=0.9, C=1.5)
svm.fit(X_train_std, y_train)
plot_decision_regions(X_combined_std, y_combined, classifier=svm, test_idx=range(105,150))
plt.ylabel(iris.feature_names[b])
plt.xlabel(iris.feature_names[a])
plt.title('rbf')

pylab.subplot(2, 2, 4)
X_combined_std = np.vstack((X_train_std, X_test_std))
y_combined = np.hstack((y_train, y_test))
svm = SVC(kernel='sigmoid', random_state=0, gamma=0.3, C=50)
svm.fit(X_train_std, y_train)
plot_decision_regions(X_combined_std, y_combined, classifier=svm, test_idx=range(105,150))
plt.xlabel(iris.feature_names[a])
plt.title('sigmoid')

plt.show()

3.2 运行结果

在SVM分类中,将特征标签设置为变量,通过改变标签变量可以得到不同纬度的样本种类的二维特征分布,再通过四种不同的SVM核函数,对其进行分类比较,最后调整超参数得到最好的分类核函数和分类结果。

特征0:2二维特征分布图在这里插入图片描述相关参数设置:
Linear : c=1
Poly : degree=2,gamma=0.3,c=100
Rbf : gamma=0.9, c=1.5
Sigmoid : gamma=0.3, c=50.0

特征0:2 经四种不同的SVM核函数处理结果图
在这里插入图片描述
特征0:3 二维特征分布图
在这里插入图片描述
相关参数设置:
Linear : c=1
Poly : degree=3,gamma=0.7,c=10
Rbf : gamma=0.9, c=1.5
Sigmoid : gamma=0.2, c=2.5

特征0:3 经四种不同的SVM核函数处理结果图
在这里插入图片描述
特征0:1 二维特征分布图
在这里插入图片描述相关参数设置:
Linear : c=1
Poly : degree=2,gamma=0.8,c=10
Rbf : gamma=0.9, c=1.5
Sigmoid : gamma=0.3, c=1.0

特征0:1 经四种不同的SVM核函数处理结果图在这里插入图片描述
特征1:2 二维分布图
在这里插入图片描述
相关参数设置:
Linear : c=1
Poly : degree=3, gamma=0.7, c=5
Rbf : gamma=0.9, c=1.5
Sigmoid : gamma=0.2, c=2.5

特征1:2 经四种不同的SVM核函数处理结果图
在这里插入图片描述
特征1:3 二维特征分布图
在这里插入图片描述
相关参数设置:
Linear : c=1
Poly : degree=3, gamma=0.9, c=1.5
Rbf : gamma=0.9,c=10
Sigmoid : gamma=0.2,c=2.5

特征1:3 经四种不同的SVM核函数处理结果图
在这里插入图片描述
特征2:3 二维特征分布图
在这里插入图片描述
相关参数设置:
Linear : c=1
Poly : degree=3, gamma=0.9, c=3
Rbf : gamma=0.9,c=50
Sigmoid : gamma=0.5,c=5

特征2:3 经四种不同的SVM核函数处理结果图
在这里插入图片描述

3.3 问题与分析

(1)特征超出标签数字索引,应为[0,1,2,3]。
在这里插入图片描述
(2)图像排版中,pylab.subplot(2,2,2):第一个2为行数,第二个2为列数,第三个为子图的顺序故如上图程序应更为pylab.subplot(1,4,…)
在这里插入图片描述
(3)在选取核函数是应注意核函数的简化名称,不应写错(注意首字母大小写)
在这里插入图片描述
(4)在运行降维图像时,更改维度特征会报错,但图依然可以更改出来。为了消除报错,在每次运行完后更改维度特征时,需要重新启动Python核
在这里插入图片描述

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

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

相关文章

androidstudio ffmpeg 音频转换

java-ffmpeg-音频转换 需求描述功能流程所需条件步骤步骤1步骤2步骤3一些我使用中遇到的异常 需求描述 项目中的语音唤醒后的语音识别人声检测一直是一个很令我头痛的问题,之前因为对各种类型的工具包使用不熟练,以及时间问题,一直没有根治这个人声检测体验不好的问题,之前的解…

不同品牌或型号的单片机

以下是一些常见的单片机品牌和型号: 微控制器(Microchip):PIC系列(如PIC16F877A、PIC18F4550) 瑞萨电子(Renesas):RX系列(如RX231、RX65N)需要资…

Termius 最好用的SSH 连接工具

Termius 最好用的SSH 连接工具 一、环境准备二、配置2.1 terminus 安装2.2 删除自动更新2.3 修改用户信息 三、使用四、页面展示 该工具 mac os 可直接使用 本文只展示 windows 使用步骤,本教程使用的 termius 版本为 7.59.6 一、环境准备 termius 下载 官网下载地址…

ubuntu上安装docker报错

执行docker命令的时候报错如下: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? 为了解决这个问题,看了一些帖子有的说重启docker.service服务或者看该服务是否已经正常启动,结果网上…

超实用!新手项目经理掏心窝总结的经验

像项目这样复杂的环境中,往往会出现错误判断、沟通不畅、管理不善以及最常见的错误。因此,项目管理需要项目经理有广泛的经验、洞察力和技能,无论是规划、组织还是有效领导团队,以在规定的时间和预算内实现项目目标。在这种情况下…

基于BAT指令定时备份Oracle并发送邮件

前言 在企业级应用程序中,数据是非常重要的资源。因此,我们需要定期备份数据以确保其安全性和完整性。在Oracle数据库中,我们可以使用多种方法来备份数据,其中一种方法是使用BAT脚本来进行自动化备份。 在本文中,我们…

【AI实时变声器,声音甜甜的小姐姐背后竟是抠脚大汉】

前言 这是一款基于AI算法的实时变声器,如果你不懂AI也没事,直接使用我提供的一键安装包 链接:https://pan.baidu.com/s/1f3X6JdBVOgeTNPf0B3CRKg 提取码:k5v2 变声器安装使用 有两款变声器,都是基于RVC做的&#xf…

ctfshow——web入门 SSRF

web351web352web353web354web355web356web357web358web359web360 web351 通过hackbar post提交 urlhttp://127.0.0.1/flag.php 获得flag web352 将127.0.0.1和localhost给过滤了,但并不影响post提交 post urlhttp://127.0.0.1/flag.php web353 过滤了localhost和1…

python基础学习1

pyhton数据分析的优势: ①语法简单精炼 ②有很强大的库 ③功能强大 ④适用于构建生产系统 ⑤胶水语言 python数据分析常用的类库: ①IPython------科学计算标准工具集的组成部分 ②NumPy------python科学计算的基础包 ③SciPy--------解…

【手撕Spring源码】深度理解SpringBoot

文章目录 Tomcat内嵌容器Tomcat 基本结构创建Tomcat内嵌容器内嵌Tomcat集成Spring 容器 Boot 自动配置什么是自动配置类自动配置类原理Aop自动配置DataSource自动配置MyBatis自动配置事务自动配置MVC自动配置条件装配 附:注解小总EnableConfigurationPropertiesCond…

RWKV配上ChatGPTBox让我们在浏览器中感受AI带来的魅力

这次我们来讲讲RWKV搭配ChatGPTBox结合使用带来的功能体验,这两个项目都是同一个大神创建的,完全可以无缝搭配进行使用。 以下是我之前在本地部署了AI模型RWKV的教程,如果还没有本地部署过AI的童鞋可以查看我之前发布的教程,在自…

在线聊天项目

人事管理项目-在线聊天 后端接口实现前端实现 在线聊天是一个为了方便HR进行快速沟通提高工作效率而开发的功能,考虑到一个公司中的HR并不多,并发量不大,因此这里直接使用最基本的WebSocket来完成该功能。 后端接口实现 要使用WebSocket&…

【NLP】有限自动机的KMP算法

目录 一、说明 二、无策略直接匹配法 2.1 简单粗暴的无脑匹配: 2.2 跳过外循环的思路 2.3 跳过内循环的思路 2.4 KMP算法时间分析 三、KMP有限状态机 四、结论 一、说明 KMP算法问题:给定一个(短)模式和一个(长&#xff…

PCB材料选择与性能比较

PCB板被广泛应用于电子行业,作为电子设备的重要组成部分之一,负责连接各种电子元件。PCB板的性能直接影响着电子设备的质量和稳定性。而PCB板的材料选择则是影响PCB板性能的关键因素之一。本文将对常见PCB材料进行比较分析,以便于选择适合的材…

西电网课UMOOCs《英美概况》1-15单元课后答案

声明:本文CSDN作者原创投稿文章,未经许可禁止任何形式的转载,原文链接 如果图片挂了,可以移步至我的博客西电网课UMOOCs《英美概况》1-15单元课后答案 - 小木槌 文章目录 Quiz for Unit 1Quiz for Unit 2Quiz for Unit 3Quiz for…

C/C++基础补充

1. NULL和nullptr 有如下代码&#xff1a; void func(int a) {cout << "func(int)" << endl; }void func(int* p) {cout << "func(int*)" << endl; }void test() {func(0); // func(int);func(NULL); // func(int);fun…

带你探索400G光模块测试

随着移动互联网、云计算、大数据等技术快速发展&#xff0c;数据中心及云计算资源需求的爆发式地增长&#xff0c;核心网传输带宽需求大幅度的提升&#xff0c;同时也带动了超大规模云数据中心的发展&#xff0c;对数据中心内部和之间的互联的光模块带宽需求呈快速增长&#xf…

ChatGPT 使用 拓展资料:吴恩达大咖 Building Systems with the ChatGPT API 思维链

ChatGPT 使用 拓展资料:吴恩达大咖 Building Systems with the ChatGPT API 思维链 在本节中,我们将重点讨论要处理输出的任务,这些任务通常通过一系列步骤来获取输入并生成有用的输出。有时,在回答特定问题之前,模型详细推理问题是很重要的。如果你参加了我们之前为开发人…

项目管理软件大对比:2023年15款最佳项目管理工具

简单的项目只需要一个电子表格清单可能就管理好了&#xff0c;而复杂的项目则需要适当的规划、任务分配、设定截止日期&#xff0c;以确保每个人都遵守它们、大家进行紧密的协作&#xff0c;并追踪所花费的时间。 让项目量化、可视化&#xff0c;资源合理分配、更容易的协作和…

x265的DCT

文章目录 DCT相关背景知识DCT变换系数矩阵32x32变换矩阵系数其他尺寸变换矩阵系数 变换计算过程流程图 代码实现数据残差变换系数对应残差 我的简单实现实现细节实现代码 x265对应代码实现openHEVC代码实现 DCT相关背景知识 DCT变换系数矩阵 标准提供了32x32的系数矩阵&#…