浅谈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类定义的讲解
Nov 01 Python
web.py 十分钟创建简易博客实现代码
Apr 22 Python
python常用函数详解
Sep 13 Python
Python实现的快速排序算法详解
Aug 01 Python
Python读取Json字典写入Excel表格的方法
Jan 03 Python
python3.6 实现AES加密的示例(pyCryptodome)
Jan 10 Python
Django 路由控制的实现代码
Nov 08 Python
python使用 __init__初始化操作简单示例
Sep 26 Python
Python 爬取必应壁纸的实例讲解
Feb 24 Python
python实现银行实战系统
Feb 26 Python
如何安装并在pycharm使用selenium的方法
Apr 30 Python
pycharm sciview的图片另存为操作
Jun 01 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实现验证码功能
2006/10/09 PHP
Function eregi is deprecated (解决方法)
2013/06/21 PHP
php单态设计模式(单例模式)实例
2014/11/18 PHP
PHP调试的强悍利器之PHPDBG
2016/02/22 PHP
Firefox window.close()的使用注意事项
2009/04/11 Javascript
JQuery实现用户名无刷新验证的小例子
2013/03/22 Javascript
鼠标拖拽移动子窗体的JS实现
2014/02/25 Javascript
Node.js和PHP根据ip获取地理位置的方法
2014/03/14 Javascript
jquery实现拖拽调整Div大小
2015/01/30 Javascript
JavaScript对表格或元素按文本,数字或日期排序的方法
2015/05/26 Javascript
jQuery结合CSS制作动态的下拉菜单
2015/10/27 Javascript
javascript的正则匹配方法学习
2016/02/24 Javascript
jquery自适应布局的简单实例
2016/05/28 Javascript
Listloading.js移动端上拉下拉刷新组件
2016/08/04 Javascript
详解Angular中的自定义服务Service、Provider以及Factory
2017/04/22 Javascript
了解javascript中变量及函数的提升
2019/05/27 Javascript
jQuery使用ajax传递json对象到服务端及contentType的用法示例
2020/03/12 jQuery
Python去除列表中重复元素的方法
2015/03/20 Python
Python实现网站注册验证码生成类
2017/06/08 Python
Pandas探索之高性能函数eval和query解析
2017/10/28 Python
python中logging模块的一些简单用法的使用
2019/02/22 Python
Python使用MyQR制作专属动态彩色二维码功能
2019/06/04 Python
对Python _取log的几种方式小结
2019/07/25 Python
Django 项目重命名的实现步骤解析
2019/08/14 Python
Python3使用xml.dom.minidom和xml.etree模块儿解析xml文件封装函数的方法
2019/09/23 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧装饰器信号与槽详细使用方法与实例
2020/03/06 Python
input元素的url类型和email类型简介
2012/07/11 HTML / CSS
博士学位自我鉴定范文
2013/12/26 职场文书
金融系应届毕业生求职信
2014/05/26 职场文书
中学生民族团结演讲稿
2014/08/27 职场文书
地理科学专业自荐信
2014/09/01 职场文书
2015年个人思想总结
2015/03/09 职场文书
幼儿园毕业典礼园长致辞
2015/07/29 职场文书
大学开学感言
2015/08/01 职场文书
Python实现8种常用抽样方法
2021/06/27 Python
Android基础入门之dataBinding的简单使用教程
2022/06/21 Java/Android