浅谈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 切片和range()用法说明
Mar 24 Python
python切换hosts文件代码示例
Dec 31 Python
Python中os和shutil模块实用方法集锦
May 13 Python
Python中logging模块的用法实例
Sep 29 Python
Python实现简单登录验证
Apr 13 Python
详解python使用递归、尾递归、循环三种方式实现斐波那契数列
Jan 16 Python
python 将对象设置为可迭代的两种实现方法
Jan 21 Python
Python math库 ln(x)运算的实现及原理
Jul 17 Python
详解Matplotlib绘图之属性设置
Aug 23 Python
OpenCV读取与写入图片的实现
Oct 13 Python
python使用dlib进行人脸检测和关键点的示例
Dec 05 Python
基于Python实现流星雨效果的绘制
Mar 18 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 在windows下配置虚拟目录的方法介绍
2013/06/26 PHP
不使用php api函数实现数组的交换排序示例
2014/04/13 PHP
Zend Framework入门之环境配置及第一个Hello World示例(附demo源码下载)
2016/03/21 PHP
win10 apache配置虚拟主机后localhost无法使用的解决方法
2018/01/27 PHP
javascript while语句和do while语句的区别分析
2007/12/08 Javascript
javascript的函数、创建对象、封装、属性和方法、继承
2011/03/10 Javascript
jQuery JSON实现无刷新三级联动实例探讨
2013/05/28 Javascript
文本框回车提交与禁止提交示例
2013/09/27 Javascript
asp.net刷新本页面的六种方法总结
2014/01/07 Javascript
用Jquery选择器计算table中的某一列某一行的合计
2014/08/13 Javascript
用js传递value默认值的示例代码
2014/09/11 Javascript
JavaScript中的逻辑判断符&amp;&amp;、||与!介绍
2014/12/31 Javascript
Javascript中的arguments对象
2016/06/20 Javascript
关于JavaScript中事件绑定的方法总结
2016/10/26 Javascript
js querySelector() 使用方法
2016/12/21 Javascript
Vue常用指令V-model用法
2017/03/08 Javascript
vue表单绑定实现多选框和下拉列表的实例
2017/08/12 Javascript
jQuery仿移动端支付宝键盘的实现代码
2018/08/15 jQuery
微信小程序之判断页面滚动方向的示例代码
2018/08/30 Javascript
Vue v-text指令简单使用方法示例
2019/09/19 Javascript
Electron 调用命令行(cmd)
2019/09/23 Javascript
JavaScript判断数组类型的方法
2019/10/23 Javascript
JS document form表单元素操作完整示例
2020/01/13 Javascript
Python金融数据可视化汇总
2017/11/17 Python
Python实现的大数据分析操作系统日志功能示例
2019/02/11 Python
python爬取百度贴吧前1000页内容(requests库面向对象思想实现)
2019/08/10 Python
python如果快速判断数字奇数偶数
2019/11/13 Python
pycharm 更改创建文件默认路径的操作
2020/02/15 Python
python tkinter实现连连看游戏
2020/11/16 Python
利用HTML5实现使用按钮控制背景音乐开关
2015/09/21 HTML / CSS
维也纳通行证:Vienna PASS
2019/07/18 全球购物
学生个人求职自荐信格式
2013/09/23 职场文书
简单而又朴实的个人求职信分享
2013/12/12 职场文书
竞聘演讲稿怎么写
2014/08/28 职场文书
先进单位事迹材料
2014/12/25 职场文书
2015年班干部工作总结
2015/04/29 职场文书