浅谈SciPy中的optimize.minimize实现受限优化问题


Posted in Python onFebruary 29, 2020

问题描述:有一批样本x,每个样本都有几个固定的标签,如(男,24岁,上海),需要从中抽取一批样本,使样本总的标签比例满足分布P(x),如(男:女=49%:51%、20岁:30岁=9%:11%、..........)

采用KL-散度作为优化目标函数。

KL-散度又叫相对熵

KL-散度在机器学习中,P用来表示样本的真实分布,比如[1,0,0]表示当前样本属于第一类。Q用来表示模型所预测的分布,比如[0.7,0.2,0.1]

KL-散度直观的理解就是如果用P来描述样本,那么就非常完美。而用Q来描述样本,虽然可以大致描述,但是不是那么的完美,信息量不足,需要额外的一些“信息增量”才能达到和P一样完美的描述。如果我们的Q通过反复训练,也能完美的描述样本,那么就不再需要额外的“信息增量”,Q等价于P。

公式:

浅谈SciPy中的optimize.minimize实现受限优化问题

使用SciPy中的optimize.minimize来进行优化。

def minimize(fun, x0, args=(), method=None, jac=None, hess=None,
    hessp=None, bounds=None, constraints=(), tol=None,
    callback=None, options=None):

几个重要的参数:

fun:目标函数(he objective function to be minimized);

x0:参数初始值(Initial guess. Array of real elements of size (n,));

bounds:参数取值范围限制(Bounds on variables for L-BFGS-B, TNC, SLSQP and trust-constr methods.)

constraints:约束函数(Constraints definition (only for COBYLA, SLSQP and trust-constr)

Constraints for COBYLA, SLSQP are defined as a list of dictionaries.
Each dictionary with fields:
 
 type : str
  Constraint type: 'eq' for equality, 'ineq' for inequality.
 fun : callable
  The function defining the constraint.
 jac : callable, optional
  The Jacobian of `fun` (only for SLSQP).
 args : sequence, optional
  Extra arguments to be passed to the function and Jacobian.
)

tol : 目标函数误差范围,控制迭代结束(optional Tolerance for termination. For detailed control, use solver-specific options.) options : 其他一些可选参数(dict, optional A dictionary of solver options. All methods accept the following generic options:)

求解过程:

定义优化函数:

def obj_function(x): 其中x为要优化的变量,在本问题中有480类的样本(如:男,24岁,上海),每类样本10-1000个不等,x为每类抽取的比例。要从中抽取50000个样本,满足22个约束条件(男:女=50%:50%、20岁:30岁=9%:11%等等)。

例如:男性要占总样本的50%,则 浅谈SciPy中的optimize.minimize实现受限优化问题

选择优化函数。SciPy中可以使用bounds参数的算法有:L-BFGS-B, TNC, SLSQP and trust-constr,可以使用constraints 参数的算法有: COBYLA, SLSQP and trust-constr

调参:optimize.minimize有统一的参数,但每个优化算法都有自己特有的参数,可以看源码中的参数列表。

运行:res = optimize.minimize(sample_fun, np.array(x0), bounds=bound, method='L-BFGS-B', tol=1e-11, options={'disp': True, 'maxiter': 300, 'maxfun': 1500000}),最终的结果保存在res.x中

如果程序没达到指定的迭代次数就停止,可能有两种原因:

STOP: TOTAL NO. of f AND g EVALUATIONS EXCEEDS LIMIT 增大参数maxfun;

CONVERGENCE: REL_REDUCTION_OF_F_<=_FACTR*EPSMCH 调小参数tol

以上这篇浅谈SciPy中的optimize.minimize实现受限优化问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中xrange用法分析
Apr 15 Python
Python的Django中django-userena组件的简单使用教程
May 30 Python
django开发之settings.py中变量的全局引用详解
Mar 29 Python
Python2随机数列生成器简单实例
Sep 04 Python
基于数据归一化以及Python实现方式
Jul 11 Python
python 实现对数据集的归一化的方法(0-1之间)
Jul 17 Python
Python 中字符串拼接的多种方法
Jul 30 Python
Python Series从0开始索引的方法
Nov 06 Python
Python中对数组集进行按行打乱shuffle的方法
Nov 08 Python
pandas的qcut()方法详解
Jul 06 Python
python代码能做成软件吗
Jul 24 Python
Python高并发解决方案实现过程详解
Jul 31 Python
使用python求解二次规划的问题
Feb 29 #Python
Python龙贝格法求积分实例
Feb 29 #Python
python计算导数并绘图的实例
Feb 29 #Python
细数nn.BCELoss与nn.CrossEntropyLoss的区别
Feb 29 #Python
Pytorch对Himmelblau函数的优化详解
Feb 29 #Python
Pytorch中的自动求梯度机制和Variable类实例
Feb 29 #Python
在pytorch中实现只让指定变量向后传播梯度
Feb 29 #Python
You might like
PHP 七大优势分析
2009/06/23 PHP
html静态页面调用php文件的方法
2014/11/13 PHP
php递归函数三种实现方法及如何实现数字累加
2015/08/07 PHP
Zend Framework框架路由机制代码分析
2016/03/22 PHP
jQuery开发者都需要知道的5个小技巧
2010/01/08 Javascript
40款非常棒的jQuery 插件和制作教程(系列一)
2011/10/26 Javascript
JavaScript splice()方法详解
2020/09/22 Javascript
写JQuery插件的基本知识
2013/11/25 Javascript
使用jQuery仿苹果官网焦点图特效
2014/12/23 Javascript
IScroll5 中文API参数说明和调用方法
2016/05/21 Javascript
微信小程序 生命周期函数详解
2017/05/24 Javascript
基于 Bootstrap Datetimepicker 联动
2017/08/03 Javascript
Vue-router 类似Vuex实现组件化开发的示例
2017/09/15 Javascript
javaScript实现游戏倒计时功能
2018/11/17 Javascript
Vue.Draggable拖拽功能的配置使用方法
2020/07/29 Javascript
详解async/await 异步应用的常用场景
2019/05/13 Javascript
详解Vue3.0 前的 TypeScript 最佳入门实践
2019/06/18 Javascript
vue中动态select的使用方法示例
2019/10/28 Javascript
在node环境下parse Smarty模板的使用示例代码
2019/11/15 Javascript
js点击事件的执行过程实例分析【冒泡与捕获】
2020/04/11 Javascript
Python入门篇之字典
2014/10/17 Python
Python装饰器使用实例:验证参数合法性
2015/06/24 Python
python 线程的暂停, 恢复, 退出详解及实例
2016/12/06 Python
pandas如何处理缺失值
2019/07/31 Python
对Django中内置的User模型实例详解
2019/08/16 Python
浅谈多卡服务器下隐藏部分 GPU 和 TensorFlow 的显存使用设置
2020/06/30 Python
Keras中 ImageDataGenerator函数的参数用法
2020/07/03 Python
如何使用amaze ui的分页样式封装一个通用的JS分页控件
2020/08/21 HTML / CSS
Craghoppers德国官网:户外和旅行服装
2020/02/14 全球购物
.NET是怎么支持多种语言的
2015/02/24 面试题
网络安全方面的面试题
2016/01/07 面试题
介绍一下linux的文件权限
2012/02/15 面试题
《乌鸦和狐狸》教学反思
2014/02/08 职场文书
导游词之台湾阿里山
2019/10/23 职场文书
Pytest实现setup和teardown的详细使用详解
2021/04/17 Python
详解SQL报错盲注
2022/07/23 SQL Server