NSGA-II介绍
NSGA-II(Non-dominated Sorting Genetic Algorithm II)是一种多目标优化算法,用于解决具有多个冲突目标的优化问题。它通过模拟进化过程中的自然选择和遗传操作,逐步改进种群中的解,以找到一组尽可能好的解,这些解在多个目标下都是非支配的(Pareto优解)。
建模目的
用NSGA-II实现对SVR超参数的寻优,找到SVR最优的超参数C和对应的评价指标RMSE,超参数C范围(0.01, 10),迭代次数5,种群大小5。
ps:超参数范围、迭代次数、种群大小可自定义
模型源码
import random
from sklearn.model_selection import train_test_split
import pandas as pd
import numpy as np
from sklearn.svm import SVRfrom sklearn.metrics import mean_squared_error
# 设置参数
pop_size = 5 # 种群大小
gen_size = 5 # 进化代数
pc = 1 # 交叉概率
pm = 0.3 # 变异概率
num_obj = 1 # 目标函数个数
x_range = (0.01, 10) # 自变量取值范围
data = pd.read_excel('C:/Users/孙海涛/Desktop/x.xlsx', sheet_name='Sheet1') # 读取数据
target = pd.read_excel('C:/Users/孙海涛/Desktop/y.xlsx', sheet_name='Sheet1') # 读取数据
x_train, x_test, y_train, y_test = train_test_split(data, target, random_state=22, test_size=0.25)# 定义自变量的类
class Individual:def __init__(self, x):self.x = xself.objs = [None] * num_objself.rank = Noneself.distance = 0.0# 计算目标函数的值def evaluate(self):c = self.xmodel_svr = SVR(C=c)model_svr.fit(x_train, y_train)predict_results = model_svr.predict(x_test)