浅谈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 09 Python
Python3实现从指定路径查找文件的方法
May 22 Python
ubuntu安装mysql pycharm sublime
Feb 20 Python
Python中偏函数用法示例
Jun 07 Python
对python实现合并两个排序链表的方法详解
Jan 23 Python
python中metaclass原理与用法详解
Jun 25 Python
libreoffice python 操作word及excel文档的方法
Jul 04 Python
Python中的X[:,0]、X[:,1]、X[:,:,0]、X[:,:,1]、X[:,m:n]和X[:,:,m:n]
Feb 13 Python
Python文字截图识别OCR工具实例解析
Mar 05 Python
Django nginx配置实现过程详解
Sep 10 Python
python文件排序的方法总结
Sep 13 Python
如何在Anaconda中打开python自带idle
Sep 21 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的QRcode类与大家分享
2011/11/13 PHP
基于php-fpm的配置详解
2013/06/03 PHP
php文件上传的例子及参数详解
2013/12/12 PHP
Codeigniter购物车类不能添加中文的解决方法
2014/11/29 PHP
thinkPHP框架通过Redis实现增删改查操作的方法详解
2019/05/13 PHP
Javascript isArray 数组类型检测函数
2009/10/08 Javascript
IE浏览器打印的页眉页脚设置解决方法
2009/12/08 Javascript
某页码显示的helper 少量调整,另附js版
2010/09/12 Javascript
Javascript Throttle &amp; Debounce应用介绍
2013/03/19 Javascript
javascript-简单的日历实现及Date对象语法介绍(附图)
2013/05/30 Javascript
22点关于jquery性能优化的建议
2014/05/28 Javascript
非jQuery实现照片散落桌子上,单击放大的LightBox效果
2014/11/28 Javascript
javascript中Object使用详解
2015/01/26 Javascript
Angular 路由route实例代码
2016/07/12 Javascript
基于AngularJS的简单使用详解
2017/09/10 Javascript
vue2.0 如何把子组件的数据传给父组件(推荐)
2018/01/15 Javascript
纯JS实现出生日期[年月日]下拉菜单效果
2018/06/01 Javascript
vue.js2.0 实现better-scroll的滚动效果实例详解
2018/08/13 Javascript
vue项目中axios请求网络接口封装的示例代码
2018/12/18 Javascript
[07:54]DOTA2-DPC中国联赛 正赛 iG vs VG 选手采访
2021/03/11 DOTA
DJANGO-ALLAUTH社交用户系统的安装配置
2014/11/18 Python
python中使用psutil查看内存占用的情况
2018/06/11 Python
python3.6的venv模块使用详解
2018/08/01 Python
Python爬虫框架scrapy实现downloader_middleware设置proxy代理功能示例
2018/08/04 Python
Python如何发布程序的详细教程
2018/10/09 Python
python科学计算之numpy——ufunc函数用法
2019/11/25 Python
python 模拟登陆163邮箱
2020/12/15 Python
html5教程制作简单画板代码分享
2013/12/04 HTML / CSS
wedgwood加拿大官网:1759年成立的英国国宝级陶瓷餐具品牌
2018/07/17 全球购物
SHEIN台湾:购买最新流行女装服饰
2019/05/18 全球购物
AJAX的优缺点都有什么
2015/08/18 面试题
预防传染病方案
2014/06/14 职场文书
五心教育心得体会
2014/09/04 职场文书
2015年12.4全国法制宣传日活动总结
2015/03/24 职场文书
聊聊pytorch测试的时候为何要加上model.eval()
2021/05/23 Python
JS开发前端团队展示控制器来为成员引流
2022/08/14 Javascript