共享粒子群算法 优化svm 分类 代码实战

import numpy as np
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score

# 加载数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target

# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 定义目标函数(SVM分类器的准确率)
def objective_function(params):
    C, gamma = params
    # 使用SVM进行分类
    clf = SVC(C=C, gamma=gamma, random_state=42)
    clf.fit(X_train, y_train)
    # 计算准确率
    y_pred = clf.predict(X_test)
    accuracy = accuracy_score(y_test, y_pred)
    return -accuracy  # PSO是一个最小化算法,因此使用负准确率

# 定义共享粒子群算法
def social_pso(objective_function, num_particles=10, max_iter=50, search_space=[(0.1, 10), (0.1, 1)]):
    # 初始化粒子位置和速度
    particles_position = np.random.uniform(low=search_space[0][0], high=search_space[0][1], size=(num_particles, 1))
    particles_velocity = np.zeros((num_particles, 1))

    # 初始化最佳个体位置和适应值
    best_particle_position = np.copy(particles_position)
    best_particle_fitness = np.array([objective_function(p) for p in particles_position])

    # 初始化全局最佳个体位置和适应值
    global_best_position = np.copy(best_particle_position[np.argmin(best_particle_fitness)])
    global_best_fitness = np.min(best_particle_fitness)

    # 粒子群优化迭代
    for iteration in range(max_iter):
        for i in range(num_particles):
            # 更新粒子速度和位置
            inertia_term = 0.5 * particles_velocity[i]
            cognitive_term = 1.5 * np.random.random() * (best_particle_position[i] - particles_position[i])
            social_term = 1.5 * np.random.random() * (global_best_position - particles_position[i])

            particles_velocity[i] = inertia_term + cognitive_term + social_term
            particles_position[i] += particles_velocity[i]

            # 对位置进行修正,确保在搜索空间内
            particles_position[i] = np.clip(particles_position[i], search_space[0][0], search_space[0][1])

            # 更新个体最佳位置和适应值
            current_fitness = objective_function(particles_position[i])
            if current_fitness < best_particle_fitness[i]:
                best_particle_fitness[i] = current_fitness
                best_particle_position[i] = particles_position[i]

                # 更新全局最佳位置和适应值
                if current_fitness < global_best_fitness:
                    global_best_fitness = current_fitness
                    global_best_position = particles_position[i]

        # 输出每轮迭代的结果
        print(f"Iteration {iteration + 1}: Global Best Fitness = {global_best_fitness}")

    return global_best_position, global_best_fitness

# 调用共享粒子群算法进行SVM分类器参数优化
best_params, best_accuracy = social_pso(objective_function)

print("\nOptimization Result:")
print(f"Best Parameters: C = {best_params[0]}, gamma = {best_params[1]}")
print(f"Best Accuracy: {best_accuracy}")
 

import numpy as np
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score# 加载数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 定义目标函数(SVM分类器的准确率)
def objective_function(params):C, gamma = params# 使用SVM进行分类clf = SVC(C=C, gamma=gamma, random_state=42)clf.fit(X_train, y_train)# 计算准确率y_pred = clf.predict(X_test)accuracy = accuracy_score(y_test, y_pred)return -accuracy  # PSO是一个最小化算法,因此使用负准确率# 定义共享粒子群算法
def social_pso(objective_function, num_particles=10, max_iter=50, search_space=[(0.1, 10), (0.1, 1)]):# 初始化粒子位置和速度particles_position = np.random.uniform(low=search_space[0][0], high=search_space[0][1], size=(num_particles, 1))particles_velocity = np.zeros((num_particles, 1))# 初始化最佳个体位置和适应值best_particle_position = np.copy(particles_position)best_particle_fitness = np.array([objective_function(p) for p in particles_position])# 初始化全局最佳个体位置和适应值global_best_position = np.copy(best_particle_position[np.argmin(best_particle_fitness)])global_best_fitness = np.min(best_particle_fitness)# 粒子群优化迭代for iteration in range(max_iter):for i in range(num_particles):# 更新粒子速度和位置inertia_term = 0.5 * particles_velocity[i]cognitive_term = 1.5 * np.random.random() * (best_particle_position[i] - particles_position[i])social_term = 1.5 * np.random.random() * (global_best_position - particles_position[i])particles_velocity[i] = inertia_term + cognitive_term + social_termparticles_position[i] += particles_velocity[i]# 对位置进行修正,确保在搜索空间内particles_position[i] = np.clip(particles_position[i], search_space[0][0], search_space[0][1])# 更新个体最佳位置和适应值current_fitness = objective_function(particles_position[i])if current_fitness < best_particle_fitness[i]:best_particle_fitness[i] = current_fitnessbest_particle_position[i] = particles_position[i]# 更新全局最佳位置和适应值if current_fitness < global_best_fitness:global_best_fitness = current_fitnessglobal_best_position = particles_position[i]# 输出每轮迭代的结果print(f"Iteration {iteration + 1}: Global Best Fitness = {global_best_fitness}")return global_best_position, global_best_fitness# 调用共享粒子群算法进行SVM分类器参数优化
best_params, best_accuracy = social_pso(objective_function)print("\nOptimization Result:")
print(f"Best Parameters: C = {best_params[0]}, gamma = {best_params[1]}")
print(f"Best Accuracy: {best_accuracy}")

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

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

