差分进化算法优化集成参数

一、差分进化的思想

  差分进化是在遗传算法的基础上发展而来的,与遗传算法相似,有变异、交叉、选择等操作,但是实现简单,收敛速度快。差分进化的过程是随机生成一个初始化群体,经过交叉、变异、选择三个操作,反复迭代,保留有用的个体,寻找最优解。

  差分进化利用了贪婪的思想,在每一次的迭代中,保留最优解。通过当前种群个体跟经过交叉、变异后的个体以适应度值为标准,进行比较,保留最优的个体。

(1)初始化

(2)变异

(3)交叉

(4)选择

  其中,F是变异因子,用来控制两个随机个体差分向量的缩放程度。CR是交叉概率,用来控制进化发生的几率,CR的值越大,则变异个体对试验个体的贡献多,CR的值小,则种群个体对试验个体的贡献多。

差分进化算法描述:

二、差分进化优化集成参数

  差分进化算法优化参数时,关键是适应度值的计算,初始化、变异、交叉操作,是以种群个体为操作对象,代码实现可以通用,适应度值的计算需要考虑优化的目标。

  利用集成学习的方法,选择五种分类器,把每个分类器权重作为差分进化中的种群个体,作为被优化的对象,这样每个个体的维度就是5,一个个体就是一个解向量。

  计算适应度值:分别将当代种群个体和经过变异、交叉操作后得到的试验个体的分量作为个体分类器的权重,在数据集上通过加权集成分类结果,得到所有样本的输出,计算分类准确率,将其作为适应度值。

适应度值计算:

def fitness(w):      #计算适应度值函数
    trainX, Y_train, testX, Y_test = classifier.feature_sec()
    predict = []
    m = classifier.Y_test.shape[0]
    #for Xi in model.testX:
    clf1 = classifier.clfLR(trainX, Y_train, testX, Y_test)
    clf2 = classifier.clfLDA(trainX, Y_train, testX, Y_test)
    clf3 = classifier.clfNB(trainX, Y_train, testX, Y_test)
    clf4 = classifier.clfSVM(trainX, Y_train, testX, Y_test)
    clf5 = classifier.clfPLA(trainX, Y_train, testX, Y_test)
    f1 = np.array(clf1.predict_proba(testX))
    f2 = np.array(clf2.predict_proba(testX))
    f3 = np.array(clf3.predict_proba(testX))
    f4 = np.array(clf4.predict_proba(testX))
    f5 = np.array(clf5._predict_proba_lr(testX))
    fit = w[0]*f1 + w[1]*f2 + w[2]*f3 + w[3]*f4 + w[4]*f5
    # print("f1",f1)
    # print("fit:",fit)
    # s = 0.5 * sum(w)
    print("w,s:",w)
    # for i in range(m):
    #     fit = w[0]*f1[i] + w[1]*f2[i] + w[2]*f3[i] + w[3]*f4[i]
    #     if fit >= s:
    #         predict.append(1)
    #     else:
    #         predict.append(0)
    for fitprob in fit:
        if fitprob[0]>fitprob[1]:
            predict.append(0)
        else:
            predict.append(1)
    #print("predict:",predict)

    #print("Ytest shape:",classifier.Y_test.shape)
    # TP=TN=FP=FN = 0

    # print(m)
    # for k in range(m):
    #     if Y_test[k]==1 and predict[k]==1:TP += 1
    #     elif Y_test[k]==0 and predict[k]==0: TN += 1
    #     elif Y_test[k]==0 and predict[k]==1:FP += 1
    #     elif Y_test[k]==1 and predict[k]==0:FN += 1

    # TP = sum(classifier.Y_test == predict == 1)       #将正类预测为正类的样本数
    # TN = sum(classifier.Y_test == predict == 0)       #将负类预测为负类的样本数
    # FP = sum(classifier.Y_test == 0 and predict == 1)       #将负类预测为正类的样本数
    # FN = sum(classifier.Y_test == 1 and predict == 0)       #将正类预测为负类的样本数
    # F1 = 2*TP/(2*TP+FN+FP)       #F值越大,说明实验效果越好
    #Gmean = math.sqrt((TP/(TP+FN))*(TN/(TN+FP)))        #用G-mean评价分类器性能
    count = sum(predict==Y_test)
    print("Accuracy,F1 is:",count/m)
    return count/m
 

原文地址:https://www.cnblogs.com/moonyue/p/11000049.html

时间: 2024-10-07 13:58:43

差分进化算法优化集成参数的相关文章

差分进化算法 (Differential Evolution)

