遗传算法优化支持向量机代码(输出world报告)
加载Excel数据,对用户输入的任务类型(分类或回归)进行支持向量机(SVM)建模。通过遗传算法优化模型的超参数(C和gamma),并生成一份包含模型参数和性能评估指标的报告文档:
- 加载数据:从Excel文件中读取数据,并进行初步的空值处理。
- 主成分分析(PCA):可选的步骤,用户可选择是否使用PCA进行数据降维。
- 任务选择:用户选择任务类型(分类或回归),并指定目标变量列名。脚本根据任务类型选择合适的模型(SVC或SVR)。
- 遗传算法优化:利用遗传算法调整支持向量机的参数C和gamma,最大化分类准确率或最小化回归均方误差。
- 评估模型:对优化后的模型进行训练和测试,计算各项评估指标,包括MSE、RMSE、MAE、MAPE和R²。
- 生成报告:将模型参数和评估结果写入Word文档,生成详细的报告。
输入格式:每一行为一个样本数据,每一列为一个指标数据
可以在代码中自由调整相关参数
# 定义全局变量以便于调整和调试
DATA_SPLIT_RATIO = 0.2 # 数据划分比例(测试集占比)
DATA_SHUFFLE = True # 是否进行数据洗牌
CROSS_VALIDATION = True # 是否进行交叉验证
NGEN = 15 # 遗传算法迭代代数
POP_SIZE = 50 # 种群大小
MUTPB = 0.2 # 突变概率
CXPB = 0.5 # 交叉概率
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.svm import SVC, SVR
from sklearn.metrics import accuracy_score, mean_squared_error, mean_absolute_error, r2_score
from sklearn.model_selection import train_test_split
from deap import base, creator, tools, algorithms
import numpy as np
from docx import Document
import matplotlib.pyplot as plt
import time
import os# 设置中文字体和负号显示
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False# 定义全局变量以便于调整和调试
DATA_SPLIT_RATIO = 0.2 # 数据划分比例(测试集占比)
DATA_SHUFFLE = True # 是否进行数据洗牌
CROSS_VALIDATION = True # 是否进行交叉验证
NGEN = 15 # 遗传算法迭代代数
POP_SIZE = 50 # 种群大小
MUTPB = 0.2 # 突变概率
CXPB = 0.5 # 交叉概率def load_data(file_path):# 读取Excel数据data = pd.read_excel(file_path) # 替换为您的数据文件data = data.dropna() # 清除缺失值return datadef pca_analysis(X):# 数据标准化scaler = StandardScaler()X_scaled = scaler.fit_transform(X)# 主成分分析(PCA)pca = PCA(n_components=min(X_scaled.shape))pca.fit(X_scaled)explained_variance = pca.explained_variance_explained_variance_ratio = pca.explained_variance_ratio_cumulative_variance = np.cumsum(explained_variance_ratio)# 总方差解释表格print("总方差解释表格:")print("成分\t特征根\t方差解释率(%)\t累积方差解释率(%)")for i in range(len(explained_variance)):print(f"{i + 1}\t{explained_variance[i]:.3f}\t{explained_variance_ratio[i] * 100:.3f}\t{cumulative_variance[i] * 100:.3f}")return X_scaled, pcadef ask_user_for_choices(file_path):print("\n请查看Excel数据的前几行:")data = load_data(file_path)print(data.head())preprocess = input("数据是否已完成预处理(数据清洗和标准化)?(是/否): ").strip().lower()if preprocess != '是':print("请先进行数据预处理。")returntask_type = input("请选择任务类型(分类/回归): ").strip().lower()target_c