加载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 data
def 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, pca
def ask_user_for_choices(file_path):
print("\n请查看Excel数据的前几行:")
data = load_data(file_path)
print(data.head())
preprocess = input("数据是否已完成预处理(数据清洗和标准化)?(是/否): ").strip().lower()
if preprocess != '是':
print("请先进行数据预处理。")
return
task_type = input("请选择任务类型(分类/回归): ").strip().lower()
target_c