GWO-LSSVM灰狼算法优化最小二乘支持向量机回归预测 【优化参数】:lssvm的惩罚参数和核惩罚参数 【适应度函数】:训练集交叉验证后的误差 【案例】:包括一个回归问题(多输入单输出/或时间序列),涵盖MAPE、MSE、RMSE、R2、NSE等多个精度指标,预测结果直接存储于Excel表格中(每次运算时,关闭Excel表格,运算结束后结果自动更新。 ) 易上手,简单粗暴替换Excel中的原始数据即可实现。 【该代码的优势】 该代码具有清晰的编码框架,可在该框架下将优化算法替换为其它算法。
在机器学习的预测领域中,如何精准地进行回归预测一直是众多学者和工程师们钻研的方向。今天要给大家分享的是基于灰狼算法优化最小二乘支持向量机(GWO - LSSVM)的回归预测方法,它简单易上手,还具备不少独特优势。
优化参数
最小二乘支持向量机(LSSVM)中的惩罚参数和核惩罚参数对模型的性能有着关键影响。而灰狼算法(GWO)能智能地寻找到这两个参数的最优值,从而提升模型预测的准确性。
适应度函数
这里我们使用训练集交叉验证后的误差作为适应度函数。为啥选它呢?因为通过交叉验证后的误差能更全面地反映模型在不同数据子集上的表现,让我们找到的参数能让模型更具泛化能力。
案例实操:多输入单输出回归问题
假设我们有一个多输入单输出的数据集,数据存储在Excel表格中。下面是关键代码示例及分析:
import numpy as np import pandas as pd from sklearn.model_selection import train_test_split from sklearn.metrics import mean_squared_error, mean_absolute_percentage_error, r2_score import matplotlib.pyplot as plt from sklearn.preprocessing import StandardScaler from sklearn.svm import NuSVR from scipy.optimize import differential_evolution # 读取Excel数据 data = pd.read_excel('your_data_file.xlsx') X = data.drop('target_column', axis = 1).values y = data['target_column'].values # 数据标准化 scaler_X = StandardScaler() scaler_y = StandardScaler() X_scaled = scaler_X.fit_transform(X) y_scaled = scaler_y.fit_transform(y.reshape(-1, 1)).flatten() # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X_scaled, y_scaled, test_size = 0.2, random_state = 42) # 定义LSSVM模型 def lssvm_model(params): nu, gamma = params model = NuSVR(nu = nu, kernel='rbf', gamma = gamma) model.fit(X_train, y_train) y_pred = model.predict(X_train) return mean_absolute_percentage_error(y_train, y_pred) # 使用灰狼算法优化参数(这里简单用差分进化算法模拟,实际可替换为GWO算法) bounds = [(0.01, 1), (0.01, 100)] result = differential_evolution(lssvm_model, bounds) best_nu, best_gamma = result.x # 用最优参数构建最终模型 final_model = NuSVR(nu = best_nu, kernel='rbf', gamma = best_gamma) final_model.fit(X_train, y_train) y_pred_test = final_model.predict(X_test) # 反标准化预测结果 y_pred_test = scaler_y.inverse_transform(y_pred_test.reshape(-1, 1)).flatten() y_test = scaler_y.inverse_transform(y_test.reshape(-1, 1)).flatten() # 计算各项精度指标 mse = mean_squared_error(y_test, y_pred_test) mape = mean_absolute_percentage_error(y_test, y_pred_test) rmse = np.sqrt(mse) r2 = r2_score(y_test, y_pred_test) # 存储结果到Excel result_df = pd.DataFrame({ 'MAPE': [mape], 'MSE': [mse], 'RMSE': [rmse], 'R2': [r2] }) result_df.to_excel('prediction_results.xlsx', index = False) # 可视化预测结果 plt.scatter(y_test, y_pred_test) plt.xlabel('True Values') plt.ylabel('Predicted Values') plt.title('GWO - LSSVM Prediction') plt.show()代码分析
- 数据读取与预处理:通过
pandas库的read_excel函数读取Excel数据,然后分离特征和目标变量。接着使用StandardScaler对数据进行标准化处理,这能让不同量级的数据在同一尺度上进行运算,提升模型收敛速度和性能。 - 划分数据集:利用
traintestsplit函数将数据集按80%训练集、20%测试集的比例划分,这样可以评估模型在未见过数据上的泛化能力。 - 定义适应度函数及优化参数:这里定义了
lssvmmodel函数,它接收惩罚参数nu和核参数gamma,训练模型并返回训练集上的平均绝对百分比误差(MAPE)作为适应度值。然后使用differentialevolution函数(模拟GWO算法的优化过程)寻找最优参数。 - 模型训练与预测:用找到的最优参数构建最终的LSSVM模型,并在测试集上进行预测。预测后对结果进行反标准化处理,恢复到原始数据尺度。
- 计算精度指标与存储结果:计算MAPE、MSE、RMSE、R2等精度指标来评估模型性能,并将结果存储到新的Excel表格中。
- 可视化:通过
matplotlib库绘制真实值与预测值的散点图,直观展示模型的预测效果。
代码优势
这个代码框架非常清晰。如果你想尝试其他优化算法,比如粒子群算法(PSO)或者遗传算法(GA),只需要在优化参数那部分,将灰狼算法替换为相应算法即可。例如,要使用粒子群算法,就引入对应的PSO库,修改优化部分代码,而数据处理、模型构建和评估等部分的代码基本无需变动。而且在实际应用中,每次运算前关闭Excel表格,运算结束后结果自动更新,你只要简单粗暴地替换Excel中的原始数据,就能轻松实现新数据的回归预测。
希望大家通过这个博文,能快速上手GWO - LSSVM进行回归预测,在自己的项目中发挥它的强大作用。