SVM算法的python实现

1.随机生成几簇点

随机生成以(1,1,1)(5,5,5)(6,0,0)(10,10,10)(0,6,0)(10,10,2)为中心的6组散点坐标。

要求每个中心20个点,每个中心生成的随机点拥有同样的标签0~5,坐标为整数,存入exel文件。

import pandas as pd
import numpy as np# 设置中心点和标签
centers = [(1, 1, 1), (5, 5, 5), (6, 0, 0), (10, 10, 10), (0, 6, 0), (10, 10, 2)]
labels = [0, 1, 2, 3, 4, 5]# 设置每个中心生成的点数
points_per_center = 20# 设置最大距离
max_distance = 3# 生成散点坐标
points = []
for center, label in zip(centers, labels):for _ in range(points_per_center):distance = np.random.uniform(0, max_distance)phi = np.random.uniform(0, 2 * np.pi)theta = np.random.uniform(0, np.pi)x = center[0] + distance * np.sin(theta) * np.cos(phi)y = center[1] + distance * np.sin(theta) * np.sin(phi)z = center[2] + distance * np.cos(theta)points.append((int(x), int(y), int(z), label))# 创建DataFrame
df = pd.DataFrame(points, columns=['X', 'Y', 'Z', 'Label'])# 保存到Excel文件
df.to_excel('random_points.xlsx', index=False)

效果图

 2.将生成的点簇可视化

import pandas as pd
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D# 读取Excel文件
df = pd.read_excel('random_points.xlsx')# 3D散点图
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111, projection='3d')# 遍历每个标签,绘制对应的散点图
for label in df['Label'].unique():label_data = df[df['Label'] == label]ax.scatter(label_data['X'], label_data['Y'], label_data['Z'], label=f'Label {label}')ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax.set_title('Random Points Visualization')plt.show()

 效果图

3.使用SVM分类及可视化

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score# 读取Excel文件
df = pd.read_excel('random_points.xlsx')# 准备数据
X = df[['X', 'Y', 'Z']].to_numpy()  # 将DataFrame转换为numpy数组
y = df['Label']# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 合并训练集和测试集数据
X_combined = np.vstack([X_train, X_test])
y_combined = pd.concat([y_train, y_test])# 训练SVM模型
svm_model = SVC(kernel='linear', decision_function_shape='ovo')  # 使用一对一策略
svm_model.fit(X_train, y_train)# 预测测试集
y_pred = svm_model.predict(X_test)# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f'Test Accuracy: {accuracy:.2f}')# 可视化分类结果
fig = plt.figure(figsize=(12, 10))
ax = fig.add_subplot(111, projection='3d')# 绘制所有数据点
for label in y_combined.unique():label_data = X_combined[y_combined == label]ax.scatter(label_data[:, 0], label_data[:, 1], label_data[:, 2], label=f'Combined Label {label}')
# Combined Label表示 训练和测试放一张图# 绘制分类平面
xx, yy = np.meshgrid(np.linspace(X[:, 0].min(), X[:, 0].max(), 50),np.linspace(X[:, 1].min(), X[:, 1].max(), 50))
zz = np.zeros_like(xx)for i in range(len(xx)):for j in range(len(yy)):decision_function_values = svm_model.decision_function([[xx[i, j], yy[i, j], zz[i, j]]])zz[i, j] = decision_function_values.argmax()ax.plot_surface(xx, yy, zz, alpha=0.3, color='gray')ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax.set_title('SVM Classification (One-vs-One)')plt.legend()
plt.show()# 连续输入坐标并进行预测
while True:user_input_x = input('Enter X coordinate (or "q" to quit): ')if user_input_x.lower() == 'q':breaktry:user_input_x = float(user_input_x)user_input_y = float(input('Enter Y coordinate: '))user_input_z = float(input('Enter Z coordinate:'))# 预测用户输入坐标的类别user_input_data = np.array([[user_input_x, user_input_y, user_input_z]])user_prediction = svm_model.predict(user_input_data)print(f'The predicted label for the user input coordinates is: {user_prediction[0]}')except ValueError:print('Invalid input. Please enter numerical values for coordinates.')

可视化效果

键盘输入进行测试

 参考

chatgpt3.5

https://chat.openai.com/

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【NodeJS JS】动态加载字体的各方式及注意事项;

首先加载字体这个需求基本只存在于非系统字体,系统已有字体不需要加载即可直接使用; 方案1:创建 style 标签,写入 font-face{font-family: xxx;src: url(xxx)} 等相关字体样式;将style标签添加到body里;方…

windows用mingw(g++)编译opencv,opencv_contrib,并install安装

windows下用mingw编译opencv貌似不支持cuda,选cuda会报错,我无法解决,所以没选cuda,下面两种编译方式支持。 如要用msvc编译opencv,参考我另外一篇文章 https://blog.csdn.net/weixin_44733606/article/details/1357…

操作系统--Linux虚拟内存管理

​一、什么是虚拟内存地址 收货地址是一个虚拟地址,它是人为定义的 而我们的城市,小区,街道是真实存在的,他们的地理位置就是物理地址 以 Intel Core i7 处理器为例,64 位和32位虚拟地址的格式为: 二、为什…

独立站怎么建设对seo好?

现如今市面上就有不少开源的建站程序可供挑选,哪怕你不懂技术,不懂代码,也能建自己的独立站,效果比不少所谓的用自己技术开发的站都要好,本身做一个网站不难,但你做网站的目的是什么?是为了在搜…

