遗传算法优化支持向量机代码(输出world报告)

加载Excel数据,对用户输入的任务类型(分类或回归)进行支持向量机(SVM)建模。通过遗传算法优化模型的超参数(C和gamma),并生成一份包含模型参数和性能评估指标的报告文档:

  1. 加载数据:从Excel文件中读取数据,并进行初步的空值处理。
  2. 主成分分析(PCA):可选的步骤,用户可选择是否使用PCA进行数据降维。
  3. 任务选择:用户选择任务类型(分类或回归),并指定目标变量列名。脚本根据任务类型选择合适的模型(SVC或SVR)。
  4. 遗传算法优化:利用遗传算法调整支持向量机的参数C和gamma,最大化分类准确率或最小化回归均方误差。
  5. 评估模型:对优化后的模型进行训练和测试,计算各项评估指标,包括MSE、RMSE、MAE、MAPE和R²。
  6. 生成报告:将模型参数和评估结果写入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
  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是一个简单的遗传算法优化支持向量机的python代码示例: ```python import random import numpy as np from sklearn import svm from sklearn.datasets import make_classification # 生成数据集 X, y = make_classification(n_samples=1000, n_features=10, n_informative=5, n_redundant=0, random_state=1) # 定义适应度函数,即SVM的准确率 def fitness(individual, X, y): clf = svm.SVC(C=individual[0], kernel=individual[1], gamma=individual[2]) clf.fit(X, y) accuracy = clf.score(X, y) return accuracy # 定义遗传算法 def genetic_algorithm(population_size, generations, mutation_rate, X, y): # 初始化种群 population = [] for i in range(population_size): individual = [random.uniform(0.1, 10), random.choice(['linear', 'rbf']), random.uniform(0.1, 1)] population.append(individual) # 进化 for generation in range(generations): # 计算适应度 fitness_scores = [] for individual in population: fitness_scores.append(fitness(individual, X, y)) # 选择 parents = [] for i in range(population_size): parent1 = population[fitness_scores.index(max(fitness_scores))] fitness_scores[fitness_scores.index(max(fitness_scores))] = -1 parent2 = population[fitness_scores.index(max(fitness_scores))] fitness_scores[fitness_scores.index(max(fitness_scores))] = -1 parents.append([parent1, parent2]) # 交叉 offspring = [] for i in range(population_size): child = [] for j in range(len(parents[i][0])): if random.random() < 0.5: child.append(parents[i][0][j]) else: child.append(parents[i][1][j]) offspring.append(child) # 变异 for i in range(population_size): for j in range(len(offspring[i])): if random.random() < mutation_rate: if j == 0: offspring[i][j] = random.uniform(0.1, 10) elif j == 1: offspring[i][j] = random.choice(['linear', 'rbf']) else: offspring[i][j] = random.uniform(0.1, 1) # 更新种群 population = offspring # 返回最优解 max_fitness = 0 for individual in population: fitness_score = fitness(individual, X, y) if fitness_score > max_fitness: max_fitness = fitness_score best_individual = individual return best_individual # 运行遗传算法 best_individual = genetic_algorithm(population_size=50, generations=100, mutation_rate=0.1, X=X, y=y) # 输出最优解 print('Best individual:', best_individual) ``` 此代码使用遗传算法来搜索SVM的最佳参数(C、kernel和gamma),以最大化SVM的准确率。它首先生成一个包含1000个样本和10个特征的分类数据集,然后定义适应度函数来计算SVM的准确率。接下来,它使用遗传算法来搜索最佳参数,其中种群大小为50,进化代数为100,变异率为0.1。最后,它输出找到的最佳参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BenChuat

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值