浅谈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编程实现语音控制电脑
Apr 01 Python
深入理解Python 代码优化详解
Oct 27 Python
python实现从字典中删除元素的方法
May 04 Python
python利用sklearn包编写决策树源代码
Dec 21 Python
详解python之heapq模块及排序操作
Apr 04 Python
Python实现的排列组合、破解密码算法示例
Apr 12 Python
详解用python实现基本的学生管理系统(文件存储版)(python3)
Apr 25 Python
检测python爬虫时是否代理ip伪装成功的方法
Jul 12 Python
运行tensorflow python程序,限制对GPU和CPU的占用操作
Feb 06 Python
python3检查字典传入函数键是否齐全的实例
Jun 05 Python
利用Opencv实现图片的油画特效实例
Feb 28 Python
Django中session进行权限管理的使用
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产生动态的影像图
2006/10/09 PHP
PHP学习之字符串比较和查找
2011/04/17 PHP
PHP积分兑换接口实例
2015/02/09 PHP
yii数据库的查询方法
2015/12/28 PHP
PHP魔术方法之__call与__callStatic使用方法
2017/07/23 PHP
SWFObject Flash js调用类
2008/07/08 Javascript
禁止你的左键复制实用技巧
2013/01/04 Javascript
js/html光标定位的实现代码
2013/09/23 Javascript
不提示直接关闭网页窗口的JS示例代码
2013/12/17 Javascript
JavaScrip常见的一些算法总结
2015/12/28 Javascript
jquery对象访问是什么及使用方法介绍
2016/05/03 Javascript
Jquery UI实现一次拖拽多个选中的元素操作
2020/12/01 Javascript
JavaScript原生编写《飞机大战坦克》游戏完整实例
2017/01/04 Javascript
JavaScript实现元素滚动条到达一定位置循环追加内容
2017/12/28 Javascript
详解Chai.js断言库API中文文档
2018/01/31 Javascript
vue项目搭建以及全家桶的使用详细教程(小结)
2018/12/19 Javascript
深入koa-bodyparser原理解析
2019/01/16 Javascript
浅析vue中的MVVM实现原理
2019/03/04 Javascript
vue 获取元素额外生成的data-v-xxx操作
2020/09/09 Javascript
在Vue中使用Echarts实例图的方法实例
2020/10/10 Javascript
JavaScript中arguments的使用方法详解
2020/12/20 Javascript
python回溯法实现数组全排列输出实例分析
2015/03/17 Python
python制作爬虫爬取京东商品评论教程
2016/12/16 Python
Python 3.x读写csv文件中数字的方法示例
2017/08/29 Python
Python 实现国产SM3加密算法的示例代码
2020/09/21 Python
Python 可视化神器Plotly详解
2020/12/26 Python
英国剑桥包官网:The Cambridge Satchel Company
2016/08/01 全球购物
Joseph官网:英国小众奢侈品牌
2019/05/17 全球购物
国际商务系学生个人的自我评价
2013/11/26 职场文书
职业生涯规划设计步骤
2014/01/12 职场文书
小学生环保演讲稿
2014/04/25 职场文书
小学模范班主任事迹材料
2014/05/13 职场文书
医学专业毕业生推荐信
2014/07/12 职场文书
简历自我评价模板
2015/03/11 职场文书
Shell中的单中括号和双中括号的用法详解
2022/12/24 Servers