【算法】一类支持向量机OC-SVM(2)

news2024/11/18 18:53:14

【算法】一类支持向量机OC-SVM(2)

  • 前言
  • 纠正内容
    • 数据集创建方式
    • 适应度函数
  • 新增内容
    • 散点图示例
    • 模型散点图展示


前言

在上则博文【算法】一类支持向量机OC-SVM(1) 中,我们提及到了蜂群算法优化一类支持向量机超参数模型,采用的适应度函数是r方,用的python 自带的 r2_score 模块,后来想想,不太合适,效果不佳,索性简单粗暴,直接比较分类正确的数量,然后进行适应度判断。同时,增加散点图分布来提高查阅效果。基于以上情况,对编写过程进行一个记录,方便后续同样情况的适用。

纠正内容

数据集创建方式

在优化后的模型中,数据集不再用make_blobs自动生成,采用excel 导入的形式展开。

orignal = pd.read_excel('C:/Users/11003189/Desktop/py/data.xlsx', sheet_name='点')  # 读取数据
print(orignal)
col =['X','Y']
col1 =['Unnamed: 3']
data =orignal[col]
target =orignal[col1]
array =target.to_numpy()

这里有一个问题,输出导入的excel 数据,选取其中的列,它的输出格式如下所示:
在这里插入图片描述

这并不是数组,这个要明确,否则编写代码时候会有问题。

通过to_numpy对一列数据进行数组转换,它并不会变成一维数组,而是如下所示:
在这里插入图片描述
因此在数据读取时应该时a[index][0]

适应度函数

将预测的分类结果与真实的分类结果进行比较,然后统计预测正确的个数,并进行适应度返回。

# 适应度函数
def fitness_function(params):
    # 选取X_train 为正类
    # X_train, X_test, _, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
    # y_test = np.where(y_test == 0, -1, 1)  # 将标签转换为-1和1
    nu = params['nu']
    kernel = params['kernel']
    gamma = params['gamma']
    
    # 创建和训练One-Class SVM模型
    ocsvm = OneClassSVM(nu=nu, kernel=kernel, gamma=gamma)
    # ocsvm.fit(X_train)
    ocsvm.fit(data,target)
    
    # 预测测试集并计算ROC AUC分数作为适应度值
    # y_pred = ocsvm.predict(X_test)
    predictions = ocsvm.predict(data)
    # fitness =r2_score(y_test, y_pred)
    count =0
    for index, element in enumerate(predictions):
        if(element ==array[index][0]):
            count=count+1
    return count
    # return fitness

新增内容

散点图示例

跟前面博文画折线图用的模块一样,也是pyplot,只不过用的是scatter方法,示例代码如下:

import matplotlib.pyplot as plt
import numpy as np
import time
 
# 生成数据
x = np.random.rand(10)
y = np.random.rand(10)
# colors = np.random.rand(10)
colors =[1,0,1,1,1,1,1,1,1,1]# 0黑色 1亮色
#colors =['#FFFFFF','#FFFFFF','#FFFFFF','#FFFFFF','#FFFFFF','#FFFFFF','#FFFFFF','#FFFFFF','#FFFFFF','#000000']# 0黑色 1亮色
print(colors)

fig, ax = plt.subplots()
scatter = ax.scatter(x, y, c=colors)
plt.colorbar(scatter)  # 显示颜色条
 
# 动态更新颜色
# for i in range(10):
#     colors = np.random.rand(10)
#     scatter.set_facecolors(plt.cm.viridis(colors))  # 使用viridis colormap
#     plt.draw()
#     time.sleep(0.5)  # 等待0.5秒
 
# plt.savefig('test5.png')
plt.show()
  • 其中colors 的赋值,可以是直接用颜色的RGB 十六进制,也可以用0-1中的数值来指代,只不过1是黄色,0是黑色。

效果图如图所示:
在这里插入图片描述

模型散点图展示

在模型中增加散点图也是一样的编写,在资源绑定中提供的代码,里面包括预测数据的生成图和真实数据的生成图,xy分别表示2个特征值,点的颜色以正例和负例进行区分,负例黑色,正例黄色。同时也用plt.savefig('predictions.png')进行图片的保存,但建议这里保存路径用绝对路径,相对路径有时候会找不到,得全局搜寻。
路径编写时,斜杠/和反斜杠\不同,可以参考大佬python中关于\和/的使用说明介绍