相关文章

pgsql中in 和 join 怎么选

前提&#xff1a; 两个表只有一个关联字段 IN的使用&#xff1a; 1、适用场景&#xff1a;当需要关联的数据量较小时&#xff08;例如几十到几百条&#xff09;&#xff0c;使用IN是可以接受的。IN子句通常用于WHERE条件中&#xff0c;以指定某列的值是否在给定列表中。 2、性…

雾锁王国Enshrouded个人专服怎么搭建?怎么多人联机一起玩?

前面跟大家分享了『零基础也可以10秒开服幻兽帕鲁&#xff0c;只需要鼠标点击几下即可自动部署』一文&#xff0c;大家可以快速搭建属于自己的幻兽帕鲁专服。现在我们同样可以在10秒搭建雾锁王国专服&#xff0c;让您与朋友一起合作战胜强大的Boss。 雾锁王国&#xff1a;你是火…

Docker本地部署可编辑开源导航页并发布公网分享好友可访问

文章目录 1. 使用Docker搜索镜像2. 下载镜像3. 查看镜像4. 启动容器5. 浏览器访问6. 远程访问6.1 内网穿透工具安装6.2 创建远程连接公网地址6.3 使用固定二级子域名地址远程访问 今天和大家分享如何使用Docker本地部署一个开源的简约风格网址导航页&#xff0c;支持五种搜索引…

基于C++的面向对象程序设计:类与对象的深入剖析

面向对象程序设计的基本特点 面向对象程序设计的基本特点包括&#xff1a;抽象、封装、继承、多态。 抽象 抽象是指对具体问题或对象进行概括&#xff0c;抽出其公共性质并加以描述的过程。一般情况抽象分为数据抽象和行为抽象&#xff0c;其中数据抽象是指一个对象区别于另…

C++/数据结构:二叉搜索树的实现与应用

目录 一、二叉搜索树简介 二、二叉搜索树的结构与实现 2.1二叉树的查找与插入 2.2二叉树的删除 2.3二叉搜索树的实现 2.3.1非递归实现 2.3.2递归实现 三、二叉搜索树的k模型和kv模型 一、二叉搜索树简介 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0…

IDEA的properties默认编码是UTF-8但是不显示中文

问题描述 今天打开IDEA项目&#xff0c;发现messages_zh_CN.properties不显示中文了 但奇怪的是target下的文件就是展示的中文 而且我IDEA已经配置了编码格式是UTF-8了 使用nodepad打开源文件&#xff0c;也是展示编码格式是UTF-8 &#xff08;打开target下的文件&#xff0c;…

硅谷仿制网易云小程序登录问题解决

引言&#xff1a; 尚硅谷视频中的登录拥挤问题&#xff0c;导致无法登录&#xff0c;所以&#xff0c;我去gitee上从新找了个别人搞好点网易云的api接口【也是比较出名的那个&#xff0c;不想用不行啊&#xff0c;我也试过很多方法都不行】 接口详解网址&#xff1a;网易云音乐…

python基础——池

池的介绍&#xff1a; 提前创建进程池&#xff0c;防止创建的进程数量过多导致系统性能受到影响&#xff0c;在系统执行任务时&#xff0c;系统会使用池中已经创建进程/线程&#xff0c;从而防止资源的浪费&#xff0c;创建的进程/线程可以让多个进程使用&#xff0c;从而降低…

TypeScript Array(九) 数组

1.TypeScript Array 数组 1.1. 描述 数组对象是使用单独的变量名来存储一系列的值。  &emsp比如&#xff0c;你现在有一组数据&#xff0c;存单独变量如下&#xff1a; var data1"Android"; var data2"Java"; var data3"Harmony";那如果有…

