浅谈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爬虫教程之爬取百度贴吧并下载的示例
Mar 07 Python
Python编写屏幕截图程序方法
Feb 18 Python
python装饰器初探(推荐)
Jul 21 Python
python删除服务器文件代码示例
Feb 09 Python
pandas删除指定行详解
Apr 04 Python
Python切片操作去除字符串首尾的空格
Apr 22 Python
Django REST framework内置路由用法
Jul 26 Python
flask框架蓝图和子域名配置详解
Jan 25 Python
解决Python Matplotlib绘图数据点位置错乱问题
May 16 Python
Python实现敏感词过滤的4种方法
Sep 12 Python
关于python pygame游戏进行声音添加的技巧
Oct 24 Python
Python加密技术之RSA加密解密的实现
Apr 08 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
ThinkPHP数据操作方法总结
2015/09/28 PHP
PHP编程计算两个时间段是否有交集的实现方法(不算边界重叠)
2017/05/30 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
2020/03/30 PHP
HR vs CL BO3 第一场 2.13
2021/03/10 DOTA
JavaScript中的Document文档对象
2008/01/16 Javascript
jquery UI 1.72 之datepicker
2009/12/29 Javascript
10个基于浏览器的JavaScript调试工具分享
2013/02/07 Javascript
如何使用jquery控制CSS样式,并且取消Css样式(如背景色,有实例)
2013/07/09 Javascript
JavaScript调试技巧之console.log()详解
2014/03/19 Javascript
JS实现控制表格内指定单元格内容对齐的方法
2015/03/30 Javascript
Javascript typeof与instanceof的区别
2016/10/18 Javascript
js 转json格式的字符串为对象或数组(前后台)的方法
2016/11/02 Javascript
AngularJS 验证码60秒倒计时功能的实现
2017/06/05 Javascript
JS中LocalStorage与SessionStorage五种循序渐进的使用方法
2017/07/12 Javascript
详解create-react-app 自定义 eslint 配置
2018/06/07 Javascript
JavaScript&quot;模拟事件&quot;的注意要点详解
2019/02/13 Javascript
js实现秒表计时器
2019/12/16 Javascript
python多线程方式执行多个bat代码
2016/06/07 Python
Python基础篇之初识Python必看攻略
2016/06/23 Python
python+matplotlib实现动态绘制图片实例代码(交互式绘图)
2018/01/20 Python
浅谈Tensorflow由于版本问题出现的几种错误及解决方法
2018/06/13 Python
Python json模块dumps、loads操作示例
2018/09/06 Python
Python装饰器基础概念与用法详解
2018/12/22 Python
浅析python内置模块collections
2019/11/15 Python
Python使用docx模块实现刷题功能代码
2020/02/13 Python
在主流系统之上安装Pygame的方法
2020/05/20 Python
Python常用库Numpy进行矩阵运算详解
2020/07/21 Python
利用python+request通过接口实现人员通行记录上传功能
2021/01/13 Python
纯CSS改变webkit内核浏览器的滚动条样式
2014/04/17 HTML / CSS
北美女性服装零售连锁店:maurices
2019/06/12 全球购物
小学运动会广播稿200字(十二篇)
2014/01/14 职场文书
cf战队收人广告词
2014/03/14 职场文书
英语教师岗位职责
2014/03/16 职场文书
教师廉洁自律个人总结
2015/02/10 职场文书
小学班级口号大全
2015/12/25 职场文书
未发现nvidia显卡怎么办?Win11系统中未检测到nvidia显卡解决教程
2022/04/08 数码科技