浅谈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 字符串操作实现代码(截取/替换/查找/分割)
Jun 08 Python
Python实现二叉堆
Feb 03 Python
numpy找出array中的最大值,最小值实例
Apr 03 Python
Python 获取主机ip与hostname的方法
Dec 17 Python
python执行精确的小数计算方法
Jan 21 Python
Python学习笔记之pandas索引列、过滤、分组、求和功能示例
Jun 03 Python
教你如何编写、保存与运行Python程序的方法
Jul 12 Python
PyTorch 随机数生成占用 CPU 过高的解决方法
Jan 13 Python
python中adb有什么功能
Jun 07 Python
python破解同事的压缩包密码
Oct 14 Python
python 通过pip freeze、dowload打离线包及自动安装的过程详解(适用于保密的离线环境
Dec 14 Python
python实现批量移动文件
Apr 05 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使用PHPMailer发送邮件的简单使用方法
2013/11/12 PHP
php使用cookie保存登录用户名的方法
2015/01/26 PHP
php可应用于面包屑导航的迭代寻找家谱树实现方法
2015/02/02 PHP
Laravel框架路由管理简单示例
2019/05/07 PHP
php设计模式之装饰模式应用案例详解
2019/06/17 PHP
javascript动态加载三
2012/08/22 Javascript
onbeforeunload与onunload事件异同点总结
2013/06/24 Javascript
Javascript无阻塞加载具体方式
2013/06/28 Javascript
jQuery中closest和parents的区别分析
2015/05/07 Javascript
jquery移除了live()、die(),新版事件绑定on()、off()的方法
2016/10/26 Javascript
AngularJS实现表单验证功能
2017/01/09 Javascript
使用vue和datatables进行表格的服务器端分页实例代码
2017/06/07 Javascript
微信小程序之电影影评小程序制作代码
2017/08/03 Javascript
基于Vue实例对象的数据选项
2017/08/09 Javascript
Vue响应式原理深入解析及注意事项
2017/12/11 Javascript
详解NODEJS的http实现
2018/01/04 NodeJs
JS简单实现动态添加HTML标记的方法示例
2018/04/08 Javascript
layer.close()关闭进度条和Iframe窗的方法
2018/08/17 Javascript
Vue中 key keep-alive的实现原理
2018/09/18 Javascript
video.js 一个页面同时播放多个视频的实例代码
2018/11/27 Javascript
ES6入门教程之Array.from()方法
2019/03/23 Javascript
WebGL学习教程之Three.js学习笔记(第一篇)
2019/04/25 Javascript
浅谈react-router@4.0 使用方法和源码分析
2019/06/04 Javascript
vue-router路由模式详解(小结)
2019/08/26 Javascript
vscode自定义vue模板的实现
2021/01/27 Vue.js
[52:09]2014 DOTA2华西杯精英邀请赛 5 25 NewBee VS DK第二场
2014/05/26 DOTA
python实现得到当前登录用户信息的方法
2019/06/21 Python
Python HTMLTestRunner可视化报告实现过程解析
2020/04/10 Python
Pycharm无法打开双击没反应的问题及解决方案
2020/08/17 Python
css3学习之2D转换功能详解
2016/12/23 HTML / CSS
关于HTML5语义标签的实践(blog页面)
2016/07/12 HTML / CSS
好的演讲稿开场白
2013/12/30 职场文书
人资专员岗位职责
2014/04/04 职场文书
感恩教育活动总结
2014/05/05 职场文书
好学生评语大全
2014/05/05 职场文书
六一领导慰问欢迎词
2015/01/26 职场文书