精华内容
下载资源
问答
  • 最近发现果蝇算法优化参数很有效果,整理了果蝇算法优化一个以及多个参数的例程,在网上也搜索过,不过感觉大部分介绍的比较散乱,因此整理成为一个压缩包,希望对使用果蝇算法的人有帮助!
  • 该代码通过引入鲸鱼优化算法(Whale Optimization Algorithm,WOA),实现对 libsvm 工具箱中的SVDD算法的参数优化,给出两个实例代码: 1. libsvm 工具箱提供的heart_scale data 2. 工业过程数据 WOA的具体描述...
  • 基于粒子群算法的喷洒参数优化算法.pdf
  • 参数优化算法综述

    万次阅读 多人点赞 2019-03-11 11:36:58
    基于顺序模型的全局优化(SMBO)、高斯过程方法(GP)、树状结构Parzen估计方法(TPE)、随机搜索DBN等

    Algorithms for Hyper-Parameter Optimization

    原文:http://papers.nips.cc/paper/4443-algorithms-for-hyper-parameter-optimization.pdf

    作者:

    1. James Bergstra
      哈佛大学罗兰研究所
    2. R´emi Bardenet
      南巴黎大学计算机科学研究实验室
    3. Yoshua Bengio
      蒙特利尔大学计算机科学与运筹学系
    4. Bal´azs K´egl
      南巴黎大学直线加速器实验室

    专有名词:

    1. DBN
      Deep Belief Network,深度置信网络。
      详见:大话深度信念网络(DBN) https://my.oschina.net/u/876354/blog/1626639
    2. SMBO
      Sequential Model-Based Global Optimization,基于顺序模型的全局优化。
    3. EI
      Expected Improvement,预期改进。
    4. GP
      Gaussian Process,高斯过程。
    5. EDA
      Estimation of Distribution Algorithms,分布估计算法。
    6. CMA-ES
      Covariance Matrix Adaptation - Evolution Strategy,协方差矩阵适应进化策略。
    7. TPE
      Tree-structured Parzen Estimator Approach,树状结构Parzen估计方法(TPE)
    8. PCA
      Principal Component Analysis,主成分分析方法

    摘要

    图像分类基准的现有技术的若干最新进展来自于现有技术的更好配置而不是特征学习的新方法。一般来说,超参数优化的工作一直由人工完成,因为它们在只有少数试验的环境中非常有效。目前,计算机集群和GPU处理器可以运行更多的试验,我们发现算法方法可以找到更好的结果。我们在训练神经网络和深度置信网络(DBN)的任务中提出超参数优化结果。我们使用随机搜索和基于预期改进标准的两种新的贪婪顺序方法来优化超参数。随机搜索对于学习某些数据集的神经网络已足够有效,但是我们发现它对于训练深度置信网络是不可靠的。顺序算法应用于[1]中最困难的深度置信网络学习问题,并且发现比先前报道的最佳结果明显更好的结果。该工作提供了用于制作响应面模型 P ( y ∣ x ) P(y|x) P(yx)的新技术,其中许多超参数分配 ( x ) (x) (x)的元素与其他元素给定的特定值是不相关的。

    1 介绍

    诸如深度置信网络(DBN)[2],多层降噪自动编码机[3],卷积网络[4]以及基于复杂特征提取技术的分类器等模型具有10个到大约50个超参数,具体取决于实验者如何选择来对模型进行参数化,以及实验者在合理的默认值下选择多少超参数。调整这些模型的难度使得公布的结果难以复现和扩展,甚至使这些方法的原始研究更像是一门艺术,而不是一门科学。

    最近的结果如[5],[6]和[7]表明,大型和多层模型中的超参数优化直接阻碍了科学进步。这些工作通过简单算法中的更协调的超参数优化而不是通过创新建模或机器学习策略,在图像分类问题上具有先进的性能。从如[5]的结果中得出特征学习是无用的结论显然是错误的。相反,超参数优化应该被视为学习过程中有条理的外层循环。学习算法,像a functional from data to classifier(以分类问题为例),包括预算选择在超参数探索上花费多少CPU周期,以及花费多少CPU周期来评估每个超参数选择(即通过调整常规参数)。[5]和[7]的结果表明,对于诸如大型计算机集群和GPU的当代硬件,CPU周期的最佳分配包括比机器学习文献典型来得更多的超参数探索。

    超参数优化是在图结构配置空间上优化损失函数的问题。在这项工作中,我们将自己限定在树状结构配置空间。树状结构的配置空间意义在于一些叶变量(例如DBN第二层中隐藏层的数量)只有在节点变量(例如离散选择了多少层)取特定值时才能很好地定义值。超参数优化算法不仅必须优化离散、有序和连续的变量,而且必须同时选择变量哪一个变量来优化。

    在该工作中,我们通过一种生成过程来定义配置空间,以绘制有效样本。随机搜索是从该过程中绘制超参数分配并对其进行评估的算法。优化算法通过识别已经绘制的超参数来工作,并且基于损失函数在其他点处的值看起来很有希望。本文做出了两点贡献:1)随机搜索与[1]中DBN的手动优化是可竞争的。2)自动顺序优化优于手动和随机搜索。

    第2节介绍基于顺序模型的优化和预期的改进标准。第3节介绍了一种基于高斯过程的超参数优化算法。第4节介绍了基于自适应Parzen窗的又一种方法。第5节描述了DBN超参数优化的问题,并显示了随机搜索的效率。第6节显示了根据随机搜索对两个最难的数据集进行顺序优化的效率。本文在第7节和第8节讨论了结果和总结。

    2 基于顺序模型的全局优化(SMBO)

    基于顺序模型的全局优化(SMBO)算法已被用于许多应用,其适应度函数的评估代价很高[8,9]。在真实的适应度函数 f : χ → R f:\chi \to \mathbb{R} f:χR 评估成本高的应用中,基于模型的算法近似评估 f f f 来得更便宜。通常,SMBO算法中的内循环是该代理的数值优化,或代理的某些变换。最大化代理(或其转换)的点 x ∗ x^{*} x 是原本应评估的真实函数 f f f 的替代方案。这种主动学习的类似算法模板概括如图1。
    图1 通用基于顺序模型的全局优化伪代码

    图1 通用基于顺序模型的全局优化伪代码

    SMBO算法的不同之处在于它们在给定 f f f 的模型(或代理)下优化以获得 x ∗ x^{*} x 的标准,和在于它们的模型 f f f 通过观察历史 H \mathcal{H} H 。这项工作中的算法优化了预期改进(EI)的标准[10]。有其他已被提出的标准,例如改进概率和预期改进[10],最小化最小化器的条件熵[11],以及[12]中描述的基于强盗的标准。我们选择在我们的工作中使用EI标准,因为它是直观的,并且已经证明在各种环境中都能很好地工作。我们对未来工作的改进标准进行系统探索。预期的改进是在 f : χ → R N f:\chi \to \mathbb{R}^{N} f:χRN 的某个模型 M M M 下的期望 f ( x ) f(x) f(x) 将超过(负)某个阈值 y ∗ y^{*} y

    E I y ∗ ( x ) : = ∫ − ∞ ∞ m a x ( y ∗ − y , 0 ) p M ( y ∣ x ) d y \mathrm{EI}_{y^{*}}(x):=\int_{-\infty}^{\infty}\mathrm{max}(y^*-y,0)pM(y|x)dy EIy(x):=max(yy,0)pM(yx)dy

    这项工作的贡献是通过建模 H \mathcal{H} H: 一种分层高斯过程和树状结构Parzen估计,来近似 f f f 的两种新策略。这些分别在第3节和第4节中进行描述。

    3 高斯过程方法(GP)

    在基于模型的优化文献中,高斯过程一直被认为是建模损失函数的好方法[13]。高斯过程(GPs,[14])是封闭的欠采样(原文closed under sampling)函数的先验,这意味着如果 f f f 的先验分布被认为是具有均值0和核k的GP,则从 f f f 的条件分布得知样本 H = ( x i , f ( x i ) ) i = 1 n \mathcal{H}=(x_{i},f(xi))^{n}_{i=1} H=(xi,f(xi))i=1n 的值也是GP,其均值和协方差函数可以通过分析推导出来。原则上可以使用具有通用平均函数的GP,但是对于我们的目的而言,仅考虑零均值过程更简单且充分。我们通过将函数值集中在所考虑的数据集中来实现。例如建模GP均值的线性趋势导致使用SMBO出现非探索区域中的非期望外推[15]。

    上面提到的封闭性,以及GP提供包含数据稀缺性影响的预测不确定性评估的事实,使得GP成为寻找候选 x x x (图1步骤3)和拟合模型 M t M_{t} Mt 的简炼方法(图1步骤6)。GP方法的每次迭代运行时间在 ∣ H ∣ \left|\mathcal{H}\right| H 中立方地缩放并且在被优化的变量中线性地缩放,但是功能评估 f ( x ∗ ) f(x^*) f(x) 的花费通常甚至在该立方成本中占主导地位。

    3.1 使用GP优化EI

    我们用GP对 f f f 进行建模,并将 y ∗ y^{*} y 设置为观察 H : y ∗ = m i n { f ( x i ) , 1 ≤ i ≤ n } \mathcal{H}:y^{*}=\mathrm{min}\{f(x_{i}),1\le i \le n\} H:y=min{f(xi),1in} 后找到的最佳值。(1)中的模型 p M pM pM 是知道 H \mathcal{H} H 的后验GP。(1)中的EI函数在平均函数接近或优于 y ∗ y^{*} y 的区域和不确定性高的欠探索区域之间进行折衷。

    EI函数通常通过输入空间上的详尽网格搜索或更高维度的拉丁超立方搜索进行优化。然而,关于EI标准的一些地形信息可以从简单的计算得出[16]:1)它总是非负的并且在 D \mathcal{D} D 的训练点处为零,2)它继承了核 k k k 的平滑性,在实践中通常至少一次可微分,3)EI标准可能是高度多模态的,特别是随着训练点数量的增加。[16]的作者使用前面关于EI地形的评论来设计一种混合搜索的进化算法,特别是旨在优化EI,在EI评估中表现出优于对给定预算的穷举搜索。我们借用他们的方法更进一步。我们在输入空间的离散部分(分类和离散超参数)上保持了分布估计(EDA,[17])方法,其中我们根据二项分布对候选点进行采样,同时我们使用协方差矩阵适应进化策略(CMA-ES,[18])用于输入空间的剩余部分(连续超参数)。CMA-ES是一种用于连续域优化的最先进的无梯度进化算法,已被证明优于高斯搜索EDA。请注意,这种无梯度方法允许GP回归的不可微内核。我们不会像在[16]一样使用混合算法,而是从有机会的位置开始多次重启本地搜索。[16]建议使用的曲面细分在这里是禁止的,因为我们的任务通常意味着工作在10个以上的维度,因此我们在单纯的质点开始每个局部搜索,在训练点中随机选取顶点。

    最后,我们注意到所有超参数都与每个点无关。例如,仅具有一个隐藏层的DBN没有与第二层或第三层相关联的参数。因此,在超参数的整个空间上放置一个GP是不够的。我们选择以树状方式通过共同使用超参数分组,并在每个组上放置不同的独立GP。例如,对于DBN,这意味着将一个GP放在常见的超参数上,包括指示要考虑的条件组的分类参数,与三个层中的每一个对应的参数上的三个GP,以及一些1维GP非独立控制的超参数,如ZCA能量(DBN参数见表1)。

    4 树状结构Parzen估计方法(TPE)

    预计我们的超参数优化任务将意味着高维度和小适应度评估预算,现在我们转向SMBO算法的另一种建模策略和EI优化方案。然而基于高斯过程的方法直接模拟 p ( y ∣ x ) p(y|x) p(yx) ,该策略模拟 p ( x ∣ y ) p(x|y) p(xy) p ( y ) p(y) p(y)

    回顾一下介绍,配置空间 X \mathcal{X} X 由图形结构的生成过程描述(例如,首先选择多个DBN层,然后为每个选择参数)。树形结构Parzen估计器(TPE)通过转换生成过程来模拟 p ( x ∣ y ) p(x|y) p(xy) ,用非参数密度替换先前配置的分布。在实验部分中,我们将看到使用均匀,对数均匀,量化对数均匀和分类变量来描述配置空间。在这些情况下,TPE算法进行以下替换:均匀 → \to 截断高斯混合 → \to 对数均匀 → \to 指数截断高斯混合,分类 → \to 再加权分类。在非参数密度中使用不同的观察值 { x ( 1 ) , . . . , x ( k ) } \{x^{(1)},...,x^{(k)}\} {x(1),...,x(k)} ,这些替换表示可以在配置空间 X \mathcal{X} X 上产生各种密度的学习算法。TPE使用两个这样的密度定义 p ( x ∣ y ) p(x|y) p(xy)

    p ( x ∣ y ) = { ℓ ( x ) if  y < y ∗ g ( x ) if  y ≥ y ∗ , p(x|y) = \begin{cases} \ell(x) &\text{if } y \lt y^{*} \\ g(x) &\text{if } y \ge y^{*}, \end{cases} p(xy)={(x)g(x)if y<yif yy,

    其中 ℓ ( x ) \ell(x) (x) 是通过使用算法 { x ( k ) } \{x^{(k)}\} {x(k)} 观察形成的密度,使得相应的损失 f ( x ( i ) ) f(x^{(i)}) f(x(i)) 小于 y ∗ y^{*} y ,并且 g ( x ) g(x) g(x) 是通过使用剩余观察值形成的密度。虽然基于GP的方法倾向于积极的 y ∗ y^{*} y (通常小于观察到的最佳损失),但TPE算法取决于大于最佳观察到的 f ( x ) f(x) f(x) y ∗ y^{*} y ,因此可以使用某些点来形成 ℓ ( x ) \ell(x) (x) 。TPE算法选择 y ∗ y^{*} y 作为观察到的 y y y 值的一些分位数 γ \gamma γ ,因此 p ( y < y ∗ ) = γ p(y\lt y^{*})=\gamma p(y<y)=γ ,但不需要 p ( y ) p(y) p(y) 的特定模型。通过在 H \mathcal{H} H 中维护观察到的变量的排序列表,TPE算法的每次迭代的运行时间可以在 ∣ H ∣ |\mathcal{H}| H 中线性缩放并且在被优化的变量(维度)的数量中线性地缩放。

    4.1 优化TPE算法中的EI

    选择TPE算法中 p ( x , y ) p(x,y) p(x,y) 作为 p ( y ) p ( x ∣ y ) p(y)p(x|y) p(y)p(xy) 的参数化以促进EI的优化。
    E I y ∗ ( x ) = ∫ − ∞ y ∗ ( y ∗ − y ) p ( y ∣ x ) d y = ∫ − ∞ y ∗ ( y ∗ − y ) p ( x ∣ y ) p ( y ) p ( x ) \mathrm{EI}_{y^{*}}(x)=\int_{-\infty}^{y^{*}}(y^{*}-y)p(y|x)dy=\int_{-\infty}^{y^{*}}(y^{*}-y)\frac{p(x|y)p(y)}{p(x)} EIy(x)=y(yy)p(yx)dy=y(yy)p(x)p(xy)p(y)
    通过构造 γ = p ( y < y ∗ ) \gamma =p(y<y^{*}) γ=p(y<y) p ( x ) = ∫ R p ( x ∣ y ) p ( y ) d y = γ ℓ ( x ) + ( 1 − γ ) g ( x ) p\left( x \right) =\int_{\mathbb{R}}{p\left( x|y \right) p\left( y \right) dy=\gamma \ell \left( x \right) +\left( 1-\gamma \right) g\left( x \right)} p(x)=Rp(xy)p(y)dy=γ(x)+(1γ)g(x)

    因此,
    ∫ − ∞ y ∗ ( y ∗ − y ) p ( x ∣ y ) p ( y ) d y = ℓ ( x ) ∫ − ∞ y ∗ ( y ∗ − y ) p ( y ) d y = γ y ∗ ℓ ( x ) − ℓ ( x ) ∫ − ∞ y ∗ p ( y ) d y \int_{-\infty}^{y^*}{\left( y^*-y \right) p\left( x|y \right) p\left( y \right) \text{d}y}=\ell \left( x \right) \int_{-\infty}^{y^*}{\left( y^*-y \right)}p\left( y \right) dy=\gamma y^*\ell \left( x \right) -\ell \left( x \right) \int_{-\infty}^{y^*}{p\left( y \right) dy} y(yy)p(xy)p(y)dy=(x)y(yy)p(y)dy=γy(x)(x)yp(y)dy
    最后,
    E I y ∗ ( x ) = γ y ∗ ℓ ( x ) − ℓ ( x ) ∫ − ∞ y ∗ p ( y ) d y γ ℓ ( x ) + ( 1 − γ ) g ( x ) ∝ ( γ + g ( x ) ℓ ( x ) ( 1 − γ ) ) − 1 EI_{y^*}\left( x \right) =\frac{\gamma y^*\ell \left( x \right) -\ell \left( x \right) \int_{-\infty}^{y^*}{p\left( y \right) dy}}{\gamma ^{\ell \left( x \right)}+\left( 1-\gamma \right) g\left( x \right)}\propto \left( \gamma +\frac{g\left( x \right)}{\ell \left( x \right)}\left( 1-\gamma \right) \right) ^{-1} EIy(x)=γ(x)+(1γ)g(x)γy(x)(x)yp(y)dy(γ+(x)g(x)(1γ))1
    最后一个表达式表明,为了最大化改进,我们希望在点 x x x ℓ ( x ) \ell(x) (x) 概率高同时 g ( x ) g(x) g(x) 概率低。 ℓ \ell g g g 的树状结构形式使得根据 ℓ \ell 绘制许多候选者并且根据 g ( x ) / ℓ ( x ) g(x)/\ell(x) g(x)/(x) 来评估它们是容易的。在每次迭代中,算法返回具有最大EI的候选算法 x ∗ x^{*} x

    4.2 Parzen Estimator的细节

    模型 ℓ ( x ) \ell(x) (x) g ( x ) g(x) g(x) 是涉及离散值和连续值变量的分层过程。自适应Parzen估计器通过在 K K K 观测值 B = { x ( 1 ) , . . . , x ( k ) } ⊂ H \mathcal{B}=\{x^{(1)},...,x^{(k)}\} \subset\mathcal{H} B={x(1),...,x(k)}H 附近放置一个模型而在 X \mathcal{X} X 上产生模型。每个连续超参数由一定间隔 ( a , b ) (a, b) (a,b) 或高斯或对数均匀分布的均匀先验指定。TPE用以 x ( i ) ∈ B x(i)\in\mathcal{B} x(i)B 中的每一个为中心的高斯方法代替先验的等加权混合。每个高斯方法的标准差被设置为到左和右邻点距离中的较大者,但是会被调整到合理范围内。在均匀的情况下,点 a a a b b b 被认为是潜在的邻点。对于离散变量,假设先验是 N N N 个概率 p i p_{i} pi的向量,后向量元素与 N p i + C i N_{p_{i}}+C_{i} Npi+Ci 成比例,其中 C i C_{i} Ci 计算 B \mathcal{B} B 中选择 i i i 的出现。对数均匀超参数在对数域中被视为均匀。

    表1:用于随机采样的DBN超参数分布。由“或”分隔的选项(如预处理(包括随机种子))的权重相等。符号 U U U 表示均匀, N \mathcal{N} N 表示高斯分布, l o g   U log\ U log U 表示均匀分布在对数域中。CD(也称为CD-1)代表对比分歧,该算法用于初始化DBN的层参数。

    在这里插入图片描述

    5 随机搜索DBN中的超参数优化

    形式化超参数优化的一个简单但最新的步骤是使用随机搜索[5]。[19]表明随机搜索比网格搜索更有效地优化单层神经网络分类器的参数。在本节中,我们评估了DBN优化的随机搜索,与[1]中进行的顺序网格辅助手动搜索相比较。

    我们选择先前表1中列出的来定义DBN配置上的搜索空间。[1]中提供了数据集的细节,DBN模型以及基于CD的贪婪分层训练步骤。该先验对应于[1]的搜索空间,除了以下差异:(a)我们允许ZCA预处理[20],(b)我们允许每个层具有不同的大小,©我们允许对于每个层都有自己的CD训练参数,(d)我们允许将连续值数据视为CD算法中的伯努利均值(理论上更正确)或伯努利样本(更典型),以及(e)我们没有将实值超参数的可能值离散化。这些变化扩展了超参数搜索问题,同时将原始超参数搜索空间保持为扩展搜索空间的子集。

    该初步随机搜索的结果如图2所示。
    在这里插入图片描述
    图2:深度信念网络(DBN)的性能根据随机搜索。随机搜索用于探索多达32个超参数(参见表1)。使用网格搜索辅助手动搜索在类似域上进行的结果平均41次试验以绿色(1层DBN)和红色(3层DBN)给出。每个箱形图(对于 N = 1 , 2 , 4... N=1,2,4... N=1,2,4...)显示当选择N个随机试验中的最佳模型时测试集性能的分布。 数据集“convex”和“mnist旋转背景图像”用于更彻底的超参数优化。

    也许令人惊讶的是,手动搜索的结果可以与几个数据集的32次随机试验可靠地匹配。在[21]中进一步探讨了此设置中随机搜索的效率。在随机搜索结果与人类表现相匹配的情况下,从图2中不清楚其原因是它是否有效地搜索了原始空间,或者它搜索了更容易找到良好性能的更大空间。但是随机搜索通过搜索更大的空间以某种方式作弊的反对意见是相反的——表1中列出的搜索空间是超参数优化问题的自然描述,并且[1]对该空间的限制可能是简化搜索问题,使其易于网格搜索辅助手动搜索。关键的是,这两种方法都在相同的数据集上训练DBN。

    图2中的结果表明,对于某些数据集,超参数优化更难。例如,在“MNIST旋转背景图像”数据集(MRBI)的情况下,随机抽样似乎相对较快地收敛到最大值(32个试验的实验中的最佳模型显示性能差异很小),但这个稳定水平低于手动搜索。在另一个数据集(convex)中,随机抽样程序超出了手动搜索的性能,但收敛到任何类型的平台都很慢。当选择32个模型中的最佳模型时,泛化存在相当大的差异。这种缓慢的收敛表明可能有更好的性能,但我们需要更有效地搜索配置空间才能找到它。本文的其余部分探讨了这两个数据集的超参数优化的顺序优化策略:convexMRBI

    6 在DBN中顺序搜索超参数优化

    我们通过与波士顿房价数据集上的随机抽样进行比较验证了第3.1节的GP方法,这是一个由13个标度输入变量和标量回归输出组成的506个点的回归任务。我们训练了一个具有10个超参数的多层感知器(MLP),包括学习率, ℓ 1 \ell_{1} 1 ℓ 2 \ell_{2} 2 惩罚,隐藏层的大小,迭代次数,是否应用PCA预处理,其能量是唯一的有条件的超参数[22]。我们的结果如图3所示。前30次迭代是使用随机抽样进行的,而从第30次开始,我们将随机样本与在更新历史上训练的GP方法区分开来。该实验重复了20次。尽管与维度相比点的数量特别少,但代理建模方法比随机点具有明显更好的点,这支持将SMBO方法应用于更雄心勃勃的任务和数据集。

    在这里插入图片描述
    图3:在时间30之后,GP优化波士顿房价回归任务中的MLP超参数。 到目前为止,每5次迭代发现的最佳最小值,与时间相关。 红色=GP,蓝色=随机。阴影区域=1-sigma误差条。

    在这里插入图片描述
    表2:每个搜索算法针对每个问题找到的最佳模型的测试集分类错误。每个搜索算法最多允许200次试验。手动搜索使用82个试验convex和27个试验MRBI

    将GP应用于优化DBN性能的问题,我们允许每个提议 x ∗ x^{*} x 对CMA + ES算法进行3次随机重启,并且在拟合GP的长度尺度时允许最多500次迭代的共轭梯度方法。平方指数内核[14]用于每个节点。GP的CMA-ES部分使用惩罚方法处理边界,二项式采样部分本质上处理它。在 H \mathcal{H} H 中用30个随机采样点初始化GP算法。在200次试验后,使用该GP预测点 x ∗ x^{*} x 需要大约150秒。对于基于TPE的算法,我们选择了 γ = 0.15 \gamma=0.15 γ=0.15 ,并且在每次迭代中从 ℓ ( x ) \ell(x) (x) 中抽取的100个候选中的最佳选择为提议 x ∗ x^{*} x 。在200次试验之后,使用该TPE算法预测点 x ∗ x^{*} x 需要大约10秒。允许TPE在优化过程中超过用于随机采样的初始界限,而GP和随机搜索被限制在整个优化过程中保持在初始界限内。TPE算法用30个随机采样点进行初始化,GP算法也同样用这30个随机采样点播种。

    6.1 并行化顺序搜索

    GP和TPE方法实际上是异步运行的,以便利用多个计算节点并避免浪费时间等待试验评估完成。对于GP方法,使用所谓的恒定骗子(constant liar)方法:每次提出候选点 x ∗ {x^{*}} x 时,临时分配等于训练集 D \mathcal{D} D 内的 y y y'的平均值的假适应性评估,直到评估完成为止。 并报告实际损失loss f ( x ∗ ) f(x^{*}) f(x)。对于TPE方法,我们简单地忽略了最近提出的点,并依赖于来自 ℓ ( x ) \ell(x) (x) 绘制的随机性来提供从一次迭代到下一次迭代的不同候选。并行化的结果是每个提议 x ∗ x^{*} x 都基于较少的反馈。这使搜索效率降低,但在墙上时钟时间方面更快。

    无论是否在GTX 285,470,480或580上执行,每次试验的运行时间限制为1小时GPU计算。最慢和最快的机器之间的速度差异在理论上大约是两倍,但实际的计算效率还取决于机器的负载和问题的配置(不同卡的相对速度在不同超参数配置下是不同的)。通过GP和TPE算法对多达五个提案的并行评估,每个实验使用五个GPU花费大约24小时的待机时间。

    7 讨论

    每个算法构建的轨迹( H \mathcal{H} H)最多200步,如图4所示,并与随机搜索和[1]中进行的手动搜索进行了比较。

    在这里插入图片描述
    图4:基于高斯过程(GP)和基于图形模型(TPE)顺序优化算法的效率,用于在convex任务(左)和MRBI任务(右)上优化多达三层的DBN的验证集性能的任务。点是每个SMBO算法产生的轨迹 H \mathcal{H} H 的元素。纯色线是在每个时间点之前找到的最佳试验的验证集准确度。TPE和GP算法都从其随机初始条件中取得了显著进步,并且大大优于手动和随机搜索方法。关于convex任务的最佳验证方法的95%置信区间在每个点的上方和下方延伸0.018,在MRBI任务上在每个点的上方和下方延伸0.021。实线黑线是领域专家使用网格搜索和手动搜索[1]的组合获得的测试集精度。虚线是从我们之前的分布(参见表1)中抽样的试验中发现的99.5%验证性能的分位数,分别根据两个数据集的457和361个随机试验估算。

    使用这些算法和其他算法找到的最佳模型的泛化分数列于表2中。在convex数据集(二分类)上,两种算法都收敛到13%误差的验证分数。总的来说,TPE的最佳模型有14.1%的误差,而GP的最佳模型有16.7%。TPE的最佳效果显着优于手动搜索(19%)和随机搜索200个试验(17%)。在MRBI数据集(十分类)上,随机搜索是表现最差的(50%误差),GP方法和手动搜索大致相关(47%误差),而TPE算法发现了新的最佳结果(44%误差))。特别是TPE算法找到的模型比以前在两个数据集上找到的模型都要好。GP和TPE算法的效率略低于手动搜索:GP和EI在80次试验中达到了与手动搜索相当的性能,[1]的手动搜索使用了82个convex试验和27个MRBI试验。

    TPE方法在这两个数据集中的表现优于GP方法有几种可能的原因。也许 p ( x ∣ y ) p(x|y) p(xy) 的逆分解比高斯过程中的 p ( y ∣ x ) p(y|x) p(yx) 更准确。或许,相反,TPE缺乏准确性引发的探索结果证明是一种很好的搜索启发式算法。也许GP方法本身的超参数没有设置为在DBN配置空间中正确地权衡利用和探索。需要更多的实证研究来检验这些假设。然而,至关重要的是,所有四个SMBO运行都匹配或超过了随机搜索和仔细的人工引导搜索,这些搜索目前是超参数优化的最先进方法。

    GP和TPE算法在这两种设置中都运行良好,但是这些算法需要一些明确的设置,实际上SMBO算法一般不会很好。顺序优化算法通过利用观察到的 ( x , y ) (x,y) (x,y) 对中的结构来工作。对于 p ( y ∣ x ) p(y|x) p(yx) 的错误选择,SMBO可能是任意不好的。如果它在 H \mathcal{H} H 中提取仅导致局部最优的结构,则在发现具有明显好的 p ( y ∣ x ) p(y|x) p(yx) 的全局最优时,也可能比随机采样慢。

    8 结论

    本文介绍了两种连续的超参数优化算法,并证明它们在涉及DBN的两个困难的超参数优化任务中满足或超过人的性能和蛮力随机搜索的性能。我们在搜索空间上放宽了标准约束(例如,所有层上的相等图层大小),并回退到32个变量(包括离散变量和连续变量)的更自然的超参数空间,其中许多变量有时不相关,具体取决于其他参数的值(例如层数)。在这个32维搜索问题中,这里介绍的TPE算法已经在这两个数据集上发现了新的最佳结果,这些结果明显优于之前认为的DBN。此外,GP和TPE算法是实用的:每个数据集的优化仅使用5个GPU处理器在24小时内完成。虽然我们的结果仅适用于DBN,但我们的方法非常通用,并且自然地扩展到任何超参数优化问题,其中超参数是从可测量的集合中提取的。

    我们希望我们的工作可以激励机器学习社区的研究人员将超参数优化策略视为所有学习算法中一个有趣且重要的组成部分。“DBN对convex任务的效果如何?”这个问题并不是一个完全具体的、经验上可回答的问题——超参数优化的不同方法会给出不同的答案。超参数优化的算法方法使机器学习结果更容易传播,再现和转移到其他域。我们在此提出的具体算法至少在某些情况下也能够找到比以前已知的更好的结果。最后,强大的超参数优化算法拓宽了可以实际研究的模型的范围;研究人员不需要将自己局限于一些易于手动调整的变量系统。

    本工作中提出的TPE算法以及并行评估基础架构可作为BSD许可的免费开源软件提供,该软件不仅可以在这项工作中重现结果,而且还可以促进这些和与其他超参数优化问题类似的算法。

    Hyperopt:https://github.com/jaberg/hyperopt

    鸣谢

    这项工作得到了加拿大国家科学与工程研究委员会,Compute Canada以及法国国家研究机构的ANR-2010-COSI-002资助。 DBN模型的GPU实现由Theano [23]提供。

    参考文献

    [1] H. Larochelle, D. Erhan, A. Courville, J. Bergstra, and Y. Bengio. An empirical evaluation of deep architectures on problems with many factors of variation. In ICML 2007, pages 473–480, 2007.
    [2] G. E. Hinton, S. Osindero, and Y. Teh. A fast learning algorithm for deep belief nets. Neural omputation, 18:1527–1554, 2006.
    [3] P. Vincent, H. Larochelle, I. Lajoie, Y. Bengio, and P. A. Manzagol. Stacked denoising autoencoders: Learning useful representations in a deep network with a local denoising criterion. Machine Learning
    Research, 11:3371–3408, 2010.
    [4] Y. LeCun, L. Bottou, Y. Bengio, and P. Haffner. Gradient-based learning applied to document recognition.Proceedings of the IEEE, 86(11):2278–2324, November 1998.
    [5] Nicolas Pinto, David Doukhan, James J. DiCarlo, and David D. Cox. A high-throughput screening approach to discovering good forms of biologically inspired visual representation. PLoS Comput Biol, 5(11):e1000579, 11 2009.
    [6] A. Coates, H. Lee, and A. Ng. An analysis of single-layer networks in unsupervised feature learning.
    NIPS Deep Learning and Unsupervised Feature Learning Workshop, 2010.
    [7] A. Coates and A. Y. Ng. The importance of encoding versus training with sparse coding and vector quantization. In Proceedings of the Twenty-eighth International Conference on Machine Learning (ICML-11), 2010.
    [8] F. Hutter. Automated Configuration of Algorithms for Solving Hard Computational Problems. PhD thesis, University of British Columbia, 2009.
    [9] F. Hutter, H. Hoos, and K. Leyton-Brown. Sequential model-based optimization for general algorithm configuration. In LION-5, 2011. Extended version as UBC Tech report TR-2010-10.
    [10] D.R. Jones. A taxonomy of global optimization methods based on response surfaces. Journal of Global Optimization, 21:345–383, 2001.
    [11] J. Villemonteix, E. Vazquez, and E. Walter. An informational approach to the global optimization of
    expensive-to-evaluate functions. Journal of Global Optimization, 2006.
    [12] N. Srinivas, A. Krause, S. Kakade, and M. Seeger. Gaussian process optimization in the bandit setting:
    No regret and experimental design. In ICML, 2010.
    [13] J. Mockus, V. Tiesis, and A. Zilinskas. The application of Bayesian methods for seeking the extremum.
    In L.C.W. Dixon and G.P. Szego, editors, Towards Global Optimization, volume 2, pages 117–129. North
    Holland, New York, 1978.
    [14] C.E. Rasmussen and C. Williams. Gaussian Processes for Machine Learning.
    [15] D. Ginsbourger, D. Dupuy, A. Badea, L. Carraro, and O. Roustant. A note on the choice and the estimation of kriging models for the analysis of deterministic computer experiments. 25:115–131, 2009.
    [16] R. Bardenet and B. K´egl. Surrogating the surrogate: accelerating Gaussian Process optimization with
    mixtures. In ICML, 2010.
    [17] P. Larra˜naga and J. Lozano, editors. Estimation of Distribution Algorithms: A New Tool for Evolutionary Computation. Springer, 2001.
    [18] N. Hansen. The CMA evolution strategy: a comparing review. In J.A. Lozano, P. Larranaga, I. Inza, and
    E. Bengoetxea, editors, Towards a new evolutionary computation. Advances on estimation of distribution
    algorithms, pages 75–102. Springer, 2006.
    [19] J. Bergstra and Y. Bengio. Random search for hyper-parameter optimization. The Learning Workshop
    (Snowbird), 2011.
    [20] A. Hyv¨arinen and E. Oja. Independent component analysis: Algorithms and applications. Neural Networks, 13(4–5):411–430, 2000.
    [21] J. Bergstra and Y. Bengio. Random search for hyper-parameter optimization. JMLR, 2012. Accepted.
    [22] C. Bishop. Neural networks for pattern recognition. 1995.
    [23] J. Bergstra, O. Breuleux, F. Bastien, P. Lamblin, R. Pascanu, G. Desjardins, J. Turian, and Y. Bengio.
    Theano: a CPU and GPU math expression compiler. In Proceedings of the Python for Scientific Computing
    Conference (SciPy), June 2010.

    展开全文
  • 可以用遗传算法GA优化LSTM网络的超参数
  • 机器学习超参数优化算法-Hyperband

    千次阅读 2019-10-05 14:21:49
    传统优化算法 机器学习中模型性能的好坏往往与超参数(如batch size,filter size等)有密切的关系。最开始为了找到一个好的超参数,通常都是靠人工试错的方式找到"最优"超参数。但是这种方式效率太...

    参考文献:Hyperband: Bandit-Based Configuration Evaluation for Hyperparameter Optimization

    I. 传统优化算法

    机器学习中模型性能的好坏往往与超参数(如batch size,filter size等)有密切的关系。最开始为了找到一个好的超参数,通常都是靠人工试错的方式找到"最优"超参数。但是这种方式效率太慢,所以相继提出了网格搜索(Grid Search, GS)随机搜索(Random Search,RS)

    但是GS和RS这两种方法总归是盲目地搜索,所以贝叶斯优化(Bayesian Optimization,BO) 算法闪亮登场。BO算法能很好地吸取之前的超参数的经验,更快更高效地最下一次超参数的组合进行选择。但是BO算法也有它的缺点,如下:

    • 对于那些具有未知平滑度有噪声高维非凸函数,BO算法往往很难对其进行拟合和优化,而且通常BO算法都有很强的假设条件,而这些条件一般又很难满足。
    • 为了解决上面的缺点,有的BO算法结合了启发式算法(heuristics),但是这些方法很难做到并行化

    II. Hyperband算法

    1. Hyperband是什么

    为了解决上述问题,Hyperband算法被提出。在介绍Hyperband之前我们需要理解怎样的超参数优化算法才算是好的算法,如果说只是为了找到最优的超参数组合而不考虑其他的因素,那么我们那可以用穷举法,把所有超参数组合都尝试一遍,这样肯定能找到最优的。但是我们都知道这样肯定不行,因为我们还需要考虑时间,计算资源等因素。而这些因素我们可以称为Budget,用\(B\)表示。

    假设一开始候选的超参数组合数量是\(n\),那么分配到每个超参数组的预算就是\(\frac{B}{n}\)。所以Hyperband做的事情就是在\(n\)\(\frac{B}{n}\)做权衡(tradeoff)。

    上面这句话什么意思呢?也就是说如果我们希望候选的超参数越多越好,因为这样能够包含最优超参数的可能性也就越大,但是此时分配到每个超参数组的预算也就越少,那么找到最优超参数的可能性就降低了。反之亦然。所以Hyperband要做的事情就是预设尽可能多的超参数组合数量,并且每组超参数所分配的预算也尽可能的多,从而确保尽可能地找到最优超参数

    2. Hyperband算法

    Hyperband算法对 Jamieson & Talwlkar(2015)提出的SuccessiveHalving算法做了扩展。所以首先介绍一下SuccessiveHalving算法是什么。

    其实仔细分析SuccessiveHalving算法的名字你就能大致猜出它的方法了:假设有\(n\)组超参数组合,然后对这\(n\)组超参数均匀地分配预算并进行验证评估,根据验证结果淘汰一半表现差的超参数组,然后重复迭代上述过程直到找到最终的一个最优超参数组合。

    基于这个算法思路,如下是Hyperband算法步骤:

    u9pkp68yr7.png

    • r: 单个超参数组合实际所能分配的预算;
    • R: 单个超参数组合所能分配的最大预算;
    • \(s_{max}\): 用来控制总预算的大小。上面算法中\(s_{max}=\lfloor log_\eta(R) \rfloor\),当然也可以定义为\(s_{max}=\lfloor log_\eta(n_{max}) \rfloor\)
    • B: 总共的预算,\(B=(s_{max}+1)R\)
    • \(\eta\): 用于控制每次迭代后淘汰参数设置的比例
    • get_hyperparameter_configuration(n):采样得到n组不同的超参数设置
    • run_then_return_val_loss(t,ri):根据指定的参数设置和预算计算valid loss。\(L\)表示在预算为\(r_i\)的情况下各个超参数设置的验证误差
    • top_k(\(T,L,\lfloor \frac{n_i}{\eta}\rfloor\)):第三个参数表示需要选择top k(\(k=\frac{n_i}{\eta}\rfloor\))参数设置。

    注意上述算法中对超参数设置采样使用的是均匀随机采样,所以有算法在此基础上结合贝叶斯进行采样,提出了BOHB:Practical Hyperparameter Optimization for Deep Learning

    3. Hyperband算法示例

    文中给出了一个基于MNIST数据集的示例,并将迭代次数定义为预算(Budget),即一个epoch代表一个预算。超参数搜索空间包括学习率,batch size,kernel数量等。

    \(R=81,\eta=3\),所以\(s_{max}=4,B=5R=5×81\)

    下图给出了需要训练的超参数组和数量和每组超参数资源分配情况。

    由算法可以知道有两个loop,其中inner loop表示SuccessiveHalving算法。再结合下图左边的表格,每次的inner loop,用于评估的超参数组合数量越来越少,与此同时单个超参数组合能分配的预算也逐渐增加,所以这个过程能更快地找到合适的超参数。

    右边的图给出了不同\(s\)对搜索结果的影响,可以看到\(s=0\)或者\(s=4\)并不是最好的,所以并不是说\(s\)越大越好。

    dqyt6ys60h.png



    MARSGGBO原创





    2018-12-22



    转载于:https://www.cnblogs.com/marsggbo/p/10161605.html

    展开全文
  • 并在传统多元宇宙优化算法(MVO)的基础上针对TDR值下降速度慢而导致旅行距离增加的问题,提出改进多元宇宙优化算法(IMVO),将改进多元宇宙优化算法用于支持向量机的参数优化和选择问题上.使用UCI标准数据库中的数据进行...
  • 通过遗传算法对pid参数进行优化
  • 基于遗传算法优化多尺度排列熵参数,类似于粒子群算法优化参数
  • CNN框架中,如何对其模型的超参数进行自动化获取一直是一个重要问题。...利用CIFAR-10、MRBI和SVHN测试集对算法进行性能测试,实验结果表明,改进后的CNN超参数优化算法比同类超参数优化算法具有更好的性能。
  • 灰狼优化算法(GWO)

    2018-03-29 10:54:32
    The Grey Wolf Optimizer(GWO) algorithm mimics the leadership hierarchy and hunting mechanism of grey wolves in nature. Four types of grey wolves such as alpha, beta, delta, and omega are employed for ...
  • 遗传算法优化simulink模型中的参数,实测成功 如下问题: 1.遗传算法编程的详细解释 2.目标函数怎么编写,适应度函数与目标函数的关系 3.m文件与simulink如何联合仿真 4.sim()的应用细节 5.相关报错处理 在资源中...
  • 粒子群优化算法综述 1.6粒子群优化算法参数设置 1.6.1粒子群优化算法参数设置种群规模N 种群规模N影响着算法的搜索能力和计算量 PSO对种群规模要求不高一般取20-40就可以达到很好的求解效果不过对于比较难的问题...
  • 算法模型自动超参数优化方法!

    千次阅读 2020-12-22 19:57:32
    什么是超参数?学习器模型中一般有两类参数,一类是可以从数据中学习估计得到,我们称为参数(Parameter)。还有一类参数时无法从数据中估计,只能靠人的经验进行设计指定,我们称为超参数(...

    什么是超参数?

    学习器模型中一般有两类参数,一类是可以从数据中学习估计得到,我们称为参数(Parameter)。还有一类参数时无法从数据中估计,只能靠人的经验进行设计指定,我们称为超参数(Hyper parameter)。超参数是在开始学习过程之前设置值的参数。相反,其他参数的值通过训练得出。

    超参数:

    定义关于模型的更高层次的概念,如复杂性或学习能力 不能直接从标准模型培训过程中的数据中学习,需要预先定义 可以通过设置不同的值,训练不同的模型和选择更好的测试值来决定 参数空间的搜索一般由以下几个部分构成:

    • 一个estimator(回归器 or 分类器)

    • 一个参数空间

    • 一个搜索或采样方法来获得候选参数集合

    • 一个交叉验证机制

    • 一个评分函数

    Scikit-Learn中的超参数优化方法

    在机器学习模型中,比如随机森林中决策树的个数,人工神经网络模型中的隐藏层层数和每层的节点个数,正则项中常数大小等等,它们都需要事先指定。超参数选择不恰当,就会出现欠拟合或者过拟合的问题。在Scikit-Learn中,超参数是在学习过程开始之前设置其值的参数。典型的例子包括支持向量机里的C、kernel、gamma等。

    class sklearn.svm.SVC(*, C=1.0, kernel='rbf', degree=3, gamma='scale', coef0=0.0, shrinking=True, probability=False, tol=0.001, cache_size=200, class_weight=None, verbose=False, max_iter=-1, decision_function_shape='ovr', break_ties=False, random_state=None)
    

    使用过程中可以使用estimator.get_params() 获得学习器模型的超参数列表和当前取值。

    Sklearn提供了两种通用的超参数优化方法:网格搜索与随机搜索。

    交叉验证 (Cross-Validation)- CV 简介

    在机器学习里,通常来说我们不能将全部用于数据训练模型,否则我们将没有数据集对该模型进行验证,从而评估我们的模型的预测效果。为了解决这一问题,有如下常用的方法:

    The Validation Set Approach(验证集方案)

    这种是方法最简单的,也是很容易就想到的。我们可以把整个数据集分成两部分,一部分用于训练,一部分用于验证,这也就是我们经常提到的训练集(training set)和测试集(test set)。

    不过,这个简单的方法存在两个弊端:

    • 最终模型与参数的选取将极大程度依赖于你对训练集和测试集的划分方法。在不同的划分方法下,test MSE的变动是很大的,而且对应的最优degree也不一样。所以如果我们的训练集和测试集的划分方法不够好,很有可能无法选择到最好的模型与参数。

    • 该方法只用了部分数据进行模型的训练。当用于模型训练的数据量越大时,训练出来的模型通常效果会越好。所以训练集和测试集的划分意味着我们无法充分利用我们手头已有的数据,所以得到的模型效果也会受到一定的影响。

    基于这样的背景,有人就提出了Cross-Validation方法,也就是交叉验证。

    Cross-Validation

    LOOCV(留一法)

    LOOCV即(Leave-one-out cross-validation)。像Test set approach一样,LOOCV方法也包含将数据集分为训练集和测试集这一步骤。但是不同的是,我们只用一个数据作为测试集,其他的数据都作为训练集,并将此步骤重复N次(N为数据集的数据数量)。

    假设我们现在有n个数据组成的数据集,那么LOOCV的方法就是每次取出一个数据作为测试集的唯一元素,而其他n-1个数据都作为训练集用于训练模型和调参。结果就是我们最终训练了n个模型,每次都能得到一个MSE。而计算最终test MSE则就是将这n个MSE取平均。

    比起test set approach,LOOCV有很多优点。首先它不受测试集合训练集划分方法的影响,因为每一个数据都单独的做过测试集。同时,其用了n-1个数据训练模型,也几乎用到了所有的数据,保证了模型的bias更小。不过LOOCV的缺点也很明显,那就是计算量过于大,是test set approach耗时的n-1倍。

    K-fold Cross Validation(k 折交叉验证)

    K折交叉验证,和LOOCV的不同在于,我们每次的测试集将不再只包含一个数据,而是多个,具体数目将根据K的选取决定。比如,如果K=5,那么我们利用五折交叉验证的步骤就是:

    • 将所有数据集分成5份

    • 不重复地每次取其中一份做测试集,用其他四份做训练集训练模型,之后计算该模型在测试集上的MSE

    • 将5次的MSE取平均作为最后而得到MSE

    不难理解,其实LOOCV是一种特殊的K-fold Cross Validation(K=N)。最后K的选取是一个Bias和Variance的trade-off。K越大,每次投入的训练集的数据越多,模型的Bias越小。但是K越大,又意味着每一次选取的训练集之前的相关性越大(考虑最极端的例子,当k=N,也就是在LOOCV里,每次都训练数据几乎是一样的)。而这种大相关性会导致最终的test error具有更大的Variance。一般K值选择5或10。

    网格搜索 GridSearchCV

    我们在选择超参数有两个途径:1)凭经验;2)选择不同大小的参数,带入到模型中,挑选表现最好的参数。通过途径2选择超参数时,人力手动调节注意力成本太高,非常不值得。For循环或类似于for循环的方法受限于太过分明的层次,不够简洁与灵活,注意力成本高,易出错。GridSearchCV 称为网格搜索交叉验证调参,它通过遍历传入的参数的所有排列组合,通过交叉验证的方式,返回所有参数组合下的评价指标得分。

    GridSearchCV听起来很高大上,其实就是暴力搜索。注意的是,该方法在小数据集上很有用,数据集大了就不太适用了。数据量比较大的时候可以使用一个快速调优的方法——坐标下降。它其实是一种贪心算法:拿当前对模型影响最大的参数调优,直到最优化;再拿下一个影响最大的参数调优,如此下去,直到所有的参数调整完毕。这个方法的缺点就是可能会调到局部最优而不是全局最优,但是省时间省力。

    GridSearchCV使用说明

    class sklearn.model_selection.GridSearchCV(estimator, param_grid, scoring=None, n_jobs=None, refit=True, cv='warn', verbose=0, pre_dispatch='2*n_jobs', error_score='raise-deprecating', return_train_score='warn')
    

    参数详解:

    • estimator:所使用的模型,传入除需要确定最佳的参数之外的其他参数。模型都需要一个score方法,或传入scoring参数。

    • param_grid:需要搜索调参的参数字典,参数值类型为字典(dict)或由字典组成的列表(list)。用于设置待评测参数和对应的参数值。

    • scoring:模型评价标准,默认None,这时需要使用score函数;或者如scoring=’roc_auc’,根据所选模型不同,评价准则不同。字符串(函数名),或是可调用对象,需要其函数签名形如:scorer(estimator, X, y);如果是None,则使用estimator的误差估计函数。下文表格中详细指定了score可取的值和函数形式。

    • n_jobs:并行计算线程个数,1:默认值,可以设置为 -1(跟CPU核数一致),这样可以充分使用机器的所有处理器。

    • refit:默认为True,程序将会以交叉验证训练集得到的最佳参数。即在搜索参数结束后,用最佳参数结果再次fit一遍全部数据集。

    • cv:交叉验证参数,可接受的参数:

      • 默认None,使用3折交叉验证。

      • 指定fold数量

      • CV splitter

      • yield训练、测试数据的生成器。

    • verbose:日志冗长度

      • 0:不输出训练过程

      • 1:偶尔输出

      • dayda'y'd1:对每个子模型都输出

    • pre_dispatch:指定总共分发的并行任务数。当n_jobs大于1时,数据将在每个运行点进行复制,这可能导致内存问题,而设置pre_dispatch参数,则可以预先划分总共的job数量,使数据最多被复制pre_dispatch次。

    • error_score:拟合中发生错误时分配的值,如果设置为’raise’则会引发错误。如果设置的是一个数字,则为引发FitFailedWarning的警告信息,默认值将在22版本其由原先的’raise’ 更改为np.nan。

    • return_train_score:如果“False”,cv_results_属性将不包括训练分数。

    GridSearchCV对象

    • cv_results_:用来输出cv结果的,可以是字典形式也可以是numpy形式,还可以转换成DataFrame格式

    • best_estimator_:通过搜索参数得到的最好的估计器,当参数refit=False时该对象不可用

    • best_score_:float类型,输出最好的成绩

    • best_params_:通过网格搜索得到的score最好对应的参数

    • best_index_:对应于最佳候选参数设置的索引(cv_results_数组)。cv_results _ [‘params’] [search.best_index_]中的dict给出了最佳模型的参数设置,给出了最高的平均分数(best_score_)。

    • scorer_:评分函数

    • n_splits_:交叉验证的数量

    • refit_time_:refit所用的时间,当参数refit=False时该对象不可用

    GridSearchCV方法

    • decision_function(X):返回决策函数值(比如svm中的决策距离)

    • fit(X,y=None,groups=None,fit_params):在数据集上运行所有的参数组合

    • get_params(deep=True):返回估计器的参数

    • inverse_transform(Xt):Call inverse_transform on the estimator with the best found params.

    • predict(X):返回预测结果值(0/1)

    • predict_log_proba(X):Call predict_log_proba on the estimator with the best found parameters.

    • predict_proba(X):返回每个类别的概率值(有几类就返回几列值)

    • score(X, y=None):返回函数

    • set_params(**params):Set the parameters of this estimator.

    • transform(X):在X上使用训练好的参数

    使用示例:
    from sklearn.model_selection import GridSearchCV
    from sklearn.svm import SVR
    from sklearn import datasets
    dataset = datasets.load_iris()
    X = dataset.data
    y = dataset.target
    grid = GridSearchCV(
        estimator=SVR(kernel='rbf'),
        param_grid={
            'C': [0.1, 1, 10, 100],
            'epsilon': [0.0001, 0.001, 0.01, 0.1, 1, 10],
            'gamma': [0.001, 0.01, 0.1, 1]
        },
        cv=5, scoring='neg_mean_squared_error', verbose=0, n_jobs=-1)
    grid.fit(X, y)
    print(grid.best_score_)
    print(grid.best_params_)
    

    随机搜索 RandomizedSearchCV

    我们在搜索超参数的时候,如果超参数个数较少(三四个或者更少),那么我们可以采用网格搜索,一种穷尽式的搜索方法。但是当超参数个数比较多的时候,我们仍然采用网格搜索,那么搜索所需时间将会指数级上升。所以有人就提出了随机搜索的方法,随机在超参数空间中搜索几十几百个点,其中就有可能有比较小的值。这种做法比上面稀疏化网格的做法快,而且实验证明,随机搜索法结果比稀疏网格法稍好。

    RandomizedSearchCV使用方法和类GridSearchCV 很相似,但他不是尝试所有可能的组合,而是通过选择每一个超参数的一个随机值的特定数量的随机组合,这个方法有两个优点:

    相比于整体参数空间,可以选择相对较少的参数组合数量。如果让随机搜索运行,它会探索每个超参数的不同的值 可以方便的通过设定搜索次数,控制超参数搜索的计算量。添加参数节点不会影响性能,不会降低效率。RandomizedSearchCV的使用方法其实是和GridSearchCV一致的,但它以随机在参数空间中采样的方式代替了GridSearchCV对于参数的网格搜索,在对于有连续变量的参数时,RandomizedSearchCV会将其当做一个分布进行采样进行这是网格搜索做不到的,它的搜索能力取决于设定的n_iter参数。

    RandomizedSearchCV使用说明

    class sklearn.model_selection.RandomizedSearchCV(estimator, param_distributions, *, n_iter=10, scoring=None, n_jobs=None , refit=True, cv=None, verbose=0, pre_dispatch='2*n_jobs', random_state=None, error_score=nan, return_train_score=False)
    
    与GridSearchCV不同的主要有以下两参数:
    • param_distributions:参数分布,字典格式。将我们所传入模型当中的参数组合为一个字典。其搜索策略如下:

      • 对于搜索范围是distribution的超参数,根据给定的distribution随机采样

      • 对于搜索范围是list的超参数,在给定的list中等概率采样

    • n_iter:训练300次,数值越大,获得的参数精度越大,但是搜索时间越长 使用示例:

    from scipy.stats import randint as sp_randint
    from sklearn.model_selection import RandomizedSearchCV
    from sklearn.datasets import load_digits
    from sklearn.ensemble import RandomForestClassifier
    # 载入数据
    digits = load_digits()
    X, y = digits.data, digits.target
    # 建立一个分类器或者回归器
    clf = RandomForestClassifier(n_estimators=20)
    # 给定参数搜索范围:list or distribution
    param_dist = {"max_depth": [3, None],  # 给定list
                  "max_features": sp_randint(1, 11),  # 给定distribution
                  "min_samples_split": sp_randint(2, 11),  # 给定distribution
                  "bootstrap": [True, False],  # 给定list
                  "criterion": ["gini", "entropy"]}  # 给定list
    # 用RandomSearch+CV选取超参数
    n_iter_search = 20
    random_search = RandomizedSearchCV(clf, param_distributions=param_dist, n_iter=n_iter_search, cv=5, iid=False)
    random_search.fit(X, y)
    print(random_search.best_score_)
    print(random_search.best_params_)
    

    自动超参数优化方法

    贝叶斯优化方法(Bayesian Optimization)

    贝叶斯优化用于机器学习调参由J. Snoek(2012)提出,主要思想是,给定优化的目标函数(广义的函数,只需指定输入和输出即可,无需知道内部结构以及数学性质),通过不断地添加样本点来更新目标函数的后验分布(高斯过程,直到后验分布基本贴合于真实分布。简单的说,就是考虑了上一次参数的信息,从而更好的调整当前的参数。

    贝叶斯优化与常规的网格搜索或者随机搜索的区别是:
    • 贝叶斯调参采用高斯过程,考虑之前的参数信息,不断地更新先验;网格搜索未考虑之前的参数信息

    • 贝叶斯调参迭代次数少,速度快;网格搜索速度慢,参数多时易导致维度爆炸

    • 贝叶斯调参针对非凸问题依然稳健;网格搜索针对非凸问题易得到局部最优

    • 贝叶斯优化提供了一个优雅的框架来尽可能少的步骤中找到全局最小值。

    让我们构造一个函数c(x)或者一个接收输入x的模型,如下图所示为c(x)的形状。当然,优化器并不知道该函数,称之为“目标函数”。

    贝叶斯优化通过代理优化的方式来完成任务。代理函数通过采样点模拟构造(见下图)。

    根据代理函数,我们大致可以确定哪些点是可能的最小值。然后再这些点附近做更多的采样,并随之更新代理函数。

    每一次迭代,我们都会继续观察当前的代用函数,通过采样了解更多感兴趣的区域,并更新函数。需要注意的是,代用函数在数学上的表达方式将大大降低评估成本。经过一定的迭代次数后,我们注定要到达一个全局最小值,除非函数的形状非常诡异。

    让我们仔细看看代用函数,通常用高斯过程来表示,它可以被认为是掷骰子,返回与给定数据点(如sin、log)拟合的函数,而不是1到6的数字。这个过程会返回几个函数,这些函数都附有概率。为什么用高斯过程,而不是其他的曲线拟合方法来模拟代用函数,有一个很好的理由:它是贝叶斯性质的。代用函数–表示为概率分布,即先验–被更新为 “获取函数”。这个函数负责在勘探和开发的权衡中提出新的测试点。

    • “开发”力求在代用模型预测的目标好的地方采样。这就是利用已知的有希望的点。但是,如果我们已经对某一区域进行了足够的探索,那么不断地利用已知的信息就不会有什么收获。

    • “探索”力求在不确定性较高的地点进行采样。这就确保了空间的任何主要区域都不会未被探索–全局最小值可能恰好就在那里。

    一个鼓励过多的开发和过少探索的获取函数将导致模型只停留在它首先发现的最小值(通常是局部的–“只去有光的地方”)。一个鼓励相反的获取函数将不会首先停留在一个最小值,本地或全球。在微妙的平衡中产生良好的结果。acquisition 函数,我们将其表示为a(x),必须同时考虑开发和探索。常见的获取函数包括预期改进和最大改进概率,所有这些函数都是在给定先验信息(高斯过程)的情况下,衡量特定投入在未来可能得到回报的概率。

    让我们把这些东西整合起来。贝叶斯优化可以这样进行。
    1. 初始化一个高斯过程 “代用函数 “的先验分布。

    2. 选择几个数据点x,使在当前先验分布上运行的获取函数a(x)最大化。

    3. 评估目标成本函数c(x)中的数据点x,得到结果,y。

    4. 用新的数据更新高斯过程先验分布,以产生一个后验(它将成为下一步的先验)。

    5. 重复步骤2-5进行多次迭代。

    6. 解释当前的高斯过程分布(这是非常便宜的),以找到全局最小值。

    贝叶斯优化就是把概率论的思想放在代入优化的思想后面。综上所述:
    • 代用优化利用代用函数或近似函数通过抽样来估计目标函数。

    • 贝叶斯优化将代用优化置于概率框架中,将代用函数表示为概率分布,可以根据新的信息进行更新。

    • 获取函数用于评估在当前已知的先验条件下,探索空间中某一点会产生 “好 “收益的概率,平衡探索与开发

    • 主要在目标函数评估成本很高的时候使用贝叶斯优化,常用于超参数调整。

    Hyperopt

    Hyperopt是一个强大的Python库,用于超参数优化,由jamesbergstra开发。Hyperopt使用贝叶斯优化的形式进行参数调整,允许你为给定模型获得最佳参数。它可以在大范围内优化具有数百个参数的模型。

    Hyperopt包含4个重要的特性

    1、搜索空间

    hyperopt有不同的函数来指定输入参数的范围,这些是随机搜索空间。选择最常用的搜索选项:

    • choice(label, options)-这可用于分类参数,它返回其中一个选项,它应该是一个列表或元组。示例:hp.choice(“criterion”,[“gini”,”entropy”,])

    • randint(label, upper)-可用于整数参数,它返回范围(0,upper)内的随机整数。示例:hp.randint(“max_features”,50)

    • uniform(label, low, high)-它返回一个介于low和high之间的值。示例:hp.uniform(“max_leaf_nodes”,1,10)

    你可以使用的其他选项包括:

    • normal(label, mu, sigma)-这将返回一个实际值,该值服从均值为mu和标准差为sigma的正态分布

    • qnormal(label, mu, sigma, q)-返回一个类似round(normal(mu, sigma) / q) * q的值

    • lognormal(label, mu, sigma)-返回exp(normal(mu, sigma))

    • qlognormal(label, mu, sigma, q) -返回一个类似round(exp(normal(mu, sigma)) / q) * q的值

    2、目标函数

    这是一个最小化函数,它从搜索空间接收超参数值作为输入并返回损失。这意味着在优化过程中,我们使用选定的超参数值训练模型并预测目标特征,然后评估预测误差并将其返回给优化器。优化器将决定要检查哪些值并再次迭代。你将在一个实际例子中学习如何创建一个目标函数。

    3、fmin
    • fmin函数是对不同的算法集及其超参数进行迭代,然后使目标函数最小化的优化函数。fmin有5个输入是:

    • 最小化的目标函数

    • 定义的搜索空间

    • 使用的搜索算法有随机搜索、TPE(Tree-Parzen估计器)和自适应TPE。注意:rand.suggest以及hyperopt.tpe.suggest为超参数空间的顺序搜索提供逻辑。

    • 最大评估数

    • trials对象(可选)

    4、试验对象

    Trials对象用于保存所有超参数、损失和其他信息,这意味着你可以在运行优化后访问它们。此外,trials 可以帮助你保存和加载重要信息,然后继续优化过程。

    Hyperopt的使用

    在理解了Hyperopt的重要特性之后,下面将介绍Hyperopt的使用方法。

    • 初始化要搜索的空间

    • 定义目标函数

    • 选择要使用的搜索算法

    • 运行hyperopt函数

    • 分析测试对象中存储的评估输出

    from sklearn import datasets
    from hyperopt import fmin, tpe, hp, STATUS_OK, Trials
    from sklearn.neighbors import KNeighborsClassifier
    from sklearn.model_selection import cross_val_score
    iris = datasets.load_iris()
    X = iris.data
    y = iris.target
    def hyperopt_train_test(params):
        clf = KNeighborsClassifier(**params)
        return cross_val_score(clf, X, y).mean()
    # 定义参数空间
    space_knn = {
        'n_neighbors': hp.choice('n_neighbors', range(1, 100))
    }
    # 定义最小化函数(目标函数)
    def fn_knn(params):
        acc = hyperopt_train_test(params)
        return {'loss': -acc, 'status': STATUS_OK}  # hyperopt最小化函数,所以在acc中添加了负号
    # 实例化Trial 对象,对模型进行微调,然后用其超参数值打印出最佳损失
    trials = Trials()
    best = fmin(fn_knn, space_knn, algo=tpe.suggest, max_evals=100, trials=trials)
    print("Best: {}".format(best))
    print(trials.results)  # 搜索期间“objective”返回的词典列表。
    
    algo指定搜索算法,目前支持以下算法:
    • 随机搜索(hyperopt.rand.suggest)

    • 模拟退火(hyperopt.anneal.suggest)

    • TPE算法(tpe.suggest,算法全称为Tree-structured Parzen Estimator Approach)

    除了Hyperopt外,贝叶斯优化方法的Python包还有:

    • https://github.com/optuna/optuna

    • https://github.com/fmfn/BayesianOptimization

    • https://github.com/HIPS/Spearmint

    遗传算法(Genetic Algorithms)

    遗传算法试图将自然选择机制应用于机器学习环境。它受到达尔文自然选择过程的启发,因此通常也称为进化算法。假设我们创建了具有一些预定义超参数的N个机器学习模型。然后,我们可以计算每个模型的准确性,并决定只保留一半模型(性能最好的模型)。现在,我们可以生成具有与最佳模型相似的超参数的后代,以便再次获得N个模型的种群。在这一点上,我们可以再次计算每个模型的准确性,并在定义的世代中重复该循环。这样,只有最佳模型才能在流程结束时生存下来。

    TPOT是一种基于遗传算法优化机器学习管道(pipeline)的Python自动机器学习工具。简单来说,就是TPOT可以智能地探索数千个可能的pipeline,为数据集找到最好的pipeline,从而实现机器学习中最乏味的部分。

    更重要地是,一旦TPOT完成搜索,TPOT同时也提供了Python代码。通过这个代码,我们可以具体地知道TPOT获得最优性能时的具体pipeline的内容,这对于后续修改是十分方便的!

    TPOT是在sklearn的基础之上做的封装库。其主要封装了sklearn的模型相关模块、processesing模块和feature_selection模块,所以TPOT的主要功能是集中在使用pipeline的方式完成模型的数据预处理、特征选择和模型选择方面。此外,我们还发现了TPOT已经对xgboost进行了支持。

    虽然TPOT使用遗传算法代替了传统的网格搜索进行超参数选择,但由于默认初始值的随机性,在少量的进化(迭代)次数下,TPOT最终选择的模型往往并不相同。

    计算效率问题。作者在代码中写道:进化(迭代)次数和每一代保留的个体数量值越多,最终得模型得分会越高。但这同样也会导致耗时很长。如果使用相当复杂的数据集或运行TPOT短时间,不同的TPOT运行可能会导致不同的流水线推荐。TPOT的优化算法本质上是随机的,这意味着它使用随机性(部分地)来搜索可能的流水线空间。当两个TPOT运行推荐不同的管道时,这意味着TPOT运行由于时间不够而不收敛,或者多个管道在数据集上执行的次数大致相同。这实际上是一个优于固定网格搜索技术的优点:TPOT是一个助手,它通过探索您可能从未考虑过的流水线配置来提供解决如何解决特定机器学习问题的想法,然后将微调留给更受约束的参数调整技术,例如网格搜索。

    使用TPOT(版本0.9.5)开发模型需要把握以下几点:

    • 在使用TPOT进行建模前需要对数据进行必要的清洗和特征工程操作。

    • TPOT目前只能做有监督学习。

    • TPOT目前支持的分类器主要有贝叶斯、决策树、集成树、SVM、KNN、线性模型、xgboost。

    • TPOT目前支持的回归器主要有决策树、集成树、线性模型、xgboost。

    • TPOT会对输入的数据做进一步处理操作,例如二值化、聚类、降维、标准化、正则化、独热编码操作等。

    • 根据模型效果,TPOT会对输入特征做特征选择操作,包括基于树模型、基于方差、基于F-值的百分比。

    • 可以通过export()方法把训练过程导出为形式为sklearn pipeline的.py文件

    示例代码:

    from tpot import TPOTClassifier
    from sklearn.datasets import load_iris
    from sklearn.model_selection import train_test_split
    iris = load_iris()
    X = iris.data
    y = iris.target
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
    tpot = TPOTClassifier(generations=5, population_size=50, verbosity=2, n_jobs=-1)
    tpot.fit(X_train, y_train)
    print(tpot.score(X_test, y_test))
    

    TPOT的主要参数:

    • generations – 确定创建子代(新个体)的迭代次数

    • population_size – 创建个体的初始数量(这些用于创建后代)

    • offspring_size – 每一代所需创造的新个体数

    • mutation_rate – 出现属性值随机更改的概率(包括新参数的方法,在初始群体中可能不可用)

    • crossover_rate –用于创造后代的个体所占的百分比

    使用这个迭代过程,我们选出最佳配置。准备遗传算法的结果一般取决于初始状态。因此,它随机产生的初始种群影响输出,重新运行相同的设置可能会输出不同的结果。

    算法赛交流群已成立

    学习数据竞赛,组队参赛,交流分享

    若进群失败,可在后台回复【竞赛群】

    如果加入了之前的社群不需要重复添加!

    “干货学习,点赞三连

    展开全文
  • 针对此问题, 提出一种基于改进鲨鱼优化算法的自抗扰控制器参数优化设计方法.为解决基本鲨鱼优化算法易陷入局部最优解、算法后期收敛速度慢的问题,提出混合交叉变异策略与双种群协同机制,以ITAE指标为自抗扰控制器...
  • 智能优化算法应用:基于麻雀搜索算法PID参数优化 - 附代码 文章目录智能优化算法应用:基于麻雀搜索算法PID参数优化 - 附代码1.PID简介2.麻雀搜索算法简介3.适应度函数设计4.算法实验与结果5.参考文献:6.Matlab ...

    智能优化算法应用:基于麻雀搜索算法PID参数优化 - 附代码


    摘要:本文主要介绍如何用麻雀搜索算法进行PID参数的优化。

    1.PID简介

    PID(Proportion-Integration-Differentiation)控 制 器通过比例单元 P、积分单元 I和微分单元 D 的线性组合构成控制量来实现对被控对象的控制,主要适用于基本线性和动态特性不随时间变化的系统。不同的控制规律适用于不同的生产过程,必须合理选择相应的控制规律,否则PID控制器将达不到预期的控制效果当PID控制器采样周期较小时,可以将连续系统离散化,即以一阶差分代替微商,求和代替积分,矩形积分近似代替连续积分,得到如下差分方程:
    Δ u ( t ) = K p Δ e ( k ) + K i Δ e ( k ) + K d Δ 2 e ( k ) (1) \Delta u(t)=K_p \Delta e(k) + K_i \Delta e(k) + K_d \Delta ^2e(k)\tag{1} Δu(t)=KpΔe(k)+KiΔe(k)+KdΔ2e(k)(1)
    其中e为输入, K p K_p Kp 为比例系数, K i K_i Ki 为积分时间常数, K d K_d Kd 为微分时间常数。

    2.麻雀搜索算法简介

    麻雀搜索算法具体原理请参照:https://blog.csdn.net/u011835903/article/details/108830958

    3.适应度函数设计

    在此算法中,目标函数设置如下:
    F = ∫ 0 ∞ ( w 1 ∣ e ( t ) ∣ + w 2 u 2 ( t ) ) d t (2) F = \int_{0}^{\infty}(w_1|e(t)|+w_2u^2(t))dt \tag{2} F=0(w1e(t)+w2u2(t))dt(2)

    其中, e ( t ) e(t) e(t) 为输入值与输出值之间的误差,考虑到迭代过程的动态特性,采取其绝对值的积分; u ( t ) u(t) u(t) 为控制值,加入此项是为了避免控制幅度过大; w 1 w_1 w1 ω 2 ω_2 ω2 为权重,取值范围[0,1]。

    此外,还需采取限制措施防止超调,即当出现超调时,在目标函数中额外引入超调项,此时的设置如下:
    F = ∫ 0 ∞ ( w 1 ∣ e ( t ) ∣ + w 2 u 2 ( t ) + w 3 ∣ e ( t ) ∣ ) d t , e ( t ) < 0 (3) F =\int_{0}^{\infty}(w_1|e(t)| + w_2u^2(t)+w_3|e(t)|)dt,e(t)<0 \tag{3} F=0(w1e(t)+w2u2(t)+w3e(t))dt,e(t)<0(3)
    其中, w 3 w_3 w3为权值,且 w 3 > > w 1 w_3 >>w_1 w3>>w1 ,一般情况下, w 1 = 0.999 , w 2 = 0.001 , w 3 = 100 w_1 =0.999,w_2 =0.001 , w_3 =100 w1=0.999w2=0.001w3=100

    所以麻雀算法的目标就是找到一组pid值,使得F误差最小。

    4.算法实验与结果

    本文选择二阶系统的传递函数:
    G ( s ) = 50 / ( 0.125 s 2 + 7 s ) (4) G(s) = 50/(0.125s^2+7s) \tag{4} G(s)=50/(0.125s2+7s)(4)
    麻雀算法参数设置如下:

    SearchAgents_no=50; %  种群数量
    Max_iteration=100; %  设定最大迭代次数
    lb = -5; %下边界
    ub = 5;  %上边界
    dim = 3; %维度pid3个参数
    S = 1;% 1为单位阶跃响应,其他为正弦输入
    fobj = @(X) PID_controller(X,S);%适应度函数
    
    

    单位阶跃响应寻优结果:

    在这里插入图片描述

    kp,ki,kd的值为:5 0.047998 0.045294

    正弦函数输入结果:

    在这里插入图片描述

    kp,ki,kd的值为:5 -5 2.0404

    从收敛曲线来看,单位阶跃和正弦输入,算法都在不断寻优。从单位阶跃响应来看,系统上升时间和超调均较小,控制效果明显。从正弦输入结果来看,输入与输出控制量误差较小。

    5.参考文献:

    [1] 贺圣彦, 曹中清, 余胜威. 基于花授粉算法的PID参数优化[J]. 计算机工程与应用, 2016.

    6.Matlab 代码

    基于麻雀搜索算法PID参数优化
    粒子群优化的PID参数优化
    灰狼优化的PID参数优化
    鲸鱼优化的PID参数优化
    人工蜂群优化的PID参数优化
    萤火虫优化的PID参数优化
    布谷鸟优化的PID参数优化
    海鸥优化的PID参数优化
    鸡群优化的PID参数优化
    花授粉优化的PID参数优化
    头脑风暴优化的PID参数优化
    蝗虫优化的PID参数优化
    鸟群优化的PID参数优化
    差分进化优化的PID参数优化
    遗传算法优化的PID参数优化
    樽海鞘算法优化的PID参数优化
    教与学算法优化的PID参数优化

    个人资料介绍

    展开全文
  • 鲸鱼算法优化函数,自定义参数与目标函数,优化迭代过程
  • 模型参数优化(一):遗传算法

    万次阅读 2019-06-25 15:57:39
    参数是指算法中的未知数,有的需要人为指定,比如神经网络算法中的学习...常用的参数优化方法主要包括交叉验证、网格搜索、遗传算法、粒子群优化、模拟退火,本节介绍遗传算法。 遗传算法实质:选定一批最佳参数,...
  • 由于支持向量机的主要参数的选择能够在很大程度上影响分类性能和效果,并且目前参数优化缺乏理论指导,提出一种粒子群优化算法以优化支持向量机参数的方法.该方法通过引入非线性递减惯性权值和异步线性变化的学习...
  • 智能优化算法:蝗虫优化算法-附代码

    千次阅读 热门讨论 2020-07-30 17:20:04
    智能算法:蝗虫优化算法-附代码 摘要:蝗虫算法( Grasshopper Optimization Algorithm,GOA ) 是 由 Saremi 等[1]于2017 年提出的一种元启发式仿生优化算法,具有较高的搜索效率和较快的收敛速度,且算法本身特殊的...
  • LM迭代优化算法

    2013-10-23 20:53:48
    L-M迭代优化算法,为非线性参数迭代优化算法,用于非线性的拟合
  • 本书介绍了8种经典智能优化算法——遗传算法、差分进化算法、免疫算法、蚁群算法、粒子群算法、模拟退火算法、禁忌搜索算法和神经网络算法的来源、原理、算法流程和关键参数说明,并给出了具体的MATLAB仿真实例。...
  • 通过粒子群算法优化PID参数, 通过粒子群算法优化PID参数
  • 一篇关于蚁群算法优化SVM参数的论文,具有很好的参考价值
  • 本程序有算例分析,详细介绍了三种优化SVM方法:遗传算法、PSO、网格搜索法
  • 一个自己编的遗传算法用来整定PID控制器的参数,运行良好。优化参数良好,可以直接用在MATLAB上仿真,有注释
  • 用遗传算法对支持向量机的参数进行优化,从而提高分类准确率
  • 基于改进粒子群算法的深度学习超参数优化方法.pdf
  • svm参数优化及相关优化算法代码 svm参数优化及相关优化算法代码!svm参数优化及相关优化算法代码
  • 利用matlab对SVM算法参数进行优化,从而更好的提升分类性能

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 427,184
精华内容 170,873
关键字:

参数优化算法