浅谈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安装Imaging报错:The _imaging C module is not installed问题解决方法
Aug 22 Python
使用Python的Tornado框架实现一个Web端图书展示页面
Jul 11 Python
django框架model orM使用字典作为参数,保存数据的方法分析
Jun 24 Python
简单了解python gevent 协程使用及作用
Jul 22 Python
如何实现Django Rest framework版本控制
Jul 25 Python
Python实现直播推流效果
Nov 26 Python
python中return的返回和执行实例
Dec 24 Python
python使用梯度下降算法实现一个多线性回归
Mar 24 Python
使用SQLAlchemy操作数据库表过程解析
Jun 10 Python
基于Python的身份证验证识别和数据处理详解
Nov 14 Python
Python爬虫:从m3u8文件里提取小视频的正确操作
May 14 Python
总结Python常用的魔法方法
May 25 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重新实现PHP脚本引擎内置函数
2007/03/06 PHP
PHP 变量的定义方法
2010/01/26 PHP
php运行时动态创建函数的方法
2015/03/16 PHP
php实现简易聊天室应用代码
2015/09/23 PHP
PHP利用DWZ.CN服务生成短网址
2019/08/11 PHP
javascript Array.sort() 跨浏览器下需要考虑的问题
2009/12/07 Javascript
js 程序执行与顺序实现详解
2013/05/13 Javascript
jquery获取radio值实例
2014/10/16 Javascript
express的中间件bodyParser详解
2014/12/04 Javascript
JavaScript Sort 的一个错误用法示例
2015/03/20 Javascript
JS基于面向对象实现的拖拽库实例
2015/09/24 Javascript
基于JavaScript如何实现ajax调用后台定义的方法
2015/12/29 Javascript
Vue-路由导航菜单栏的高亮设置方法
2018/03/17 Javascript
JS中双击和单击事件冲突的解决方法
2018/04/09 Javascript
jquery3和layui冲突导致使用layui.layer.full弹出全屏iframe窗口时高度152px问题
2019/05/12 jQuery
JavaScript浅层克隆与深度克隆示例详解
2020/09/01 Javascript
Python函数式编程
2017/07/20 Python
分享一个可以生成各种进制格式IP的小工具实例代码
2017/07/28 Python
Python3实现的判断环形链表算法示例
2019/03/07 Python
Pandas之排序函数sort_values()的实现
2019/07/09 Python
Python:合并两个numpy矩阵的实现
2019/12/02 Python
python基于property()函数定义属性
2020/01/22 Python
python import 上级目录的导入
2020/11/03 Python
websocket+sockjs+stompjs详解及实例代码
2018/11/30 HTML / CSS
意大利专业化妆品品牌:KIKO MILANO
2017/02/01 全球购物
印尼值得信赖的在线交易网站:Bukalapak
2019/03/11 全球购物
美国豪华的多品牌精品店:The Webster
2019/07/31 全球购物
幼儿教师自我鉴定
2013/11/02 职场文书
优秀经理事迹材料
2014/02/01 职场文书
小学模范班主任事迹材料
2014/05/13 职场文书
幼儿园门卫岗位职责范本
2014/07/02 职场文书
团党委领导干部党的群众路线教育实践活动个人对照检查材料思想汇
2014/10/05 职场文书
2014年就业工作总结
2014/11/26 职场文书
继承权公证书范本
2015/01/23 职场文书
上市公司财务总监岗位职责
2015/04/03 职场文书
高中班主任心得体会
2016/01/07 职场文书