粒子群优化支持向量机代码(PSO-SVM)

news/2025/4/22 1:52:21

粒子群优化支持向量机代码

数据WFs1

import pandas as pd
import numpy as np
import random
from sklearn.svm import SVC
import matplotlib.pyplot as plt
from sklearn.model_selection import cross_val_predict
from sklearn.metrics import confusion_matrix
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import RandomForestClassifier as RFC
from sklearn.feature_selection import RFE# 1.读取训练数据集
data = pd.read_csv(r"WFs1.csv")
x = data.iloc[:, 1:]
Y = data.iloc[:, 0]
print(x.shape)# 2.标准化
scaler = StandardScaler()
X = scaler.fit_transform(x)# 3.初始化参数
W = 0.5                                 # 惯性因子
c1 = 0.2                                # 学习因子
c2 = 0.5                                # 学习因子
n_iterations = 10                       # 迭代次数
n_particles = 100                       # 种群规模# 4.设置适应度值
def fitness_function(position):svclassifier = SVC(kernel='rbf', gamma=position[0], C=position[1])      # 参数gamma和惩罚参数c以实数向量的形式进行编码作为PSO的粒子的位置svclassifier.fit(X, Y)score = cross_val_score(svclassifier, X, Y, cv=9).mean()                # 交叉验证print(score)                                                            # 分类精度Y_pred = cross_val_predict(svclassifier, X, Y, cv=9)                    # 获取预测值# 我这里是三分类,下面输出错误分类结果return confusion_matrix(Y, Y_pred)[0][1] + confusion_matrix(Y, Y_pred)[0][2] + confusion_matrix(Y, Y_pred)[1][0] + \confusion_matrix(Y, Y_pred)[1][2] + confusion_matrix(Y, Y_pred)[2][0] + confusion_matrix(Y, Y_pred)[2][1]\,  confusion_matrix(Y, Y_pred)[0][1] + confusion_matrix(Y, Y_pred)[0][2] + confusion_matrix(Y, Y_pred)[1][0] + \confusion_matrix(Y, Y_pred)[1][2] + confusion_matrix(Y, Y_pred)[2][0] + confusion_matrix(Y, Y_pred)[2][1]# 5.粒子图
def plot(position):x = []y = []for i in range(0, len(particle_position_vector)):x.append(particle_position_vector[i][0])y.append(particle_position_vector[i][1])colors = (0, 0, 0)plt.scatter(x, y, c = colors, alpha = 0.1)# 设置横纵坐标的名称以及对应字体格式#font2 = {'family': 'Times New Roman','weight': 'normal', 'size': 20,}plt.xlabel('gamma')plt.ylabel('C')plt.axis([0, 10, 0, 10],)plt.gca().set_aspect('equal', adjustable='box')return plt.show()# 6.初始化粒子位置,进行迭代
particle_position_vector = np.array([np.array([random.random() * 10, random.random() * 10]) for _ in range(n_particles)])
pbest_position = particle_position_vector
pbest_fitness_value = np.array([float('inf') for _ in range(n_particles)])
gbest_fitness_value = np.array([float('inf'), float('inf')])
gbest_position = np.array([float('inf'), float('inf')])
velocity_vector = ([np.array([0, 0]) for _ in range(n_particles)])
iteration = 0
while iteration < n_iterations:plot(particle_position_vector)for i in range(n_particles):fitness_cadidate = fitness_function(particle_position_vector[i])print("error of particle-", i, "is (training, test)", fitness_cadidate, " At (gamma, c): ",particle_position_vector[i])if (pbest_fitness_value[i] > fitness_cadidate[1]):pbest_fitness_value[i] = fitness_cadidate[1]pbest_position[i] = particle_position_vector[i]if (gbest_fitness_value[1] > fitness_cadidate[1]):gbest_fitness_value = fitness_cadidategbest_position = particle_position_vector[i]elif (gbest_fitness_value[1] == fitness_cadidate[1] and gbest_fitness_value[0] > fitness_cadidate[0]):gbest_fitness_value = fitness_cadidategbest_position = particle_position_vector[i]for i in range(n_particles):new_velocity = (W * velocity_vector[i]) + (c1 * random.random()) * (pbest_position[i] - particle_position_vector[i]) + (c2 * random.random()) * (gbest_position - particle_position_vector[i])new_position = new_velocity + particle_position_vector[i]particle_position_vector[i] = new_positioniteration = iteration + 1# 7.输出最终结果
print("The best position is ", gbest_position, "in iteration number", iteration, "with error (train, test):",fitness_function(gbest_position))