plt.savefig('C:/Users/11003189/Desktop/py/test5.png')
plt.savefig(r'C:\Users\11003189\Desktop\py\test5.png')
plt.savefig('C:\\Users\\11003189\\Desktop\\py\\test5.png')

在这里插入图片描述

在这里插入图片描述

这里图片主要是展示一个效果,数据集的相关性和优化效果都没进行考虑,为了方便输出,迭代次数和种群都是按照最小的配置,因此图片效果不佳。但不影响代码的适用性,可根据需要进行数据集替换和相关超参数范围的选取。

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

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

相关文章

gpt-4-all模型中转实现

最近才完成这个功能,相信知道这个模型的人,应该已经熟悉了。这是我的中转:openai-api Chatbox配置如下: 模型测试: 1)图片生成 2)文件分析,链接读取:

WWW2024 | PromptMM:Prompt-Tuning增强的知识蒸馏助力多模态推荐系统

论文:https://arxiv.org/html/2402.17188v1 代码:https://github.com/HKUDS/PromptMM 研究动机 多模态推荐系统极大的便利了人们的生活,比如亚马逊和Netflix都是基于多模态内容进行推荐的。对于研究,人们也遵循工业界的趋势,进行modality-aware的用户…

初步了解序列化和反序列化

01什么是序列化和反序列化 序列化是将对象转化为字符串以便存储的一种方式。而反序列化恰好是序列化的逆过程,反序列化会将字符串转化为对象供程序使用。 常见的php系列化和反系列化方式主要有:serialize,unserialize;json_enco…

删除元素.

C 用迭代器迭代&#xff0c;当条件成立删除元素。 class Solution { public:int removeElement(vector<int>& nums, int val) {for(std::vector<int>::iterator itnums.begin();it!nums.end();){if(*itval){itnums.erase(it);//vector删除时迭代器会失效&…

jenkins 使用k8s插件连接k8s集群

jenkins 安装k8s 插件 配置k8s节点 填写k8s 配置信息 生成秘钥 在服务器上面 查看地址 Kubernetes 服务证书 key cat /root/..kube/config 查看秘钥 对秘钥进行base64 位 加密 echo "秘钥内容" | base64 -d -----BEGIN CERTIFICATE----- MIIDITCCAgmgAwIB…

第一位 AI 程序员诞生,队友还是对手?

前几天&#xff0c;百度创始人李彦宏在采访中声称&#xff1a;“以后不会存在“程序员”这种职业了&#xff0c;因为只要会说话&#xff0c;人人都会具备程序员的能力”。 看到这话我的第一反应是“不可能&#xff0c;绝对不可能&#xff0c;程序员的工作有很大一部分是创造性的…

顺序表后续以及通讯录项目

⽬录 1. 基于动态顺序表实现通讯录项⽬ 2. 顺序表经典算法 3. 顺序表的问题及思考 正⽂开始 继上一篇 1.动态顺序表的查找 这里挺简单的如找不到就返回一个负数&#xff0c;因为索引不可能是负的这里就用来代表找不到 下面是找不到的示例 最终代码可以优化成这样 2.动态…

2024-03-13 作业

网络编程&#xff1a; 1.思维导图&#xff1a; 2.上课写的代码&#xff1a; 2.1网络字节序与主机字节序转换 运行代码&#xff1a; #include <myhead.h> int main() {int num 0x12345678;short int value 0x1234;int num_n htonl(num);int value_n htons(value);…

Window API 使用的一些注意事项

文章目录 1、LPCWSTR类型2、LPCTSTR类型3、LPCSTR类型4、LPCTSTR和LPCWSTR区别5、LPCTSTR和LPCSTR、LPCWSTR三者区别6、_T(" ")7、DWORD类型转换为std::wstring类型8、char类型转换为LPCSTR类型9、获取当前时间戳(毫秒)10、std::wstring和LPCSTR区别11、std::wstring…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Toggle)

