精华内容
下载资源
问答
  • 给出按照路线寻求最优运输分配方案网络优化模型。另外,对于稍微复杂一些有向有环运输网络,通常路线搜索方法比较复杂且不易理解。给出了基于关系矩阵搜索有向有环网络有效路线方法,建立了具有供应约束、路口...
  • 4 什么是模型的欠拟合和过拟合?5 如何判断模型是否存在过拟合或欠拟合?对应的解决方法有哪些?6 什么是正则化?什么是L1正则化和L2正则化?7 正则化为什么可以防止过拟合?8 L1和L2的区别以及分别服从什么分布9 ...

    目录:

    1 简单介绍一下风控模型常用的评估指标

    2 为什么ROC适合不平衡数据的评价?

    3 如何处理样本不平衡的问题?

    4 什么是模型的欠拟合和过拟合?

    5 如何判断模型是否存在过拟合或欠拟合?对应的解决方法有哪些?

    6 什么是正则化?什么是L1正则化和L2正则化?

    7 正则化为什么可以防止过拟合?

    8  L1和L2的区别以及分别服从什么分布

    9 什么是交叉验证?交叉验证的目的是什么?有哪些优点?

    10 交叉验证常用的方法有哪些?

    简单介绍一下风控模型常用的评估指标。

    混淆矩阵指标:精准率,查全率,假正率。当模型最后转化为规则时,一般用这三个指标来衡量规则的有效性。要么注重精准率,要么注重查全率,两者不可兼而得之。

    ROC曲线和AUC值,ROC曲线是一种对于查全率和假正率的权衡,具体方法是在不同阈值下以查全率作为纵轴,假正率作为横轴绘制出一条曲线。曲线越靠近左上角,意味着越多的正例优先于负例,模型的整体表现也就越好。AUCROC曲线下面的面积,AUC可以解读为从所有正例中随机选取一个样本A,再从所有负例中随机选取一个样本B,分类器将A判为正例的概率比将B判为正例的概率大的可能性。在对角线(随机线)左边的点上TPR总大于FPR,意为正例被判为正例的概率大于负例被判为正例的概率。从另一个角度看,由于画ROC曲线时都是先将所有样本按分类器的预测概率排序,所以AUC反映的是分类器对样本的排序能力。AUC越大,自然排序能力越好,即分类器将越多的正例排在负例之前。

    KS:用于区分预测正负样本分隔程度的评价指标,KS越大,表示模型能将好坏样本区分开的程度越大。KS的绘制方法是先将每个样本的预测结果化为概率或者分数,将最低分到最高分(分数越低,坏的概率越大)进行排序做样本划分,横轴就是样本的累计占比,纵轴则是好坏用户的累计占比分布曲线,KS值为两个分布的最大差值(绝对值)。KS值仅能代表模型的区隔能力,KS不是越高越好,KS如果过高,说明好坏样本分的过于开了,这样整体分数(概率)就是比较极端化的分布状态,这样的结果基本不能用。

    基尼系数:其横轴是根据分数(概率)由高到低累计的好用户占总的好用户的比例,纵轴是分数(概率)从高到低坏用户占总的坏用户的比例。由于分数高者为低风险用户,所以累计坏用户比例的增长速度会低于累计好用户比例,因此,基尼曲线会呈现向下弯曲的形式,向下突出的半月形的面积除以下方三角形的面积即是基尼系数。基尼系数越大,表示模型对于好坏用户的区分能力越好。

    为什么ROC适合不平衡数据的评价?

    ROC曲线的纵轴是TPR=  ,横轴是FPR=  ,TPR聚焦于正例,FPR聚焦于与负例,所以ROC兼顾了正样本和负样本的权衡,使其成为一个比较均衡的评估方法。

    因为TPR用到的TPFN都是正样本,FPR用到的FPTN都是负样本,所以说正样本或负样本发生了改变,TPRFPR也不会相互影响,因此即使类别分布发生了改变,数据变得不平衡了,ROC曲线也不会产生大的变化。ROC曲线的优点,即具有鲁棒性,在类别分布发生明显改变的情况下依然能客观地识别出较好的分类器。

    如何处理样本不平衡的问题?

    在风控建模中出现样本不平衡主要是坏样本的数量太少,碰到这个问题不要急着试各种抽样方法,先看一下坏用户的定义是否过于严格,过于严格会导致坏样本数量偏少,中间样本偏多。坏用户的定义一般基于滚动率分析的结果,不过实际业务场景复杂多样,还是得根据情况而定。

    确定好坏用户定义是比较合理的之后,先尝试能不能扩大数据集,比如一开始取得是三个月的用户数据,试着将时间线延长来增加数据。因为机器学习是使用现在的数据在整个数据分布上进行估计,因此更多的数据往往能够得到更多的分布信息,以及更好的分布估计。

    对数据集进行抽样,一种是进行欠采样,通过减少大类的数据样本来降低数据的不平衡,另一种是进行过采样,通过增加小类数据的样本来降低不平衡,实际工作中常用SMOTE方法来实现过采样。

    尝试使用xgboost和lightgbm等对不平衡数据处理效果较好的模型。

    尝试从新的角度来理解问题,可以把那些小类样本当做异常点,因此该分类问题转化为异常检测问题或变化趋势检测问题,这种方法笔者很少用到,就不详细说明了。

    什么是模型的欠拟合和过拟合?

    欠拟合指的是模型没有很好的捕捉到数据特征,不能很好的拟合数据。

    过拟合指的是模型把数据学习的太彻底,以至于把噪声数据学习进去了,这样模型在预测未知数据时,就不能正确的分类,模型的泛化能力太差。

    如何判断模型是否存在过拟合或欠拟合?对应的解决方法有哪些?

    判断模型是否存在过拟合/欠拟合主要用学习曲线,学习曲线指的是通过画出不同训练集大小时训练集和交叉验证的准确率,可以看到模型在新数据上的表现,进而来判断模型是否方差偏高(过拟合)或偏差过高(欠拟合)。当训练集和测试集的误差收敛但却很高时,即为欠拟合,当训练集和测试集的误差之间有大的差距时,为过拟合。

    解决欠拟合的方法:增加效果好的特征,添加多项式特征,减小正则化参数等。

    解决过拟合的方法:使用更多的数据,选择更加合适的模型,加入正则项等。

    什么是正则化?什么是L1正则化和L2正则化?

    正则化是在模型的loss function的基础上,加上了一些正则化项或者称为模型复杂度惩罚项,它会向学习算法略微做些修正,从而让模型能更好地泛化。这样反过来能提高模型在不可见数据上的性能。

    L1正则化就是在loss function后边所加正则项为L1范数,加上L1范数容易得到稀疏解,所以L1正则化会趋向于产生少量的特征。

    L2正则化就是loss function后边所加正则项为L2范数的平方,加上L2正则相比于L1正则来说,得到的解比较平滑(不是稀疏),所以L2正则化会使特征的解趋近于0,但不会为0

    正则化为什么可以防止过拟合?

    最简单的解释是正则化对模型参数添加了先验,在数据少的时候,先验知识可以防止过拟合。举个例子:抛一枚硬币5次,得到的全是正面,则得出结论:正面朝上的概率为1,这类似于模型的过拟合,如果加上硬币朝上的概率是0.5的先验,结果就不会这么离谱,这就是正则。

    8  L1和L2的区别以及分别服从什么分布

    L1是拉普拉斯分布,L2是高斯分布。

    L1范数x向量各个元素绝对值之和;L2范数x向量各个元素平方和的1/2次方。

    L1范数可以使权值稀疏,方便特征提取;L2范数可以防止过拟合,提升模型的泛化能力。

    L1和L2的差别,一个让绝对值最小,一个让平方最小,会有那么大的差别呢?看导数一个是1一个是w便知在靠进零附近, L1以匀速下降到零L2则完全停下来了这说明L1是将不重要的特征尽快剔除, L2则是把特征贡献尽量压缩最小但不至于为零两者一起作用就是把重要性在一个数量级的那些特征一起平等共事(简言之不养闲人也不要超人)

    什么是交叉验证?交叉验证的目的是什么?有哪些优点?

    交叉验证概念:

    交叉验证,就是重复的使用数据,把得到的样本数据进行切分,组合为不同的训练集和测试集,用训练集来训练模型,用测试集来评估模型预测的好坏。在此基础上可以得到多组不同的训练集和测试集,某次训练集中的某样本在下次可能成为测试集中的样本,即所谓"交叉"。 

    交叉验证的目的:

    评估给定算法在特定数据集上训练后的泛化性能,比单次划分训练集和测试集的方法更加稳定,全面。

    交叉验证的优点:

    如果只是对数据随机划分为训练集和测试集,假如很幸运地将难以分类的样本划分进训练集中,则在测试集会得出一个很高的分数,但如果不够幸运地将难以分类的样本划分进测试集中,则会得到一个很低的分数。所以得出的结果随机性太大,不够具有代表性。而交叉验证中每个样本都会出现在训练集和测试集中各一次,因此,模型需要对所有样本的泛化能力都很好,才能使其最后交叉验证得分,及其平均值都很高,这样的结果更加稳定,全面,具有说服力。

    对数据集多次划分后,还可以通过每个样本的得分比较,来反映模型对于训练集选择的敏感性信息。

    对数据的使用更加高效,可以得到更为精确的模型。

    10 交叉验证常用的方法有哪些?

    标准K折交叉验证:K是自定义的数字,通常取510,如果设为5折,则会训练5个模型,得到5个精度值。

    分层K折交叉验证:如果一个数据集经过标准K折划分后,在测试集上只有一种类别,则无法给出分类器整体性能的信息,这种情况用标准K折是不合理的。而在分层K折交叉验证中,每个折中的类别比例与整个数据集类别比例相同,这样能对泛化性能做出更可靠的估计。

    留一法交叉验证:每次划分时,把单个数据点作为测试集,如果数据量小,能得到更好的估计结果,数据量很大时则不适用。

    打乱划分交叉验证:每次划分数据时为训练集取样train_size个点,为测试集取样test_size个点,将这一划分划分方法重复n_splits次。这种方法还允许每次迭代中使用部分数据,可通过设置train_sizetest_size之和不为0来实现,用这种方法对数据进行二次采样可能对大型数据上的试验很用用。另外也有分层划分的形式( StratifiedShuffleSplit),为分类任务提供更可靠的结果。

    分组交叉验证:适用于数据中的分组高度相关时,以group数组作为参数,group数组表示数据中的分组,在创建训练集和测试集的时候不应该将其分开,也不应该与类别标签弄混。

    ffdb814d8ed1403ba0294c473fbf17bf.png

    展开全文
  • 基础模型超参优化

    2021-03-24 22:15:59
    网格搜索相比,这有两个主要优点: 可以独立于参数数量和可能值来选择计算成本。 添加影响性能参数不会降低效率。 贝叶斯优化。 贝叶斯优化用于机器学习调参由J. Snoek(2012)提出,主要思想是,给定优化的...

    网格搜索GridSearchCV():

    把所有的超参数选择列出来分别做排列组合,然后选择测试误差最小的那组超参数。

    随机搜索 RandomizedSearchCV() :

    参数的随机搜索中的每个参数都是从可能的参数值的分布中采样的。从指定的分布中采样固定数量的参数设置
    与网格搜索相比,这有两个主要优点:

    1. 可以独立于参数数量和可能的值来选择计算成本。
    2. 添加不影响性能的参数不会降低效率。

    贝叶斯优化。

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

    贝叶斯优化与常规的网格搜索或者随机搜索的区别是:

    1.贝叶斯调参采用高斯过程,考虑之前的参数信息,不断地更新先验;网格搜索未考虑之前的参数信息。
    2.贝叶斯调参迭代次数少,速度快;网格搜索速度慢,参数多时易导致维度爆炸。
    3.贝叶斯调参针对非凸问题依然稳健;网格搜索针对非凸问题易得到局部优最。

    详细原理:https://www.sohu.com/a/165565029_465975

    # 我们先来对未调参的SVR进行评价: 
    from sklearn.svm import SVR     # 引入SVR类
    from sklearn.pipeline import make_pipeline   # 引入管道简化学习流程
    from sklearn.preprocessing import StandardScaler # 由于SVR基于距离计算,引入对数据进行标准化的类
    from sklearn.model_selection import GridSearchCV  # 引入网格搜索调优
    from sklearn.model_selection import cross_val_score # 引入K折交叉验证
    from sklearn import datasets
    import numpy as np
    
    
    boston = datasets.load_boston()     # 返回一个类似于字典的类
    X = boston.data
    y = boston.target
    features = boston.feature_names
    pipe_SVR = make_pipeline(StandardScaler(),
                                                             SVR())
    score1 = cross_val_score(estimator=pipe_SVR,
                                                         X = X,
                                                         y = y,
                                                         scoring = 'r2',
                                                          cv = 10)       # 10折交叉验证
    print("CV accuracy: %.3f +/- %.3f" % ((np.mean(score1)),np.std(score1)))
    #
    CV accuracy: 0.187 +/- 0.649
    
    # 下面我们使用网格搜索来对SVR调参:
    from sklearn.pipeline import Pipeline
    pipe_svr = Pipeline([("StandardScaler",StandardScaler()),
                                                             ("svr",SVR())])
    param_range = [0.0001,0.001,0.01,0.1,1.0,10.0,100.0,1000.0]
    param_grid = [{"svr__C":param_range,"svr__kernel":["linear"]},  # 注意__是指两个下划线,一个下划线会报错的
                                {"svr__C":param_range,"svr__gamma":param_range,"svr__kernel":["rbf"]}]
    gs = GridSearchCV(estimator=pipe_svr,
                                                         param_grid = param_grid,
                                                         scoring = 'r2',
                                                          cv = 10)       # 10折交叉验证
    gs = gs.fit(X,y)
    print("网格搜索最优得分:",gs.best_score_)
    print("网格搜索最优参数组合:\n",gs.best_params_)
    
    # 下面我们使用随机搜索来对SVR调参:
    from sklearn.model_selection import RandomizedSearchCV
    from scipy.stats import uniform  # 引入均匀分布设置参数
    pipe_svr = Pipeline([("StandardScaler",StandardScaler()),
                                                             ("svr",SVR())])
    distributions = dict(svr__C=uniform(loc=1.0, scale=4),    # 构建连续参数的分布
                         svr__kernel=["linear","rbf"],                                   # 离散参数的集合
                        svr__gamma=uniform(loc=0, scale=4))
    
    rs = RandomizedSearchCV(estimator=pipe_svr,
                                                         param_distributions = distributions,
                                                         scoring = 'r2',
                                                          cv = 10)       # 10折交叉验证
    rs = rs.fit(X,y)
    print("随机搜索最优得分:",rs.best_score_)
    print("随机搜索最优参数组合:\n",rs.best_params_)
    
    展开全文
  • 鲁棒的控制器旨在最大程度地减少原始工厂模型的开环所需传递函数之间的误差。 这些结果可以通过使用凸优化方法来实现。 问题表述的凸性确保全局最优性。 所提出方法的优点之一是该方法考虑了多模型确定性。 ...
  • 多说,提到javascript难免会联想到文档对象模型(DOM),它作用于XML和HTML文档程序接口(API),位于浏览器中,主要用来HTML文档打交道。同样也用于Web程序中获取XML文档,并使用DOM API来访问文档中数据。...
  • 控制系统的应用中存在状态能直接测量或测量成本高的实际...该算法的优点在于要求系统模型参数全部已知,要求系统状态直接可测,利用可测量数据实现指定性能指标的优化;最后,通过仿真实验验证所提出方法的有效性.
  • 贝叶斯优化的主要目的是大部分机器学习算法类似,学习模型的表达形式 ,在一定范围内求一个函数的最大(小)值。 贝叶斯优化知道目标函数(黑箱函数)长什么样子的情况下,通过猜测黑箱函数长什么样,来求...

    贝叶斯调参?

    贝叶斯优化可以用于贝叶斯调参。

    贝叶斯调参和grid search 和 random search的区别?

    贝叶斯优化的主要目的是与大部分机器学习算法类似,学习模型的表达形式 ,在一定范围内求一个函数的最大(小)值。

    贝叶斯优化在不知道目标函数(黑箱函数)长什么样子的情况下,通过猜测黑箱函数长什么样,来求一个可接受的最大值。和网格搜索相比,优点是迭代次数少(节省时间),粒度可以到很小,缺点是不容易找到全局最优解。

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

    他与常规的网格搜索或者随机搜索的区别是:

    1. 贝叶斯调参采用高斯过程,考虑之前的参数信息,不断地更新先验;网格搜索未考虑之前的参数信息
    2. 贝叶斯调参迭代次数少,速度快;网格搜索速度慢,参数多时易导致维度爆炸
    3. 贝叶斯调参针对非凸问题依然稳健;网格搜索针对非凸问题易得到局部最优

    一、简介

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

    他与常规的网格搜索或者随机搜索的区别是:

    1. 贝叶斯调参采用高斯过程,考虑之前的参数信息,不断地更新先验;网格搜索未考虑之前的参数信息
    2. 贝叶斯调参迭代次数少,速度快;网格搜索速度慢,参数多时易导致维度爆炸
    3. 贝叶斯调参针对非凸问题依然稳健;网格搜索针对非凸问题易得到局部优最

    二、理论

    介绍贝叶斯优化调参,必须要从两个部分讲起:

    1. 高斯过程,用以拟合优化目标函数
    2. 贝叶斯优化,包括了“开采”和“勘探”,用以花最少的代价找到最优值

    。。。。

    2.2 贝叶斯优化理论

    贝叶斯优化是一种逼近思想,当计算非常复杂、迭代次数较高时能起到很好的效果,多用于超参数确定

    基本思想

    是基于数据使用贝叶斯定理估计目标函数的后验分布,然后再根据分布选择下一个采样的超参数组合。它充分利用了前一个采样点的信息,其优化的工作方式是通过对目标函数形状的学习,并找到使结果向全局最大提升的参数

    高斯过程 用于在贝叶斯优化中对目标函数建模,得到其后验分布

    通过高斯过程建模之后,我们尝试抽样进行样本计算,而贝叶斯优化很容易在局部最优解上不断采样,这就涉及到了开发和探索之间的权衡。

    1. 开发 (exploitation): 根据后验分布,在最可能出现全局最优解的区域进行采样, 开发高意味着均值高
    2. 探索 (exploration): 在还未取样的区域获取采样点, 探索高意味着方差高

    而如何高效的采样,即开发和探索,我们需要用到 Acquisition Function, 它是用来寻找下一个 x 的函数。

    。。。。

    2.3 缺点和不足

    1. 高斯过程核矩阵不好选

    三、例子

    目前可以做贝叶斯优化的包非常多,光是python就有:

    1. BayesianOptimization
    2. bayesopt
    3. skopt
    4. ...

    本文使用BayesianOptimization为例,利用sklearn的随机森林模型进行分类

    安装

    pip install bayesian-optimization

    前期准备

    from sklearn.datasets import make_classification from sklearn.ensemble import RandomForestClassifier from sklearn.cross_validation import cross_val_score from bayes_opt import BayesianOptimization  # 产生随机分类数据集,10个特征, 2个类别x, y = make_classification(n_samples=1000,n_features=10,n_classes=2)

    我们先看看不调参的结果:

    rf = RandomForestClassifier() print(np.mean(cross_val_score(rf, x, y, cv=20, scoring='roc_auc')))>>> 0.965162

    可以看到,不调参的话模型20此交叉验证AUC均值是0.965162,算是一个不错的模型,那么如果用bayes调参结果会怎么样呢

    bayes调参初探

    我们先定义一个目标函数,里面放入我们希望优化的函数。比如此时,函数输入为随机森林的所有参数,输出为模型交叉验证5次的AUC均值,作为我们的目标函数。因为bayes_opt库只支持最大值,所以最后的输出如果是越小越好,那么需要在前面加上负号,以转为最大值。由于bayes优化只能优化连续超参数,因此要加上int()转为离散超参数。

    def rf_cv(n_estimators, min_samples_split, max_features, max_depth):     val = cross_val_score(         RandomForestClassifier(n_estimators=int(n_estimators),             min_samples_split=int(min_samples_split),             max_features=min(max_features, 0.999), # floatmax_depth=int(max_depth),             random_state=2         ),         x, y, scoring='roc_auc', cv=5     ).mean()     return val

    然后我们就可以实例化一个bayes优化对象了:

     rf_bo = BayesianOptimization(         rf_cv,         {'n_estimators': (10, 250),         'min_samples_split': (2, 25),         'max_features': (0.1, 0.999),         'max_depth': (5, 15)}     )

    里面的第一个参数是我们的优化目标函数,第二个参数是我们所需要输入的超参数名称,以及其范围。超参数名称必须和目标函数的输入名称一一对应。

    完成上面两步之后,我们就可以运行bayes优化了!

    rf_bo.maximize()

    完成的时候会不断地输出结果,如下图所示:

    等到程序结束,我们可以查看当前最优的参数和结果:

    rf_bo.res['max']>>> {'max_params': {'max_depth': 5.819908283575526,   'max_features': 0.4951745603509127,   'min_samples_split': 2.3110014720414958,   'n_estimators': 249.73529231990733},  'max_val': 0.9774079407940794}

    bayes调参进阶

    上面bayes算法得到的参数并不一定最优,当然我们会遇到一种情况,就是我们已经知道有一组或是几组参数是非常好的了,我们想知道其附近有没有更好的。这个操作相当于上文bayes优化中的Explore操作,而bayes_opt库给了我们实现此方法的函数:

    rf_bo.explore(     {'n_estimators': [10, 100, 200],         'min_samples_split': [2, 10, 20],         'max_features': [0.1, 0.5, 0.9],         'max_depth': [5, 10, 15]     } )

    这里我们添加了三组较优的超参数,让其在该参数基础上进行explore,可能会得到更好的结果。

    同时,我们还可以修改高斯过程的参数,高斯过程主要参数是核函数(kernel),还有其他参数可以参考sklearn.gaussianprocess

    gp_param={'kernel':None} rf_bo.maximize(**gp_param)

    最终我们的到参数如下:

    {'max_params': {'max_depth': 5.819908283575526,   'max_features': 0.4951745603509127,   'min_samples_split': 2.3110014720414958,   'n_estimators': 249.73529231990733},  'max_val': 0.9774079407940794}

    运行交叉验证测试一下:

    rf = RandomForestClassifier(max_depth=6, max_features=0.39517, min_samples_split=2, n_estimators=250) np.mean(cross_val_score(rf, x, y, cv=20, scoring='roc_auc'))>>> 0.9754953

    得到最终结果是0.9755,比之前的0.9652提高了约0.01,做过kaggle的朋友都懂,这在后期已经是非常大的提高了!到后面想提高0.001都极其困难,因此bayes优化真的非常强大!

    结束!

    Reference

    。。。

    。。。。

    显然这样的问题就无法用基于梯度的方法来优化,这里就是贝叶斯优化的用武之地了

    贝叶斯优化对函数f(x)的形式没有硬性要求,仅仅通过采样,来推测函数的最大值

    而且贝叶斯优化对采样点的数量要求很低,因为他会根据需求才决定采样哪些数据

    那么具体的说,贝叶斯优化到底是怎么做的呢?

    诀窍在下面两点:

    1. 高斯过程(Gaussian process)

    2. 提取函数(acquisition function)

    。。。。

    贝叶斯优化器的介绍

      贝叶斯优化在不知道目标函数(黑箱函数)长什么样子的情况下,通过猜测黑箱函数长什么样,来求一个可接受的最大值。和网格搜索相比,优点是迭代次数少(节省时间),粒度可以到很小,缺点是不容易找到全局最优解。

      贝叶斯优化流程图如下:

    贝叶斯优化有两个核心过程,先验函数(Prior Function,PF)与采集函数(Acquisition Function,AC),采集函数也可以叫效能函数(Utility Funtcion),但一般还是称呼为采集函数。

    。。。。

    贝叶斯优化的应用

      贝叶斯优化器用于调参,可以很快找到一个可以接受的超参数值,和网格搜索相比,优点是迭代次数少(节省时间),粒度可以到很小,缺点是不容易找到全局最优解。例如我们想调logistic回归的正则化超参数,就把黑箱函数设置成logistic回归,自变量为超参数,因变量为logistic回归在训练集准确度,设置一个可以接受的黑箱函数因变量取值,例如0.95,得到的超参数结果就是可以让logistic回归分类准确度超过0.95的一个超参数。

     

    参考:强大而精致的机器学习调参方法:贝叶斯优化

    参考:浅谈:高斯过程与贝叶斯优化

    参考:机器学习贝叶斯超参数优化

    参考:教程 | 拟合目标函数后验分布的调参利器:贝叶斯优化

    展开全文
  • 通过积分推导出接收面照度和功率表达式,构建了矩形布局优化模型函数F(l,x,y)和圆形布局优化模型函数F(r,x,y),并根据优化函数研究了照度均方差房间尺寸、最佳布局视场角关系。仿真结果表明:LED矩形布局光源...
  • 相机模型与标定(九)--LM算法

    千次阅读 2016-07-26 15:09:41
    LM算法实现并算难,它关键是用模型函数 f 对待估参数向量p在其领域内做线性近似,忽略掉二阶以上导数项,从而转化为线性最小二乘问题,它具有收敛速度快等优点。LM算法属于一种“信赖域法”——所谓信赖域...

    LM算法,全称为Levenberg-Marquard,它可用于解决非线性最小二乘问题,多用于曲线拟合等场合。

    LM算法的实现并不算难,它的关键是用模型函数 f 对待估参数向量p在其领域内做线性近似,忽略掉二阶以上的导数项,从而转化为线性最小二乘问题,它具有收敛速度快等优点。LM算法属于一种“信赖域法”——所谓的信赖域法,此处稍微解释一下:在最优化算法中,都是要求一个函数的极小值,每一步迭代中,都要求目标函数值是下降的,而信赖域法,顾名思义,就是从初始点开始,先假设一个可以信赖的最大位移s,然后在以当前点为中心,以s为半径的区域内,通过寻找目标函数的一个近似函数(二次的)的最优点,来求解得到真正的位移。在得到了位移之后,再计算目标函数值,如果其使目标函数值的下降满足了一定条件,那么就说明这个位移是可靠的,则继续按此规则迭代计算下去;如果其不能使目标函数值的下降满足一定的条件,则应减小信赖域的范围,再重新求解。

    事实上,你从所有可以找到的资料里看到的LM算法的说明,都可以找到类似于“如果目标函数值增大,则调整某系数再继续求解;如果目标函数值减小,则调整某系数再继续求解”的迭代过程,这种过程与上面所说的信赖域法是非常相似的,所以说LM算法是一种信赖域法。

    LM算法需要对每一个待估参数求偏导,所以,如果你的拟合函数 f 非常复杂,或者待估参数相当地多,那么可能不适合使用LM算法,而可以选择Powell算法——Powell算法不需要求导。

    至于这个求导过程是如何实现的,我还不能给出建议,我使用过的方法是拿到函数的方程,然后手工计算出其偏导数方程,进而在函数中直接使用,这样做是最直接,求导误差也最小的方式。不过,在你不知道函数的形式之前,你当然就不能这样做了——例如,你提供给了用户在界面上输入数学函数式的机会,然后在程序中解析其输入的函数,再做后面的处理。在这种情况下,我猜是需要使用数值求导算法的,但我没有亲自试验过这样做的效率,因为一些优秀的求导算法——例如Ridders算法——在一次求导数值过程中,需要计算的函数值次数也会达到5次以上。这样的话,它当然要比手工求出导函数(只需计算一次,就可以得到导数值)效率要差得多了。不过,我个人估计(没有任何依据的,只是猜的):依赖于LM算法的高效,就算添加了一个数值求导的“拖油瓶”,整个最优化过程下来,它仍然会优于Powell等方法。对这个猜想,我会以实际代码来试验。

    文章来源:http://www.codelast.com/

    LM求解过程中需要用到求解线性方程组的算法,一般我们使用高斯约当消元法,因为它非常稳定——虽然它不是最快最好的算法。

    对于急需自己编程用LM算法解决一些问题的朋友,如果你的数学几乎都忘了,那么你还是多请教一下自己的朋友吧,要不然连函数的偏导数都不记得怎么求了,是写不出代码的。

    网上有很多LM算法的示例程序,但是如果你不理解这个算法的过程,要想看懂它们,很难。而且要对自己定义的函数使用LM算法,更加应该明白该算法的原理。

    有一篇很不错的文章,解释了如何实现LM算法:http://www.ics.forth.gr/~lourakis/levmar/levmar.pdf

    用Google搜索“Levenberg-Marquardt”,会有很多资料可参考。有一些现成的库也可以使用,不过,到你弄明白怎么用的时候,你都能够自己写出完整的代码了。当初我对LM也是很困惑,一直没弄清它的原理,网上的示例我怎么都用不对,后来一怒之下不再看网上的sample code,重新回到理论上,后来终于弄明白了,于是自己写出了完整的LM实现代码。

    需要说明的是,这是非线性无约束的问题,如果待估参数是有约束的(例如参数在某一范围内变动),要想用在LM算法中,那就是约束最优化问题了,这是一个big topic,以我目前的知识储备,尚不能解释好,请大家另寻资料吧。

    最后,不得不说的就是,LM算法并非许多人刚接触时想像的那般难,当你了解了过程之后,你就会觉得它很有意思。希望所有在学习它的朋友们都能成功。

    原文:

    http://www.cnblogs.com/engineerLF/p/5393110.html

    一.LM最优化算法   

        最优化是寻找使得目标函数有最大或最小值的的参数向量根据求导数的方法,可分为2大类。(1)若f具有解析函数形式,知道x后求导数速度快。(2)使用数值差分来求导数。根据使用模型不同,分为非约束最优化约束最优化最小二乘最优化Levenberg-Marquardt算法是最优化算法中的一种。

       Levenberg-Marquardt算法是使用最广泛的非线性最小二乘算法(用模型函数 f 对待估参数向量p在其领域内做线性近似,利用泰勒展开,忽略掉二阶以上的导数项,优化目标方程转化为线性最小二乘问题)。它是利用梯度求最大(小)值的算法,形象的说,属于“爬山”法的一种。它同时具有梯度法牛顿法的优点。当λ很小时,步长等于牛顿法步长,当λ很大时,步长约等于梯度下降法的步长。见下图:
        
        算法从山脚开始不断迭代。可以看到,它的寻优速度是比较快的,在山腰部分直接利用梯度大幅度提升(参见后文例子程序中u较小时),快到山顶时经过几次尝试(u较大时),最后达到顶峰(最大值点),算法终止。

       LM算法属于一种“信赖域法”,所谓的信赖域法,就是从初始点开始,先假设一个可以信赖的最大位移σ,然后在以当前点为中心,以σ为半径的区域内,通过寻找目标函数的一个近似函数(二次的)的最优点,来求解得到真正的位移。在得到了位移之后,再计算目标函数值,如果其使目标函数值的下降满足了一定条件,那么就说明这个位移是可靠的,则继续按此规则迭代计算下去;如果其不能使目标函数值的下降满足一定的条件,则应减小信赖域的范围,再重新求解。
       LM算法需要对每一个待估参数求偏导,所以,如果你的拟合函数 f 非常复杂,或者待估参数相当地多,那么可能不适合使用LM算法,而可以选择Powell算法(Powell算法不需要求导。LM收敛速度块。但是参数应该设定一个初值,其次对于多优化解的问题,也不是很适合。

       英文文档lemar介绍比较简洁,还包括伪代码,请点击下载:

       我的总结如下:

          (1)Principle:An iterative tech. to locate the minimum of a multivariate function (sum of squares of non-linear real-valued function).Assuming measure vector x’=f(p) ,target vector x(such as training target in classification problem) ,error vector e=x-x’:

    Optimization Object:arg(p) min(||x-f(p)||)

           Linear approximation: in the neighborhood of p, assuming Jis Jacobian Matrix(f(p) to p) ,for a smallσ,so f(p+σ)=f(p)+σJ (Taylor Expansion) ,and

    min (||x-f(p+σ)||=min(||e-Jσ||)  =>  JTJσ=JTe  (derivation to σ)

           Introducing the damping term u and setN=( JTJ+uI)=> Nσ= JTe => σ

           For each iteration or updata of p(p:=p+σ),u is adjusted to assure a reduction in the error e(norm-2)

      

           (2)Merits & Defects:LM is a standard tech. fornon-linear least-squares problems:When u is set to a large value, p updates as steepest descent, otherwise updates as Gauss-Newton method.

             p shall be set toarelative reliable initial value (the work of RBM model).

    展开全文
  • 为了降低参数化模型对测量结果影响,提出一种依赖相机内部参数摄影测量方法。结合垂线法和Zeiss实验室标定方法,设计了一种针对大视场相机非参数标定方法。经过不同图像间同名点匹配和平差初值确定后,便可...
  • 在对面向对象Petri网(Object-Oriented Petri Nets,OOPN)技术中系统系统对象的形式化理论研究以及现有成品油配送系统业务流程分析基础之上,建立了面向对象Petri网的成品油配送...最后,对模型的优点进行了总结。
  • ,并就其中位置指纹定位的优化算法作了优化改进,使用余弦距离函数作为指纹库匹配算法 ,兼顾计算量和存储空间2方面 ,使其具有对传播模型、站间距依赖度较低、对单次测量偏差敏感、定位精度较高等优点。...
  • 遗传算法优化BP神经网络实例

    千次阅读 热门讨论 2021-01-03 23:56:07
    本文内容为将遗传算法BP神经网络算法相结合,优化神经网络权值和阈值。 BP网络是一类多层前馈神经网络。它名字源于在网络训练过程中,调整网络权值算法是误差反向传播学习算法,即为BP学习算法。...
  • 【PEST++】01 参数优化与灵敏度分析

    千次阅读 2019-10-09 20:30:19
    PEST(Parameter Estimation)自动率定程序是由John Doherty 博士于1994年基于GML算法开发的独立于模型参数估计和确定性分析的综合软件,其具有逆海森方法和最速下降法的优点,可以通过较少的模型运行次数,得到...
  • 笔者运用神经网络理论,以武汉电动汽车示范运营公司目前在各个社区电动小巴的合理配置为样本数据,建立了基于BP神经网络的多变量非线性预测模型,并采用Matlab进行编程计算验证了该模型的科学性和准确性。...
  •  《循序渐进oracle:数据库管理、优化与备份恢复》从基础知识入手,详细讨论了oracle数据库创建、从oem到grid control、oracle字符集、用户创建管理、表空间和数据文件、自动存储管理(asm)、临时表空间和...
  • DB2 9对XML支持经典关系数据模型相比所具有优势是可忽略其他主流数据库管理系统比起来,DB2有其优势也有自己不足。DB2在关闭机制上有一定不足。这DB2设计框架相关,内存锁使用在提升效率...
  • 一、模型预测发展 ...主要优点:克服受控对象未建模误差、参数环境等方面的不确定性、大时滞或变时滞等,具有鲁棒性。 2、工业过程特点 (1)多变量高维复杂系统难以建立精确数学模型; (2...
  • 对于为给PCB添加3D模型,很多人觉得这是个绣花针活,中看中用。在我看来这也未必,特别是常用3D模型能在网上下载今天,只需要几个简单操作,就能使你PCB更加赏心悦目。除此之外,3D模型还有以下优点: ...
  • 关键词:TDD-CDMA TDD FDD 干扰 业务负荷TDD-CDMA移动通信系统的优点在于它能够灵活处理对称数据以及它的信道的自然特性,但是同步和干扰问题是其主要限制因素。为了认识TDD-CDMA系统的性能和容量,本文讨论并...
  • 在这项研究中,研究了具有参数确定性和时变传输延迟的离散时间网络控制系统... 最后,通过数值算例和实际算例表明,在所提出的事件触发方案下,保留了在损害闭环系统稳定性的前提下减少控制网络中通信流量的优点

空空如也

空空如也

1 2 3 4 5 ... 13
收藏数 254
精华内容 101
关键字:

优化模型的优点与不