浅谈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获取Linux系统的各种信息
Jul 10 Python
Python操作MySQL简单实现方法
Jan 26 Python
Python3写入文件常用方法实例分析
May 22 Python
Python中的数据对象持久化存储模块pickle的使用示例
Mar 03 Python
浅谈python装饰器探究与参数的领取
Dec 01 Python
python smtplib模块实现发送邮件带附件sendmail
May 22 Python
python3实现磁盘空间监控
Jun 21 Python
TensorFlow 合并/连接数组的方法
Jul 27 Python
详解Python3 对象组合zip()和回退方式*zip
May 15 Python
TensorFlow2.X使用图片制作简单的数据集训练模型
Apr 08 Python
Python Django form 组件动态从数据库取choices数据实例
May 19 Python
深入理解python协程
Jun 15 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实现获取文章内容第一张图片的方法
2014/11/04 PHP
扩展js对象数组的OrderByAsc和OrderByDesc方法实现思路
2013/05/17 Javascript
JS实现切换标签页效果实例代码
2013/11/01 Javascript
JavaScript 学习笔记之语句
2015/01/14 Javascript
JS组件Bootstrap按钮组与下拉按钮详解
2016/05/10 Javascript
AngularJS动态加载模块和依赖的方法分析
2016/11/08 Javascript
js实现点击每个li节点,都弹出其文本值及修改
2016/12/15 Javascript
jQuery实现用户输入自动完成功能
2017/02/13 Javascript
Angular.JS中指令ng-if的注意事项小结
2017/06/21 Javascript
Vue路由的模块自动化与统一加载实现
2020/06/05 Javascript
零基础写python爬虫之爬虫框架Scrapy安装配置
2014/11/06 Python
Python中的Classes和Metaclasses详解
2015/04/02 Python
python中尾递归用法实例详解
2015/04/28 Python
Python实现包含min函数的栈
2016/04/29 Python
Python编程中装饰器的使用示例解析
2016/06/20 Python
python中实现精确的浮点数运算详解
2017/11/02 Python
tensorflow实现softma识别MNIST
2018/03/12 Python
神经网络相关之基础概念的讲解
2018/12/29 Python
python+ffmpeg批量去视频开头的方法
2019/01/09 Python
pyqt5实现绘制ui,列表窗口,滚动窗口显示图片的方法
2019/06/20 Python
python面向对象之类属性和类方法案例分析
2019/12/30 Python
python 递归调用返回None的问题及解决方法
2020/03/16 Python
如何提高python 中for循环的效率
2020/04/15 Python
Pytorch损失函数nn.NLLLoss2d()用法说明
2020/07/07 Python
python分布式爬虫中消息队列知识点详解
2020/11/26 Python
CSS3中:nth-child和:nth-of-type的区别深入理解
2014/03/10 HTML / CSS
介绍一下JNDI的基本概念
2013/07/26 面试题
幼儿园园长岗位职责
2013/11/26 职场文书
五年级英语教学反思
2014/01/31 职场文书
安全生产实施方案
2014/02/23 职场文书
机械制造专业毕业生求职信
2014/03/02 职场文书
2014年乡镇人大工作总结
2014/11/25 职场文书
公路施工安全责任书
2015/05/08 职场文书
感恩父母主题班会
2015/08/12 职场文书
2016年3月份红领巾广播稿
2015/12/21 职场文书
MySQL高级进阶sql语句总结大全
2022/03/16 MySQL