组件提供勾选框样式、状态按钮样式及开关样式。 说明&#xff1a; 该组件从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 仅当ToggleType为Button时可包含子组件。 接口 Toggle(options: { type: ToggleType, is…

android studio 连接mumu模拟器调试

1、打开mumu模拟器 2、在Android Studio 中 控制台 cd 到 sdk 目录下 platform-tools 文件夹&#xff0c;有一个adb.exe 可运行程序 一般指令&#xff1a; adb connect 127.0.0.1:7555 但是这个执行在window环境下可能会报错 解决方法是在 adb 之前加 ".\", 问题…

精读《正交的 React 组件》

1 引言 搭配了合适的设计模式的代码&#xff0c;才可拥有良好的可维护性&#xff0c;The Benefits of Orthogonal React Components 这篇文章就重点介绍了正交性原理。 所谓正交&#xff0c;即模块之间不会相互影响。想象一个音响的音量与换台按钮间如果不是正交关系&#xf…

Java初阶数据结构队列的实现

1.队列的概念 1.队列就是相当于排队打饭 2.在排队的时候就有一个队头一个队尾。 3.从队尾进对头出 4.所以他的特点就是先进先出 所以我们可以用链表来实现 单链表实现要队尾进队头出{要有last 尾插头删} 双向链表实现效率高&#xff1a;不管从哪个地方当作队列都是可以的&…

学习JAVA的第二十一天(基础)

多线程 线程&#xff1a; 线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中&#xff0c;是进程中的实际运作单位。 进程&#xff1a; 程序的基本执行实体 并发&#xff1a; 在同一时刻&#xff0c;有多个指令在单个CPU上交替执行 并行&#xff1a; 在同一时刻&…

uniapp h5 部署

uniapp 配置 服务器文件路径 打包文件结构 //nginx 配置 server {listen 8300;server_name bfqcwebsiteapp;charset utf-8;#允许跨域请求的域&#xff0c;* 代表所有add_header Access-Control-Allow-Origin *;#允许带上cookie请求add_header Access-Control-Allow-C…

利用Anaconda创建环境

利用Anaconda创建环境 1. 创建环境的步骤 1. 创建环境的步骤 1.在终端中&#xff0c;使用以下命令创建一个新的 Anaconda 环境。假设您想要创建一个名为 myenv 的环境&#xff1a; conda create --name myenv2.如果您想指定 Python 版本&#xff0c;可以在创建环境时添加版本号…

改三行代码就发了SCI一区?基于全面学习策略的Jaya算法!学会你也可以!CEC2017效果极佳!

声明&#xff1a;文章是从本人公众号中复制而来&#xff0c;因此&#xff0c;想最新最快了解各类智能优化算法及其改进的朋友&#xff0c;可关注我的公众号&#xff1a;强盛机器学习&#xff0c;不定期会有很多免费代码分享~ 目录 原始Jaya算法 改进Jaya算法策略详解&…

使用Golong轻松实现JWT身份验证

使用Golong轻松实现JWT身份验证 JSON Web Tokens (JWT)是一种流行的安全方法&#xff0c;用于在两个方之间表示声明。在Web应用程序领域&#xff0c;它们通常用作从客户端向服务器传输身份信息&#xff08;声明&#xff09;的方式。本教程将引导您逐步实现Go应用程序中的JWT身份…

操作系统内功篇:硬件结构之CPU是如何运行的?

本文分5个小结&#xff0c;分别是图灵机工作方式&#xff0c;冯诺依曼结构&#xff0c;总线线路位宽和CPU位宽&#xff0c;程序执行的基本过程&#xff0c; a12的具体执行过程。 一 图灵机的工作方式 图灵机由纸带&#xff0c;读写头组成。读写头上有一些部件例:存储单元&#…

java集合框架——List集合概述及ArrayList,LinkedList的区别

前言&#xff1a; List系列集合是Collection集合中两个系列的其中一个&#xff0c;整理下笔记。打好基础&#xff0c;daydayup&#xff01; 需要了解Collection的&#xff0c;可以看这篇java集合框架——Collection集合概述 List系列集合 List系列集合的特点为添加的元素有序&…