【代码随想录-数组】二分查找

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

JDWP原理分析与漏洞利用

JDWP(Java DEbugger Wire Protocol):即Java调试线协议,是一个为Java调试而设计的通讯交互协议,它定义了调试器和被调试程序之间传递的信息的格式。说白了就是JVM或者类JVM的虚拟机都支持一种协议,通过该协议,Debugger 端可以和 target VM 通信,可以获取目标 VM的包括类…

选择海外云手机需要考虑什么?

随着跨境电商行业的蓬勃发展,企业们纷纷寻找提升平台流量和广告投放效果的方法,这已成为业界的当务之急。传统的宣传模式在国内受到直播和链接带货等新兴方式的冲击,而在国外,类似的趋势也在悄然兴起,呈现出广阔的发展…

安全防御第三次作业

作业:拓扑图及要求如下图 注:server1是ftp服务器,server2是http服务器 lsw1: 其中g0/0/0口为trunk 实现 1,生产区在工作时间内可以访问服务器区,仅可以访问http服务器 验证: 2,办公…

RedisInsight详细安装教程

简介 RedisInsight 是一个直观高效的 Redis GUI 管理工具,它可以对 Redis 的内存、连接数、命中率以及正常运行时间进行监控,并且可以在界面上使用 CLI 和连接的 Redis 进行交互(RedisInsight 内置对 Redis 模块支持)。 RedisIn…

Mac M1 Parallels CentOS7.9 Deploy 禅道

禅道官网下载地址: https://www.zentao.net/download/max4.10-83276.html 一、官网下载 二、解压安装 将下载好的包传至CentOS7.9虚拟机 zhinian192 ~ % scp Downloads/ZenTaoPMS-max4.10-zbox_arm64.tar.gz root10.211.55.36:~ ZenTaoPMS-max4.10-zbox_arm64.tar.gz …

C#,入门教程(31)——预处理指令的基础知识与使用方法

上一篇: C#,入门教程(30)——扎好程序的笼子,错误处理 try catchhttps://blog.csdn.net/beijinghorn/article/details/124182386 Visual Studio、C#编译器以及C#语法所支持的预处理指令,绝对是天才设计。 编译程序的时候会发现&am…

计算机网络体系架构认知--网络协议栈

文章目录 一.计算机网络分层架构各协议层和计算机系统的联系从整体上理解计算机网络通信计算机网络通信的本质 二.Mac地址,IP地址和进程端口号三.局域网通信与跨局域网通信局域网通信跨局域网通信全球互联的通信脉络 四.网络编程概述 一.计算机网络分层架构 实现计算机长距离网…

STP生成树协议

生成树协议(spanning tree protocol) 是一种工作在OSI网络模型中第二层(数据链路层)的通信协议,是一种由交换机运行的,基本应用是防止交换机冗余链路产生的环路,用于确保以太网中无环路的逻辑拓扑结构,从而避免了广播风暴&#x…

什么是 Web3.0

什么是Web3.0 对于 Web3.0 的解释网上有很多,目前来说 Web3.0 是一个趋势,尚未有明确的定义。我们今天讨论下几个核心的点,就能很好的理解 Web3.0 要解决哪些问题 谁创造数据,这里的数据可以是一篇博客,一段视频&…

计算机网络——网络层(1)

计算机网络——网络层(1) 小程一言专栏链接: [link](http://t.csdnimg.cn/ZUTXU) 网络层:数据平面网络层概述核心功能协议总结 路由器工作原理路由器的工作步骤总结 网际协议IPv4主要特点不足IPv6主要特点现状 通用转发和SDN通用转发SDN(软件…

插入排序和希尔排序

. 个人主页:晓风飞 专栏:数据结构|Linux|C语言 路漫漫其修远兮,吾将上下而求索 文章目录 插入排序基本思想:代码实现; 希尔排序基本思想:在这里插入图片描述多组并排优化《数据结构(C语言版)》--- 严蔚敏希…

OpenCV笔记之图像处理中遮罩和掩模的关系

OpenCV笔记之图像处理中遮罩和掩模的关系 code review 文章目录 OpenCV笔记之图像处理中遮罩和掩模的关系1.遮罩详解遮罩的创建遮罩的应用遮罩的主要应用遮罩的类型如何创建遮罩遮罩在图像处理中的应用方式 2.遮罩和掩模的关系 1.遮罩详解 在图像处理中,遮罩&#…

6 时间序列(不同位置的装置如何建模): GRU+Embedding

很多算法比赛经常会遇到不同的物体产生同含义的时间序列信息,比如不同位置的时间序列信息,风力发电、充电桩用电。经常会遇到该如此场景,对所有数据做统一处理喂给模型,模型很难学到区分信息,因此设计如果对不同位置的…

Flume1.9基础学习

文章目录 一、Flume 入门概述1、概述2、Flume 基础架构2.1 Agent2.2 Source2.3 Sink2.4 Channel2.5 Event 3、Flume 安装部署3.1 安装地址3.2 安装部署 二、Flume 入门案例1、监控端口数据官方案例1.1 概述1.2 实现步骤 2、实时监控单个追加文件2.1 概述2.2 实现步骤 3、实时监…

大模型学习笔记一:大模型应用开发基础

文章目录 一、大模型一些概念介绍 一、大模型一些概念介绍 1)产品和大模型的区别(产品通过调用大模型来具备的能力) 2)AGI定义 概念:一切问题可以用AI解决 3)大模型通俗原理 根据上文,猜测下…