南昌市青山湖、滕王阁、洛阳路隧道FM调频广播集群通信调度系统应用案例

一、用户需求 青山湖隧道&#xff0c;是南昌市一条东西走向的城市主干道&#xff0c;隧道为双向6车道&#xff0c;长1070米&#xff0c;其中湖底暗埋段为550米&#xff0c;净高5.45米&#xff0c;两孔每孔净宽12.4米。 滕王阁隧道是南昌市沿江北大道与沿江中大道连通工程&#…

计算机网络实验二

目录 实验二 交换机的基本配置 1、实验目的 2、实验设备 &#xff08;1&#xff09;实验内容&#xff1a; &#xff08;2&#xff09;练习&#xff1a; 1.实验内容一&#xff1a;&#xff08;交换机的配置方式&#xff09; 2.实验内容二&#xff1a;&#xff08;交换机…

云打印怎么收费?云打印需要付费吗?

随着云打印概念的火热发展&#xff0c;很多有打印需求的App或者个人用户都想使用易绘创云打印服务。那么易绘创云打印怎么收费&#xff1f;云打印需要付费吗&#xff1f;今天就带大家来了解一下。 云打印怎么收费&#xff1f;云打印需要付费吗&#xff1f; 很多有打印需求的小…

go 问题记录(日志丢失)

问题描述&#xff1a; 在go程序中&#xff0c;通过执行一个命令启动一个子命令&#xff0c;并通过pipe读取子程序的标准输入和输出&#xff0c;通过scanner默认按行读取&#xff0c;此时如果子程序输出时没有携带’\n’&#xff0c;scanner就不会打印输出&#xff0c;而是会累…

正则表达式 与文本三剑客(sed grep awk)

一&#xff0c;正则表达式 &#xff08;一&#xff09;正则表达式相关定义 1&#xff0c;正则表达式含义 REGEXP&#xff1a; Regular Expressions&#xff0c;由一类特殊字符及文本字符所编写的模式&#xff0c;其中有些字符&#xff08;元字符&#xff09;不表示字符字面意…

EMQX 性能调优:TCP SYN 队列与 Accept 队列

在上一篇博客&#xff08;EMQX 性能调优&#xff1a;最大连接与文件描述符&#xff09;&#xff0c;我们深入研究了 MQTT 连接与文件描述符之间的关系&#xff0c;介绍了如何修改文件描述符相关的内核参数来突破默认的最大连接数量限制。 但你可能会发现&#xff0c;在某些情况…

Java 面向对象进阶 03 static 注意事项、重新认识main方法(黑马)

案例代码如下&#xff1a; 非静态的方法虚拟机会自带一个关键字&#xff0c;如下&#xff1a; 但是不能手动出来&#xff0c;它的类型就是当前类&#xff1b; 通过输出this&#xff0c;得到当前s1,s2 的地址&#xff1b; 所以在输出时会有隐藏的this&#xff0c;所以this所指向…

Vue3+Echarts实现实时曲线及开始与暂停功能

最近做电力项目中&#xff0c;遇到这样一个需求&#xff1a; 用户选择设备的属性后&#xff08;多选情况&#xff0c;可以选择不同设备的属性&#xff09;&#xff0c;然后请求各自的数据&#xff0c;使用折线图的形式实现趋势展示&#xff0c;同时要支持暂停和开始功能&#x…

Redis -- 单线程模型

失败是成功之母 ——法国作家巴尔扎克 目录 单线程模型 Redis为什么这么快 单线程模型 redis只使用一个线程&#xff0c;处理所有的命令请求&#xff0c;不是说redis服务器进场内部真的就只有一个线程&#xff0c;其实也有多个线程&#xff0c;那就是处理网络和io的线程。 R…

MBR分区转换为GPT分区

这里有一个ecs-test用于测试MBR转换为GPT 新增一块数据盘 将数据盘以MBR分区格式分区 将整块磁盘以mbr形式分区 格式化&#xff0c;挂载等 上传文件&#xff0c;方便测试(以便后续转换格式类型&#xff0c;防止文件丢失) 取消挂载 将MBR转换为GPT 需先下载gdisk yum instal…

联盟营销最有效的方法是什么?

联盟营销就是“Affiliate marketing&#xff0c;是一种有效的市场推广策略&#xff0c;通过与其他相关企业或个人建立合作关系&#xff0c;共同推广产品或服务。每带来一次有效交易&#xff08;如用户购买、注册等&#xff09;&#xff0c;推广者就能获得佣金&#xff0c;将流量…