浅谈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 相关文章推荐
Python3读取文件常用方法实例分析
May 22 Python
Python3中的列表,元组,字典,字符串相关知识小结
Nov 10 Python
numpy.delete删除一列或多列的方法
Apr 03 Python
Selenium元素的常用操作方法分析
Aug 10 Python
使用Python监视指定目录下文件变更的方法
Oct 15 Python
Python正则表达式实现简易计算器功能示例
May 07 Python
使用Nibabel库对nii格式图像的读写操作
Jul 01 Python
Python json格式化打印实现过程解析
Jul 21 Python
python raise的基本使用
Sep 10 Python
Pycharm 设置默认解释器路径和编码格式的操作
Feb 05 Python
Python3+PyCharm+Django+Django REST framework配置与简单开发教程
Feb 16 Python
Python数据类型最全知识总结
May 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 获取一个月第一天与最后一天的代码
2010/05/16 PHP
PHP生成随机密码方法汇总
2015/08/27 PHP
php5.4传引用时报错问题分析
2016/01/22 PHP
Laravel中日期时间处理包Carbon的简单使用
2017/09/21 PHP
javascript中的new使用
2010/03/20 Javascript
浅析JS刷新框架中的其他页面 &amp;&amp; JS刷新窗口方法汇总
2013/07/08 Javascript
jquery解析xml字符串示例分享
2014/03/25 Javascript
jQuery实现的简单提示信息插件
2015/12/08 Javascript
vue.js之vue-cli脚手架的搭建详解
2017/05/05 Javascript
JS中mouseup事件丢失的原因与解决办法
2017/06/14 Javascript
关于使用axios的一些心得技巧分享
2017/07/02 Javascript
用Fundebug插件记录网络请求异常的方法
2019/02/21 Javascript
layui 根据后台数据动态创建下拉框并同时默认选中的实例
2019/09/02 Javascript
js实现简易拖拽的示例
2020/10/26 Javascript
Python中set与frozenset方法和区别详解
2016/05/23 Python
Python通用循环的构造方法实例分析
2018/12/19 Python
python里运用私有属性和方法总结
2019/07/08 Python
python urllib爬虫模块使用解析
2019/09/05 Python
使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件及出现问题解决方法
2019/09/06 Python
python实现代码统计器
2019/09/19 Python
基于python traceback实现异常的获取与处理
2019/12/13 Python
浅谈PyQt5中异步刷新UI和Python多线程总结
2019/12/13 Python
django实现更改数据库某个字段以及字段段内数据
2020/03/31 Python
python如何判断IP地址合法性
2020/04/05 Python
python分布式爬虫中消息队列知识点详解
2020/11/26 Python
澳大利亚排名第一的露营和户外设备在线零售商:Outbax
2020/05/06 全球购物
营销与策划专业毕业生求职信
2013/11/01 职场文书
小学生暑假感言
2014/02/06 职场文书
美术毕业生求职信
2014/02/25 职场文书
祖国在我心中的演讲稿
2014/05/04 职场文书
收入及婚姻状况证明
2014/11/20 职场文书
2015年学校总务处工作总结
2015/05/19 职场文书
2015年街道办事处工作总结
2015/05/22 职场文书
爱国主题班会教案
2015/08/14 职场文书
写作指导:怎么书写竞聘演讲稿?
2019/07/04 职场文书
python 算法题——快乐数的多种解法
2021/05/27 Python