浅谈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 uuid模块使用实例
Apr 08 Python
Python中Django框架利用url来控制登录的方法
Jul 25 Python
详解Python中映射类型(字典)操作符的概念和使用
Aug 19 Python
Python实现使用卷积提取图片轮廓功能示例
May 12 Python
符合语言习惯的 Python 优雅编程技巧【推荐】
Sep 25 Python
Pycharm以root权限运行脚本的方法
Jan 19 Python
python实现文件的备份流程详解
Jun 18 Python
Python安装及Pycharm安装使用教程图解
Sep 20 Python
python安装gdal的两种方法
Oct 29 Python
python批量处理txt文件的实例代码
Jan 13 Python
Python Django form 组件动态从数据库取choices数据实例
May 19 Python
Python pip安装第三方库实现过程解析
Jul 09 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面向对象全攻略 (十六) 对象的串行化
2009/09/30 PHP
php银联网页支付实现方法
2015/03/04 PHP
实例讲解yii2.0在php命令行中运行的步骤
2015/12/01 PHP
php中Ioc(控制反转)和Di(依赖注入)
2017/05/07 PHP
Yii2框架自定义类统一处理url操作示例
2019/05/25 PHP
仅IE9/10同时支持script元素的onload和onreadystatechange事件分析
2011/04/27 Javascript
用Javascript获取页面元素的具体位置
2013/12/09 Javascript
js中的onchange和onpropertychange (onchange无效的解决方法)
2014/03/08 Javascript
JS中类或对象的定义说明
2014/03/10 Javascript
Webpack 实现 AngularJS 的延迟加载
2016/03/02 Javascript
JavaScript数组的栈方法与队列方法详解
2016/05/26 Javascript
jQuery实现边框动态效果的实例代码
2016/09/23 Javascript
JS异步函数队列功能实例分析
2017/11/28 Javascript
红黑树的插入详解及Javascript实现方法示例
2018/03/26 Javascript
js实现简单模态框实例
2018/11/16 Javascript
layui清空,重置表单数据的实例
2019/09/12 Javascript
layui扩展上传组件模拟进度条的方法
2019/09/23 Javascript
React Native中ScrollView组件轮播图与ListView渲染列表组件用法实例分析
2020/01/06 Javascript
javascript中可能用得到的全部的排序算法
2020/03/05 Javascript
[06:30]DOTA2英雄梦之声_第15期_死亡先知
2014/06/21 DOTA
浅要分析Python程序与C程序的结合使用
2015/04/07 Python
python机器学习理论与实战(五)支持向量机
2018/01/19 Python
python如何拆分含有多种分隔符的字符串
2018/03/20 Python
python利用faker库批量生成测试数据
2020/10/15 Python
python实现图片转字符画的完整代码
2021/02/21 Python
html5超简单的localStorage实现记住密码的功能实现
2017/09/07 HTML / CSS
详解px单位html5响应式方案
2018/03/08 HTML / CSS
五一服装活动方案
2014/01/11 职场文书
幼教毕业生自我鉴定
2014/01/12 职场文书
计算机专业优秀大学生自我总结
2014/01/21 职场文书
初中同学聚会感言
2014/02/11 职场文书
民主评议党员登记表自我评价
2014/10/20 职场文书
银行竞聘报告范文
2014/11/06 职场文书
数学教师求职信范文
2015/03/20 职场文书
2015年绩效考核工作总结
2015/05/23 职场文书
图文详解Nginx版本平滑升级方案
2021/09/15 Servers