pytorch——支持向量机

news/2024/11/20 21:23:13/

1、任务要求

针对已知类别的5张卧室照片(标签为+1)和5张森林照片(标签为-1)所对应的矩阵数据进行分类训练,得到训练集模型;再利用支持向量机对另外未知类别的5张卧室照片和5张森林照片数据进行测试分类(二分类),得到分类结果及其准确率。

2、先导入查看基本数据

file file

3、合并数据

将房间的数据和森林的数据进行合并,生成一个真正用于训练的input file

4、模型构建与训练

可以将支持向量机看成一个简单的,只有输入输出层的神经网络。所以直接使用pytroch框架中的神经网络的框架进行构建,并且自行定义出损失函数来达到支持向量机的结果 file

5、结果与可视化

由于原本数据的维度较高,无法直接画出,所以这里先对数据进行PCA降维处理。然后将支持向量机所表示的超平面上的部分点找到也进行一样的处理(随机选取),而后再在二维平面上连成直线(由于降维问题,图像并不完美) file file

6、完整代码

import scipy.io as scio
import torch
import numpy as np
import torch.optim as optimbedroom = scio.loadmat('bedroom')
forest = scio.loadmat('forest')
labels = scio.loadmat('labelset')input_data = np.concatenate((bedroom['bedroom'], forest['MITforest']), axis=0) def hinge_loss(scores, labels):# 计算Hinge Lossloss = torch.max(torch.zeros_like(scores), 1 - scores * labels)return torch.mean(loss)#构建网络模型
x = torch.tensor(input_data,dtype=float)
y = torch.tensor(labels['lableset'],dtype=float)
#权重和偏差
weights1 = torch.randn((15,1),dtype=float,requires_grad=True)
bias1 = torch.randn(1,dtype=float,requires_grad=True)learning_rate = 0.001
losses = []for i in range(0,1000):predictions = x.mm(weights1) + bias1#计算损失loss = hinge_loss(predictions,y)losses.append(loss)if i%100==0:print(f'loss={loss},epoch={i}')#反向传播loss.backward()#更新参数weights1.data.add_(-learning_rate*weights1.grad.data)bias1.data.add_(-learning_rate*bias1.grad.data)#清空weights1.grad.data.zero_()bias1.grad.data.zero_()import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn.manifold import TSNE
from sklearn.svm import SVC
color = []
for i in labels['lableset']:if i == 1:color.append('red')else:color.append('blue')# 设置随机种子,以确保每次运行代码时生成的随机数相同(可选步骤)
np.random.seed(42)# 生成随机的 15 维向量组
num_samples = 100  # 设置生成向量组的数量
dimensionality = 15  # 向量的维度random_vectors = np.random.rand(num_samples, dimensionality)        
print(random_ve)# 使用PCA降维并可视化数据
pca = PCA(n_components=2)  # 将数据降到2维
data_pca = pca.fit_transform(input_data)plt.scatter(data_pca[:, 0], data_pca[:, 1], c=color, cmap='viridis', marker='o')plt.title('PCA Visualization of Data')
plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')
plt.colorbar()
plt.show()

本文由博客一文多发平台 OpenWrite 发布!


http://www.ppmy.cn/news/1273468.html

相关文章

C++学习笔记(十二)------is_a关系(继承关系)

你好,这里是争做图书馆扫地僧的小白。 个人主页:争做图书馆扫地僧的小白_-CSDN博客 目标:希望通过学习技术,期待着改变世界。 提示:以下是本篇文章正文内容,下面案例可供参考 文章目录 前言 一、继承关系…

Pycharm 如何更改成中文版| Python循环语句| for 和 else 的搭配使用

🌈write in front🌈 🧸大家好,我是Aileen🧸.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流. 🆔本文由Aileen_0v0🧸 原创 CSDN首发🐒 如…

如何从 iPhone 上恢复已删除的照片教程分享

您是否错误地删除了 iPhone 上的错误照片?或者您可能已将手机恢复出厂设置,但现在所有照片都消失了?如果您现在遇到这样的情况,我们可以为您提供解决方案。 在本文中,我们将向您展示七种数据恢复方法,可以…

AUTOSAR组织引入了Rust语言的原因是什么?有哪些好处?与C++相比它有什么优点?并推荐一些入门学习Rust语言链接等

AUTOSAR(汽车开放系统架构)是一个由汽车制造商、供应商和其他来自电子、半导体和软件行业的公司组成的全球发展伙伴关系,自2003年以来一直致力于为汽车行业开发和引入开放、标准化的软件平台。 AUTOSAR 最近宣布成立一个新的工作组,用于探索在汽车软件中使用 Rust 编程语言…

04_Web框架之Django一

Web框架之Django一 学习目标和内容 1、能够描述Django的作用 2、能够使用Django创建应用 3、能够使用GET和POST请求方式进行传参 4、能够使用Django的函数式方法定义视图 5、能够进行Django的配置文件修改 6、能够基本使用Django的路由定义 一、Django相关介绍 1、什么是Djan…

Qt通过movetoThread创建线程

创建一个类继承自QObject&#xff1a; Class Thread03 : public QObject 声明槽函数和线程&#xff1a; public slots:void fun();private:QThread m_th; 在构造函数中&#xff1a; Thread03::Thread03() {this->moveToThread(&m_th);m_th.start();qDebug() <&l…

平面上点到直线的距离

文章目录 平面上点到直线的距离 平面上点到直线的距离 设坐标平面上有点 P ( x 1 , y 1 ) P(x_1,y_1) P(x1​,y1​)和直线 l : A x B y C 0 l:AxByC0 l:AxByC0, A , B A,B A,B不全为0点 P P P到直线 l l l的的距离的算法推导如下 作直线 m m m通过点 P ( x 1 , y 1 ) P(x_1…

Vue3知识点总结

目录 一.创建Vue2工程 1.使用 vue-cli 创建 2.使用 vite 创建 二.常用 Composition API setup ref函数 reactive函数 计算属性与监视 1.computed函数 2.watch函数 3.watchEffect函数 一.创建Vue2工程 1.使用 vue-cli 创建 查看vue/cli版本&#xff0c;确保vue/cli版本…