https://dhexx.cn/news/show-2654228.html

相关文章

LeetCode Bulb Switcher

题目&#xff1a; There are n bulbs that are initially off. You first turn on all the bulbs. Then, you turn off every second bulb. On the third round, you toggle every third bulb (turning on if its off or turning off if its on). For the nth round, you only …

C++操作MySQL,有用的朋友顶下,辛苦的原创啊. - 天下 - C++博客

C操作MySQL,有用的朋友顶下,辛苦的原创啊. - 天下 - C博客C操作MySQL,有用的朋友顶下,辛苦的原创啊.向google大神搜 :mysql-connector得http://www.mysql.com/products/connector/这些就是mysql所谓的连接器吧.一路向下看到:C Wrapper for MySQL C API (MySQL) Download http:/…

sklearn学习——递归特征消除法(RFE)

sklearn学习——递归特征消除法&#xff08;RFE&#xff09; 1 作用 消除特征之间的冗余&#xff0c;选取最优特征组合。降低特征维数。 2 步骤 将筛选的k个特征作为初始特征子集输入到随机森林分类器中&#xff0c;计算得到每个特征的重要性&#xff0c;并利用交叉验证方法…

Java Code Review清单

2019独角兽企业重金招聘Python工程师标准>>> 整洁的代码 清单项目分类使用可以表达实际意图(Intention-Revealing)的名称有意义的名称每一个概念只用一个词有意义的名称使用方案/问题领域名称有意义的名称类应该是比较小的!类函数应该是比较小的!函数只做一件事函数…

LeetCode Generate Parentheses

题目&#xff1a; Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses. For example, given n 3, a solution set is: "((()))", "(()())", "(())()", "()(())", "()()(…

python起步——可变对象和不可变对象

学习python了一小段时间&#xff0c;觉得整体上还是真的让程序更好写了。   学习过程中&#xff0c;突然想到一个问题——我之前博客写过的一篇文章&#xff0c;关于不用第三个数交换a、b的问题&#xff1a;http://www.cnblogs.com/FreeAquar/archive/2012/07/22/2603381.htm…

Java学习笔记(1)——常用cmd命令与Java编制编译

Java学习笔记——常用cmd命令与Java编制编译 1 JDK下载安装与环境配置 附上链接 2 常用cmd命令 dir 列出当前目录下的文件以及文件夹md 创建目录rd 删除目录cd 进入指定目录cd… 退回到上一级目录del 删除文件 3 Java特点 简单性面向对象分布式健壮性安全性体系结构中立…

华为防火墙-适合CSSIP方向

新版的OS初始console的用户名&#xff1a;admin&#xff0c;密码&#xff1a;Admin123连接console进入设备&#xff1a; Copyright(C) 2010-2013 Huawei Technologies Co., Ltd. *All rights reserved *Without the owners prior written consent, *no decompiling or reverse-…

LeetCode Letter Combinations of a Phone Number

题目&#xff1a; Given a digit string, return all possible letter combinations that the number could represent. A mapping of digit to letters (just like on the telephone buttons) is given below. Input:Digit string "23" Output: ["ad", &q…

Java学习笔记(2)——基础语法

Java学习——基础语法 1 第一个Java程序 public class 后面采用的类名和文件名保持一样&#xff0c;一个Java程序里面只有一个public class&#xff1b;class后面类名必须以字母开头&#xff0c;后面可以跟字母和数字的任意组合&#xff1b;System.out.println&#xff08;&a…