Differential Evolution(DE)是由Storn等人于1995年提出的,和其它演化算法一样,DE是一种模拟生物进化的随机模型,通过反复迭代,使得那些适应环境的个体被保存了下来.但相比于进化算法,DE保留了基于种群的全局搜索策略,采用实数编码.基于差分的简单变异操作和一对一的竞争生存策略,降低了遗传操作的复杂性.同时,DE特有的记忆能力使其可以动态跟踪当前的搜索情况,以调整其搜索策略,具有较强的全局收敛能力和鲁棒性,且不需要借助问题的特征信息,适于求解一些利用常规的数学规划方法所

差分进化算法-python实现

DEIndividual.py 1 import numpy as np 2 import ObjFunction 3 4 5 class DEIndividual: 6 7 ''' 8 individual of differential evolution algorithm 9 ''' 10 11 def __init__(self, vardim, bound): 12 ''' 13 vardim: dimension of variables 14 bound: boundaries

scikit-opt——DE(差分进化)

Differential Evolution 差分进化算法(Differential Evolution,DE)于1997年由Rainer Storn和Kenneth Price在遗传算法等进化思想的基础上提出的,本质是一种多目标(连续变量)优化算法(MOEAs),用于求解多维空间中整体最优解. 差分进化算法相对于遗传算法而言,相同点都是通过随机生成初始种群,以种群中每个个体的适应度值为选择标准,主要过程也都包括变异.交叉和选择三个步骤.不同之处在于遗传算法是根据适应度值来控制父代杂交,变异后产

[Evolutionary Algorithm] 进化算法简介

进化算法,也被成为是演化算法(evolutionary algorithms,简称EAs),它不是一个具体的算法,而是一个“算法簇”.进化算法的产生的灵感借鉴了大自然中生物的进化操作,它一般包括基因编码,种群初始化,交叉变异算子,经营保留机制等基本操作.与传统的基于微积分的方法和穷举方法等优化算法(具体介绍见博客[Math] 常见的几种最优化方法中的其他数学优化方法)相比,进化计算是一种成熟的具有高鲁棒性和广泛适用性的全局优化方法,具有自组织.自适应.自学习的特性,能够不受问题性质的限制,有效地

Matlab微分进化算法及优化函数测试

微分进化(Difference Evolution,DE)算法是一种优化算法,据称其比GA(遗传算法)等更为优秀. 借鉴网上实现的DE算法,用Matlab实现了对若干函数优化问题的解法,代码如下: function [] = de_test clear all; close all; clc; %解:X = [0, 0, ...] %nVar = 30 %dims: [-30, 30]     function fitness = sphere(vals)         prod = vals

性能优化——算法优化

背景 由于某种原因,我们系统需要记录另一个系统中一个表里的id.但是,当我们记录完了以后,别人系统可能会删除那个表里的一些数据,这样的话,我们这边就多了一些无效数据,所以,我们必须的找到这些无效的id,然后将其删除. 开始,我们的实现是这样:我们将记录下来的所有id放在一个list里,然后传到另一个系统,他将他们已经删除的id返回.具体处理代码如下: <pre name="code" class="java">public String findDele

2. Genetic Algorithm(1) ——进化算法

本篇博文讲述基因算法(Genetic Algorithm),基因算法是最著名的进化算法. 内容依然来自博主的听课记录和教授的PPT. Outline 简单基因算法 个体表示 变异 重组 1. 简单基因算法(Simple Genetic Algorithm) Holland's早期的基因算法被认为是“简单的基因算法”或是“权威的基因算法”.(simple genetic algorithm or canonical genetic algorithm) 1. 直接举例说明 问题描述:利用遗传算法求

1. Introduction ——进化算法

本系列博客开始介绍进化算法. 知识内容来源于本人在硕士阶段听的课程以及阅读的文献书籍.算是听课笔记或是读书笔记吧. 博主在国外读的书,可能就中英文混杂了. Outline 什么是进化算法 能够解决什么样的问题 进化算法的重要组成部分 八皇后问题(实例) 1. 什么是进化算法 遗传算法(GA)是模拟生物进化过程的计算模型,是自然遗传学与计算机科学相互结合的新的计算方法. <图片来源于,Frank Neumann, The University of Adelaide> 2. 能够解决什么样的问题

SQL Server 聚合函数算法优化技巧

Sql server聚合函数在实际工作中应对各种需求使用的还是很广泛的,对于聚合函数的优化自然也就成为了一个重点,一个程序优化的好不好直接决定了这个程序的声明周期.Sql server聚合函数对一组值执行计算并返回单一的值.聚合函数对一组值执行计算,并返回单个值.除了 COUNT 以外,聚合函数都会忽略空值. 聚合函数经常与 SELECT 语句的 GROUP BY 子句一起使用. v1.写在前面 如果有对Sql server聚合函数不熟或者忘记了的可以看我之前的一片博客.sql server 基